测试keepalived备备模式
<code>一、需求:应用需要做HA,配置一个vip作为入口,心跳监测服务。使用backup</code><code>/backup</code><code>模式通过优先级和track脚本来控制主备</code>
<code>1)分布</code>
<code>主:10.0.200.88,状态:backup,优先级85</code>
<code>备:10.0.200.89,状态:backup,优先级75</code>
<code>vip:10.0.200.90</code>
<code>2)配置文件举例【主】:</code>
<code>[root@200-80 keepalived]</code><code># pwd</code>
<code>/etc/keepalived</code>
<code>[root@200-80 keepalived]</code><code># ls</code>
<code>backup bin keepalived.conf old</code>
<code>[root@200-80 keepalived]</code><code># cat keepalived.conf </code>
<code># Role: master</code>
<code>! Configuration File </code><code>for</code> <code>keepalived</code>
<code>global_defs {</code>
<code> </code><code>router_id LVS_200_88 </code><code># LVS_RealIP第3位_RealIP第4位,备机也是同理</code>
<code>}</code>
<code>vrrp_script CHK_REDIS {</code>
<code> </code><code>script </code><code>"/etc/keepalived/bin/chk_redis.sh"</code>
<code> </code><code>interval 3</code>
<code> </code><code>weight -20</code>
<code>vrrp_instance VIP_REDIS_90 { </code><code># VIP_服务代号_vip的第4位</code>
<code> </code><code>state BACKUP </code><code># 备机用:BACKUP,或者主备都BACKUP,通过优先级控制</code>
<code> </code><code>interface em2 </code><code># 指定网卡</code>
<code> </code><code>virtual_router_id 90 </code><code># id采用vip的第4位</code>
<code> </code><code>priority 85 </code><code># 优先级,默认主=85,备=75</code>
<code> </code><code>nopreempt </code><code># 优先级高的那台设置,表明恢复后,不会和BACKUP抢</code>
<code> </code><code>advert_int 1 </code><code># 通告vrrp的间隔时间</code>
<code> </code><code>authentication { </code><code># 主备机的密码要一致</code>
<code> </code><code>auth_type PASS</code>
<code> </code><code>auth_pass 1111</code>
<code> </code><code>}</code>
<code> </code><code>virtual_ipaddress { </code><code># vip写到这里,可以每行一个</code>
<code> </code><code>10.0.200.90</code>
<code> </code><code>track_script {</code>
<code> </code><code>CHK_REDIS</code>
<code>和备机的配置区别如下:</code>
<code>[root@200-80 keepalived]</code><code># diff keepalived.conf backup/keepalived.conf </code>
<code>1c1</code>
<code>< </code><code># Role: master</code>
<code>---</code>
<code>> </code><code># Role: backup</code>
<code>5c5</code>
<code>< router_id LVS_200_88 </code><code># LVS_RealIP第3位_RealIP第4位,备机也是同理</code>
<code>> router_id LVS_200_89 </code><code># LVS_RealIP第3位_RealIP第4位,备机也是同理</code>
<code>18,19c18,19</code>
<code>< priority 85 </code><code># 优先级,默认主=85,备=75</code>
<code>< nopreempt </code><code># 优先级高的那台设置,表明恢复后,不会和BACKUP抢</code>
<code>> priority 75 </code><code># 优先级,默认主=85,备=75</code>
<code>> </code><code>#nopreempt # 在优先级高的那台设置,表明恢复后,不会和BACKUP抢</code>
<code>3)监测服务的脚本,此处以redis服务为例:</code>
<code>[root@200-80 keepalived]</code><code># cat bin/chk_redis.sh </code>
<code>#!/bin/bash</code>
<code># </code>
<code>c=$(</code><code>ps</code> <code>-ef |</code><code>grep</code> <code>'redis-server \*:6379'</code> <code>|</code><code>wc</code> <code>-l)</code>
<code>echo</code> <code>"`date` ---Check HA: start---"</code> <code>></code><code>/tmp/test_redis_ha</code><code>.log</code>
<code>echo</code> <code>"redis_6379 process count: $c"</code> <code>>></code><code>/tmp/test_redis_ha</code><code>.log</code>
<code>if</code> <code>[ $c -gt 0 ]; </code><code>then</code>
<code> </code><code>retval=0</code>
<code>else</code>
<code> </code><code>retval=1</code>
<code>fi</code>
<code>echo</code> <code>"return: $retval"</code> <code>>></code><code>/tmp/test_redis_ha</code><code>.log</code>
<code>echo</code> <code>"`date` ---Check HA: end---"</code> <code>>></code><code>/tmp/test_redis_ha</code><code>.log</code>
<code>exit</code> <code>$retval</code>
<code>注1:virtual_router_id是唯一的,使用前请在局域网抓包看看</code>
<code>tcpdump -i em2 -nn vrrp</code>
<code>注2:记得给脚本加上x权限喔,否则无法执行,则表示script执行失败,进而影响到优先级。</code>
<code>二、防火墙放行vrrp协议</code>
<code>因为iptables过滤了vrrp协议,它不属于任何端口,像icmp一样,需要单独放行。</code>
<code>-A INPUT -p vrrp -j ACCEPT</code>
<code>例如,在上面的配置文件中,增加到rc.firewall.txt中,icmp那条策略后</code>
<code>-A INPUT -p icmp -j ACCEPT</code>
<code>-A INPUT -p vrrp -j ACCEPT <- 这是增加的一条策略</code>
<code>-A INPUT -i lo -j ACCEPT </code>
<code>【具体操作】在主备机器上都要操作。</code>
<code>检查当前生效的策略:</code>
<code>iptables -nL</code>
<code>保存:</code>
<code>iptables-save >rc.firewall.txt</code>
<code>修改</code>
<code>sed</code> <code>-i </code><code>'/-A INPUT -p icmp -j ACCEPT /a\-A INPUT -p vrrp -j ACCEPT'</code> <code>rc.firewall.txt</code>
<code>应用新策略:</code>
<code>iptables-restore </code><code>/root/rc</code><code>.firewall.txt </code>
<code>确认无误后保存</code>
<code>service iptables save</code>
本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1657604,如需转载请自行联系原作者