实例设置vip漂移
  我们可以通过 Keepalived 来实现这个过程。 Keepalived 是一个基于 VRRP 协议(Virtual Router Redundancy Protocol,即虚拟路由冗余协议)来实现的LVS(负载均衡器)服务高可用方案,可以利用其来避免单点故障。
  一个 LVS 服务会有2台服务器运行 Keepalived,一台为主服务器(MASTER),另一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,这时就需要根据 VRRP 的优先级来选举一个 backup 当 master,保证路由器的高可用,继续提供服务,从而保证了高可用性。

先来准备两台机器,IP地址如下:

A: 172.24.8.101
B: 172.24.8.107
  我们现在要实现添加一个虚IP:172.24.8.150,当 A 机器正常时,172.24.8.150 指向 A,当 A 出现故障时指向 B。
  此时通过 ping 可以看到 172.24.8.150 是无法 ping 通的。

安装 Keepalive

  1. $ sudo yum install -y keepalived

配置 Keepalived

A 的配置 

  1. $ cat keepalived.conf
  2. vrrp_instance VI_1 {
  3. state MASTER
  4. interface enp7s0f0
  5. virtual_router_id 51
  6. priority 101
  7. advert_int 1
  8. authentication {
  9. auth_type PASS
  10. auth_pass 123456
  11. }
  12. virtual_ipaddress {
  13. 172.24.8.150
  14. }
  15. }

B 的配置 

  1. vrrp_instance VI_1 {
  2. state MASTER
  3. interface enp7s0f0
  4. virtual_router_id 51
  5. priority 100
  6. advert_int 1
  7. authentication {
  8. auth_type PASS
  9. auth_pass 123456
  10. }
  11. virtual_ipaddress {
  12. 172.24.8.150
  13. }
  14. }

启动 A 和 B 上的 Keepalived 服务

  1. sudo systemctl restart keepalived.service

将 Keepalived 加入开机启动

  1. sudo systemctl enable keepalived.service

测试

  通过 ping 172.24.8.150 发现已经可以通了。  

 查看 A 的 IP信息

  1. $ ip addr show enp7s0f0
  2. 2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
  3. link/ether 6c:92:bf:0d:09:47 brd ff:ff:ff:ff:ff:ff
  4. inet 172.24.8.101/24 brd 172.24.8.255 scope global enp7s0f0
  5. valid_lft forever preferred_lft forever
  6. inet 172.24.8.150/32 scope global enp7s0f0
  7. valid_lft forever preferred_lft forever
  8. inet6 fe80::6e92:bfff:fe0d:947/64 scope link
  9. valid_lft forever preferred_lft forever

  其中可以看到 inet 172.24.8.150/32 scope global enp7s0f0,说明现在 A 是作为虚拟IP的 master 来运行的。  

 查看 B 的 IP信息

  1. $ ip addr show enp7s0f0
  2. 2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
  3. link/ether 6c:92:bf:0d:21:49 brd ff:ff:ff:ff:ff:ff
  4. inet 172.24.8.107/24 brd 172.24.8.255 scope global enp7s0f0
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::6e92:bfff:fe0d:2149/64 scope link
  7. valid_lft forever preferred_lft forever

  此时 B 中没有虚拟IP 的信息。  

验证 Failover

 我们手动停止 A 上的 Keepalived 服务

  1. sudo systemctl stop keepalived.service

 此时 A 的 IP信息为

  1. $ ip addr show enp7s0f0
  2. 2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
  3. link/ether 6c:92:bf:0d:09:47 brd ff:ff:ff:ff:ff:ff
  4. inet 172.24.8.101/24 brd 172.24.8.255 scope global enp7s0f0
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::6e92:bfff:fe0d:947/64 scope link
  7. valid_lft forever preferred_lft forever

  可以看到 A 已经不在有 虚拟IP 的信息了。  

 查看 B 的 IP信息

  1. ip addr show enp7s0f0
  2. 2: enp7s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
  3. link/ether 6c:92:bf:0d:21:49 brd ff:ff:ff:ff:ff:ff
  4. inet 172.24.8.107/24 brd 172.24.8.255 scope global enp7s0f0
  5. valid_lft forever preferred_lft forever
  6. inet 172.24.8.150/32 scope global enp7s0f0
  7. valid_lft forever preferred_lft forever
  8. inet6 fe80::6e92:bfff:fe0d:2149/64 scope link
  9. valid_lft forever preferred_lft forever

  可以看到 B 的 IP信息中 已经有虚拟IP 172.24.8.150 的信息了。
  此时如果再把 A 上的 Keepalived 启动,可以看到 虚拟IP 又重新绑定到了 A 上。