一共两台机器(43和47,43为主),虚拟IP可以实现自动在两台机器之间切换,刚开始启动虚拟ip在43上,无法访问;把43的keepalived停掉,虚拟ip到47上,可以访问;重启43的keepalived,无法访问。配置文件内容如下:
! Configuration File for keepalived
global_defs {
router_id host-10-193-0-43
}
vrrp_script chk_consul{
script "/home/keepalived/consul_check.sh"
interval 2
weight -20
}
vrrp_script chk_rpcxc{
script "/home/keepalived/rpcxc_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.193.0.198/20
}
track_script{
chk_consul
}
}
两台机器除了router_id和priority不一样外,其他都一样
楼主解决了吗,我的问题跟你一样哦,本地IP访问服务都正常,vip漂到备机用vip可以访问,漂到主机用vip就不行,关键在这之前是好的,我就升级个nginx,从14.1到16.1就这样了,回退了也不行,崩溃
问题分两步
一.抢占引起的vip自动切换
1.43为主,当43启动后虚拟ip切换到43,这个是抢占模式引起的.
解决方法:将keepalived设置成非枪战模式,这样你停了43,切到47后,再次启动43不会强制再把VIP切回43.
vrrp_instance中增加nopreempt
2.vip在43上无法访问.
二.vip无法访问
这里不是很理解描述的无法访问具体现象,揣测有2种可能.
1 vip无法ping通
看下防火墙配置
systemctl stop firewalld && iptables -F (请再三确认防火墙配置,避免造成部分需要的配置丢失)
2.keepalived的配置,理论上你没有配置vrrp_strict是不需要单独配置vrrp_iptables,但你没说具体keepalived版本,不排除小版本存在某些特殊的bug
global_defs 中加vrrp_iptables
3.某个服务比如nginx或者apache无法访问
1.检查对应配置文件的listen配置项,最粗暴的方式设置成0.0.0.0
2.ss -ntlp 查看对应端口的监听
3.利用curl之类的工具依次测试127.0.0.1,服务器ip,vip看是否正常返回.
4.数据库的话查看相关账号授权
这种现象是正常的。keep有两种模式:抢占模式和非抢占模式,你的配置是抢占模式,即vip会一直存在于优先级高的服务器。
一开始43上有vip,说明43的优先级高,43停掉以后,变成47的优先极高(因为43不存在了),这时候vip飘移到了47;等你的43又启动起来,这时候43的优先级比47高,vip又漂移回43了。
至于你说的vip在43的时候服务不能用,那应该排查一下43这台机上的服务是不是本身就不能用。
如果想改变keep的这种工作模式,就是43启动起来了,也不想让vip漂移回去,可以查一下keep的非抢占模式怎么设置。