首先两台服务器都安装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为飘到从服务器上面。