脑裂
keepalive脑裂时(即vip同时在主备机上出现)很可能和iptables有关,同时注意iptables规则顺序。
目前采用方案:将主备机IP分别添加到对方的iptables中,此处有多种方案可解决,参考资料链接
-A INPUT -s 192.168.25.10/32 -j ACCEPT
接管多服务
接管对象:192.168.25.10 redisA1 :6374(VIP192.168.25.100) redisA2 :6375
192.168.25.11 redisB1 :6374(VIP192.168.25.101) redisB2 :6375
Master配置
! Configuration File for keepalived
global_defs {
router_id redis10
}
vrrp_script chk_redis6374
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6374"
interval 2
timeout 2
fall 3
}
vrrp_script chk_redis6375
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6375"
interval 2
timeout 2
fall 3
}
vrrp_instance redis6374 {
state MASTER
interface eth0
virtual_router_id 60
priority 150
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.100/24
}
track_script {
chk_redis6374
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.25.11 6374"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.25.11 6374"
notify_fault "/etc/keepalived/scripts/redis_fault.sh 6374"
notify_stop "/etc/keepalived/scripts/redis_stop.sh 6374"
}
vrrp_instance redis6375 {
state MASTER # master set to SLAVE also
interface eth0
virtual_router_id 61
priority 150
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.101/24
}
track_script {
chk_redis6375
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.25.11 6375"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.25.11 6375"
notify_fault "/etc/keepalived/scripts/redis_fault.sh 6375"
notify_stop "/etc/keepalived/scripts/redis_stop.sh 6375"
}
Backup配置
! Configuration File for keepalived
global_defs {
router_id redis10
}
vrrp_script chk_redis6374
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6374"
interval 2
timeout 2
fall 3
}
vrrp_script chk_redis6375
{
script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6375"
interval 2
timeout 2
fall 3
}
vrrp_instance redis6374 {
state BACKUP # master set to SLAVE also
interface eth0
virtual_router_id 60
priority 100
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.100/24
}
track_script {
chk_redis6374
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.25.10 6374"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.25.10 6374"
notify_fault "/etc/keepalived/scripts/redis_fault.sh 6374"
notify_stop "/etc/keepalived/scripts/redis_stop.sh 6374"
}
vrrp_instance redis6375 {
state BACKUP # master set to SLAVE also
interface eth0
virtual_router_id 61
priority 100
nopreempt # no seize,must add
advert_int 1
authentication { #all node must same
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.25.101/24
}
track_script {
chk_redis6375
}
notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.25.10 6375"
notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.25.10 6375"
notify_fault "/etc/keepalived/scripts/redis_fault.sh 6375"
notify_stop "/etc/keepalived/scripts/redis_stop.sh 6375"
}
屏蔽自动切回
keepalive如想设置master恢复后不接管, 需把主备的优先级priority设置成一样, 靠nopreempt无法控制master接管功能(待解决)
参考资料
#iptables详解
http://blog.chinaunix.net/uid-26495963-id-3279216.html
#使用 iptables 时,特别注意规则的顺序
http://blog.csdn.net/alonesword/article/details/41648555
#Keepalived 设置master故障恢复后不重新抢回VIP(解决nopreempt无效)
http://blog.csdn.net/nimasike/article/details/52463806
#Keepalived环境开启iptables
http://www.topjishu.com/4460.htm
l