首先两台服务器都安装keepalived
yum install keepalived
修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
主服务器配置文件修改为
vrrp_instance VI_1 { #定义VRRP热备实例 state MASTER #热备状态,MASTER表示主服务器 interface eth0 #承载VIP地址的物理接口 virtual_router_id 1 #虚拟路由ID号,每个热备组保持一致 priority 100 #优先级,数值越大优先级越高 advert_int 1 #通告间隔秒数 authentication { #认证信息,每个热备组保持一致 auth_type PASS #认证类型 auth_pass 123456 #密码字串 } virtual_ipaddress { #指定VIP漂移地址,可以写多个 192.168.10.20 } }
从服务器配置文件修改为
vrrp_instance VI_1 { state BACKUP #改这里 interface eth0 virtual_router_id 1 priority 10 #改这里,这里要改成比主服务器值要小 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.10.20 } }
两台都开启keepalived服务
/bin/systemctl stop keepalived.service
以下是检查是否成功了,运行
ip a
如果成功了,主服务器有虚似ip:192.168.10.20,从服务器没有虚拟ip。把主服务器keepalived关闭掉,从服务器有虚拟ip了,主服务器没有了,如果主服务器重新启动,主服器这时又有虚拟ip了,从服务器没有虚拟ip了
注意:
如果出现了主从服务器都有虚拟ip,那么一般是脑裂了,
比如阿里云的服务器都会有这情况,vrrp没有开放,不支持广播和组播。需要将配置文件中的通信方式修改为单播通信。
以下例子主服务器内网ip为:172.18.40.183,从服务器内网ip为:172.18.40.182,虚拟ip定为:172.18.40.185
主服务器配置文件改为:
vrrp_script chk_nginx { #检测nginx的运行状态 script "/etc/keepalived/nginx_check.sh" #脚本路径 interval 2 #探测间隔时间 weight -20 #如果条件满足,权重-20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 unicast_src_ip 172.18.40.183 unicast_peer { 172.18.40.182 #对端IP地址,此地址一定不能忘记 } advert_int 1 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #将track_script块加入instance配置块 chk_nginx #执行Nginx检测 } virtual_ipaddress { 172.18.40.185/32 } }
从服务器配置改为:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 unicast_src_ip 172.18.40.182 unicast_peer { 172.18.40.183 #对端IP地址,此地址一定不能忘记 } priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.40.185/32 } }
这里增加了nginx检查
vim /etc/keepalived/nginx_check.sh
sh脚本的内容为:
#!/bin/bash if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi
给它附执行权限:
chmod +x /etc/keepalived/nginx_check.sh
单通道配置文件最关键设置的两个参数为:
unicast_src_ip,
unicast_peer
检试下是否成功
主服务器图

从服务器图

当主服务器nginx挂掉之后,sh脚本会执行杀掉keepalived命令,从而虚拟ip为飘到从服务器上面。
特别说明一下,如果是阿里云服务器,可以用阿里云自带的:
浙公网安备 33010602011771号