linux定时更换无规则ip,Linux下使用keepalived实现虚IP的切换

华为云VPC有个特性是虚IP(Virtual IP),虚IP的功能类似于浮动IP,可以绑定到多个ECS上,但是该特性很容易受到客户使用上的困惑,以为VIP绑定了到多个ECS上就能自动配置,其实不然,VIP的使用需要手动或借助其他软件来实现在ECS之间的切换。

下图为我在云上创建一个VIP(192.168.0.67),绑定到两台ECS上,ECS的VPC私有IP分别为192.168.0.2、192.168.0.216,这里演示下如何使用keepalived实现VIP在两台虚拟机之间的切换。

4b1a62c2cf4ff1e489fcf04ddb2b08c5.png

安装和配置keepalived

分别在两台ECS上安装keepalived,我的虚拟机是centos操作系统,可以直接使用yum install -y keepalived来安装,安装完成之后需要对两个ECS上的keepalived进行配置。

ECS1(192.168.0.2)的配置

# cat /etc/keepalived//keepalived.conf

! Configuration File forkeepalived

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 5

priority 100

advert_int 1

virtual_ipaddress {

192.168.0.67

}

}

ECS2(192.168.0.216)的配置

# cat /etc/keepalived//keepalived.conf

! Configuration File forkeepalived

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 5

priority 99

advert_int 1

virtual_ipaddress {

192.168.0.67

}

}

keepalived的配置文件中几个字段的含义:

state:初始的状态,MASTER为主、BACKUP为备;

interface:表示虚IP配置的网络设备

virtual_router_id:虚拟路由的ID,相同的VRID为一组,不同的组需要设置不同的VRID

priority:本节点选举算法中的优先级,优先级高的会最终被选为MASTER节点

advert_int:发VRRP包的时间间隔,即多久进行一次master选举

virtual_ipaddress:虚IP的地址

测试keepalived中VIP倒换

配置完keepalived的配置文件之后,分别在两台ECS上启动keepalived服务,可以使用命令 service keepalived start来启动,此时查看两台ECS的网络配置:

ECS1的网络信息

# ip add

...

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether fa:16:3e:58:85:71 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0

inet 192.168.0.67/32 scope global eth0

inet6 fe80::f816:3eff:fe58:8571/64 scope link

valid_lft forever preferred_lft forever

ECS2的网络信息

# ip add

...

2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether fa:16:3e:35:fc:32 brd ff:ff:ff:ff:ff:ff

inet 192.168.0.216/24 brd 192.168.0.255 scope global eth0

inet6 fe80::f816:3eff:fe35:fc32/64 scope link

valid_lft forever preferred_lft forever

可以看到VIP配置在ECS1的eth0上,因为ECS1的优先级较大,所以在VRRP协议选举中会被选为MASTER节点。如果此时将ECS1关机,会发现VIP会被自动配置在ECS2的eth0上。

而且此时查看ECS2上/var/log/message会有以下日志:

Mar 3 19:59:07 share-6-8 Keepalived_vrrp[13205]: VRRP_Instance(VI_1) Transition to MASTER STATE

Mar 3 19:59:08 share-6-8 Keepalived_vrrp[13205]: VRRP_Instance(VI_1) Entering MASTER STATE

Mar 3 19:59:08 share-6-8 Keepalived_vrrp[13205]: VRRP_Instance(VI_1) setting protocol VIPs.

Mar 3 19:59:08 share-6-8 Keepalived_vrrp[13205]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.0.67

Mar 3 19:59:08 share-6-8 Keepalived_healthcheckers[13204]: Netlink reflector reports IP 192.168.0.67 added

Mar 3 19:59:13 share-6-8 Keepalived_vrrp[13205]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.0.67

也能看出keepalived中VIP切换大概过程:进入MASTER状态之后,会在eth0上配置上VIP,然后发送免费ARP。使用抓包工具也能看出此过程:

79d2750382f251c636277bb60ab615e4.png

两个ECS上同时配置了VIP原因分析

在我测试过程中发现keepalived启动之后,两台ECS上都配置了VIP,很明显这是不对的,出现该种问题主要有以下几种原因:

配置问题,这里就不多说了,如果按照上面的配置基本没问题

安全组问题,由于keepalived使用的是VRRP协议来实现的,该协议利用组播来定时发送消息通知各个节点状态,所以安全组最好增加下面的这条:

45ac551db362738f43e1cd55d750a55e.png

主机防火墙问题,有些镜像中有默认的安全组,会reject掉组播的消息,导致ECS无法收到其他节点的VRRP组播消息,此时可以增加一条规则:iptables -I INPUT -p vrrp -j ACCEPT,例如下面我的防火墙规则增加之后变成下面这样就OK了:

d2210b80f03f0b871255489c220b3b2e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值