測試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,如需轉載請自行聯系原作者