首先准备两台服务器,我这里的两台服务器的ip分别是192.168.129.128和192.168.129.129

1.安装keepalived(两台都要装):
yum install keepalived
2.修改配置文件,删除掉/etc/keepalived/keepalived.conf,然后重新创建一个/etc/keepalived/keepalived.conf:
vi /etc/keepalived/keepalived.conf
128这台服务器的内容如下:
vrrp_script chk_nginx {
   script "/home/keepalived/nginx_check.sh"
   interval 2
   weight -20
 }vrrp_instance VI_1 {
     state BACKUP
     interface ens33
     virtual_router_id 100
     mcast_src_ip 192.168.129.128
     priority 99
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }    track_script {
      chk_nginx
     }
     virtual_ipaddress {
         192.168.129.100
     }
 }


 

简单解释下:
vrrp_script chk_nginx这里是一个执行脚本,定时2S执行一次,这里的演示我没有创建这个脚本,所以它不会执行,也就是这句不会生效了。因此你如果不需要脚本的时候,可以把这句连同track_script 这句一起去掉。留着也不会有什么影响。

state BACKUP 表示这两个服务器都是备用服务器。

interface ens33 表示当前使用的网卡,通过ifconfig可以查看到,这我用的是ens33。

virtual_router_id 100 这个是个分组标记,在一个网内,所有的virtual_router_id为100的服务器自动分到一个组里面,由于这里面我把两台服务器的status都设置成为了BACKUP,那么这两台服务器就会利用priority这个值来决定谁是主服务器,谁是备用服务器,高的那个会抢占当前的vip,也就是它就会变成主服务器。

mcast_src_ip 填写你当前机器的真实ip即可

advert_int 1 没有仔细研究,应该是两台服务器之间的心跳间隔

authentication 就用默认的就可以了。

track_script 和vrrp_script chk_nginx 配合使用的。

virtual_ipaddress 两台机器共有的vip,注意,要和两台服务器在一个网关里面。

129的配置文件如下:

vrrp_script chk_nginx {
   script "/home/keepalived/nginx_check.sh"
   interval 2
   weight -20
 }vrrp_instance VI_1 {
     state BACKUP
     interface ens33
     virtual_router_id 100
     mcast_src_ip 192.168.129.129
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }    track_script {
      chk_nginx
     }
     virtual_ipaddress {
         192.168.129.100
     }
 }
 3.修改好配置文件之后,重启两台机器的keepalived:systemctl restart keepalived

4.由于129这台机器的priority是100,比128的大,所以,这个时候,vip应该是被129占用着的。为了测试方便,我分别在两台服务器上安装了数据库postgresql,128里面有一个数据库128,129里面有一个数据库129,如图:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_主备

5.测试之前先把两台机器的防火墙都关掉:systemctl stop firewalld。然后使用192.168.129.100这个vip链接数据库,如前所述,当前是129占用着vip,因此使用padmin3尝试链接上数据库之后,应该看到129的数据库,如图:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_虚拟ip_02

6.把129的keepalived进程杀掉或者关机:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_虚拟ip_03

再尝试用100链接数据库,看到的应该是128数据库了,表明128服务器接管了当前服务变为主服务器了:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_主备_04

7.现在恢复129服务器,修改掉配置文件里面的priority为98(比128当前的值要小),然后启动keepalived,这样129就由原来的主服务器变为备用服务器了。重新用100这个vip链接数据库,看到的应该仍然是128数据库:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_keepalived配置虚拟ip没反应_05

8.把128的keepalived进程终止掉或者把服务器关机,再次用100尝试链接数据库,看到的应该是129:

keepalived配置虚拟ip没反应 keepalived 虚拟ip_虚拟ip_06

表示129正确接管了当前服务,尝试恢复128(恢复前将priority值改为97),这个时候128就变成了备用服务器了。

9.现在还有一个问题,前面说的是主备自动切换,两台服务器互为主从的模式,如果我们希望把其中一台服务器作为主服务器,当它宕机的时候,备用服务器接管,当它恢复后,将备用服务器的接管权抢占过来,该怎么做呢,方法就是利用priority这个属性。前面我们说过谁的值大,谁就会抢占vip,然后作为主服务器,也就是说在主服务器宕机恢复后,只要确保它的priority值大于备用服务器,那么它就会自动抢占vip,从而成为主服务器。这里我就不演示了,有需要的话自己可以尝试下。