测试keepalived备备模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
一、需求:应用需要做HA,配置一个vip作为入口,心跳监测服务。使用backup
/backup
模式通过优先级和track脚本来控制主备
 
1)分布
主:10.0.200.88,状态:backup,优先级85
备:10.0.200.89,状态:backup,优先级75
vip:10.0.200.90
 
 
2)配置文件举例【主】:
[root@200-80 keepalived]
# pwd
/etc/keepalived
[root@200-80 keepalived]
# ls
backup  bin  keepalived.conf  old
[root@200-80 keepalived]
# cat keepalived.conf 
# Role: master
! Configuration File 
for 
keepalived
 
global_defs {
 
router_id LVS_200_88                             
# LVS_RealIP第3位_RealIP第4位,备机也是同理
}
 
vrrp_script CHK_REDIS {
  
script 
"/etc/keepalived/bin/chk_redis.sh"
  
interval 3
  
weight -20
}
 
vrrp_instance VIP_REDIS_90 {                      
# VIP_服务代号_vip的第4位
  
state BACKUP                                    
# 备机用:BACKUP,或者主备都BACKUP,通过优先级控制
  
interface em2                                   
# 指定网卡
  
virtual_router_id 90                            
# id采用vip的第4位
  
priority 85                                     
# 优先级,默认主=85,备=75
  
nopreempt                                       
# 优先级高的那台设置,表明恢复后,不会和BACKUP抢
  
advert_int 1                                    
# 通告vrrp的间隔时间
 
  
authentication {                                
# 主备机的密码要一致
    
auth_type PASS
    
auth_pass 1111
  
}
 
  
virtual_ipaddress {                             
# vip写到这里,可以每行一个
    
10.0.200.90
  
}
 
  
track_script {
    
CHK_REDIS
  
}
 
}
 
和备机的配置区别如下:
[root@200-80 keepalived]
# diff keepalived.conf backup/keepalived.conf 
1c1
# Role: master
---
# Role: backup
5c5
<  router_id LVS_200_88                             
# LVS_RealIP第3位_RealIP第4位,备机也是同理
---
>  router_id LVS_200_89                             
# LVS_RealIP第3位_RealIP第4位,备机也是同理
18,19c18,19
<   priority 85                                     
# 优先级,默认主=85,备=75
<   nopreempt                                       
# 优先级高的那台设置,表明恢复后,不会和BACKUP抢
---
>   priority 75                                     
# 优先级,默认主=85,备=75
>   
#nopreempt                                       # 在优先级高的那台设置,表明恢复后,不会和BACKUP抢
 
 
 
3)监测服务的脚本,此处以redis服务为例:
[root@200-80 keepalived]
# cat bin/chk_redis.sh 
#!/bin/bash
 
c=$(
ps 
-ef |
grep 
'redis-server \*:6379' 
|
wc 
-l)
 
echo 
"`date` ---Check HA: start---" 
>
/tmp/test_redis_ha
.log
echo 
"redis_6379 process count: $c" 
>>
/tmp/test_redis_ha
.log
 
if 
[ $c -gt 0 ]; 
then
  
retval=0
else
  
retval=1
fi
echo 
"return: $retval" 
>>
/tmp/test_redis_ha
.log
echo 
"`date` ---Check HA: end---" 
>>
/tmp/test_redis_ha
.log
exit 
$retval
 
 
 
 
注1:virtual_router_id是唯一的,使用前请在局域网抓包看看
tcpdump -i em2 -nn vrrp
注2:记得给脚本加上x权限喔,否则无法执行,则表示script执行失败,进而影响到优先级。
 
 
 
二、防火墙放行vrrp协议
因为iptables过滤了vrrp协议,它不属于任何端口,像icmp一样,需要单独放行。
-A INPUT -p vrrp -j ACCEPT
 
例如,在上面的配置文件中,增加到rc.firewall.txt中,icmp那条策略后
-A INPUT -p icmp -j ACCEPT
-A INPUT -p vrrp -j ACCEPT   <-  这是增加的一条策略
-A INPUT -i lo -j ACCEPT 
 
【具体操作】在主备机器上都要操作。
检查当前生效的策略:
iptables -nL
保存:
iptables-save >rc.firewall.txt
修改
sed 
-i 
'/-A INPUT -p icmp -j ACCEPT /a\-A INPUT -p vrrp -j ACCEPT' 
rc.firewall.txt
应用新策略:
iptables-restore 
/root/rc
.firewall.txt 
检查当前生效的策略:
iptables -nL
确认无误后保存
service iptables save