一、heartbeat準備
2、 安裝heartbeat-ldirectord元件包
<code>[root@node1 heartbeat]</code><code># yum localinstall heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm</code>
3、ldirectord元件簡介
ldirectord依賴于自己的配置檔案來生成ipvs的規則,是以,定義LVS叢集、添加RS都是在ldirectord的配置檔案中指定,而無需手動執行ipvsadm指令。ldirectord對LVS叢集的director高可用,并對LVS進群的RS提供健康狀态監測,若某節點出現故障,則會把它從叢集系統中剔除,并在其回複正常後,将它重新加入叢集系統。ldirectord還可以調用ipvsadm指令建立LVS路由表資訊,隻需要在/etc/ha.d/ldirectord.cf配置檔案中指明即可。
4、基本資訊
二、配置
RS:
<code>1、準備RS腳本</code>
<code>#!/bin/bash</code>
<code>vip=192.168.0.17</code>
<code>interface=</code><code>"lo:0"</code>
<code>case</code> <code>$1 </code><code>in</code>
<code>start)</code>
<code> </code><code>echo</code> <code>1 > </code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>
<code> </code><code>echo</code> <code>1 > </code><code>/proc/sys/net/ipv4/conf/eth0/arp_ignore</code>
<code> </code><code>echo</code> <code>2 > </code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>
<code> </code><code>echo</code> <code>2 > </code><code>/proc/sys/net/ipv4/conf/eth0/arp_announce</code>
<code> </code><code>ifconfig</code> <code>$interface $vip broadcast $vip netmask 255.255.255.255 up</code>
<code> </code><code>route add -host $vip dev $interface</code>
<code> </code><code>;;</code>
<code>stop)</code>
<code> </code><code>echo</code> <code>0 > </code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>
<code> </code><code>echo</code> <code>0 > </code><code>/proc/sys/net/ipv4/conf/eth0/arp_ignore</code>
<code> </code><code>echo</code> <code>0 > </code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>
<code> </code><code>echo</code> <code>0 > </code><code>/proc/sys/net/ipv4/conf/eth0/arp_announce</code>
<code> </code><code>ifconfig</code> <code>$interface down</code>
<code>status)</code>
<code> </code><code>if</code> <code>ifconfig</code> <code>lo:0 | </code><code>grep</code> <code>$vip &> </code><code>/dev/null</code><code>; </code><code>then</code>
<code> </code><code>echo</code> <code>"ipvs is running."</code>
<code> </code><code>else</code>
<code> </code><code>echo</code> <code>"ipvs is stopped."</code>
<code> </code><code>fi</code>
<code>*)</code>
<code> </code><code>echo</code> <code>"please input : `basename $0` {start|stop|status}"</code>
<code> </code><code>exit</code> <code>1</code>
<code>esac</code>
<code>[root@node3 ~]</code><code># chmod +x rs.sh</code>
<code>2、準備httpd</code>
<code>[root@node3 ~]</code><code># yum install httpd</code>
<code>[root@node3 ~]</code><code># echo "This is RS" > /var/www/html/index.html</code>
<code>[root@node3 ~]</code><code># service httpd start</code>
<code>[root@node3 ~]</code><code># curl 192.168.0.20</code>
<code>This is RS</code>
<code>[root@node3 ~]</code><code># ./rs.sh start</code>
主備Director測試
<code>[root@node1 ~]</code><code># ifconfig eth0:0 192.168.0.17 broadcast 192.168.0.17 netmask 255.255.255.255 up</code>
<code>[root@node1 ~]</code><code># route add -host 192.168.0.17 dev eth0:0</code>
<code>[root@node1 ~]</code><code># ipvsadm -A -t 192.168.0.17:80 -s rr</code>
<code>[root@node1 ~]</code><code># ipvsadm -a -t 192.168.0.17:80 -r 192.168.0.20 -g</code>
<code>[root@node1 ~]</code><code># ipvsadm -C</code>
<code>[root@node1 ~]</code><code># route del -host 192.168.0.17</code>
<code>[root@node1 ~]</code><code># ifconfig eth0:0 down</code>
主Director:node1配置
<code>1、</code><code>cp</code><code>樣例配置檔案</code>
<code>[root@node1 ~]</code><code># cd /usr/share/doc/heartbeat-ldirectord-2.1.4/</code>
<code>[root@node1 heartbeat-ldirectord-2.1.4]</code><code># cp ldirectord.cf /etc/ha.d</code>
<code>[root@node1 heartbeat-ldirectord-2.1.4]</code><code># cd /etc/ha.d</code>
<code>2、配置檔案</code>
<code>##全局配置</code>
<code># Global Directives </code>
<code>##健康狀态檢測逾時時間間隔 </code>
<code>checktimeout=3 </code>
<code>##每一秒檢查一次 </code>
<code>checkinterval=1</code>
<code>#fallback=127.0.0.1:80</code>
<code>##自動裝載配置檔案</code>
<code>autoreload=</code><code>yes</code>
<code>##日志檔案</code>
<code>logfile=</code><code>"/var/log/ldirectord.log"</code>
<code>##日志檔案級别</code>
<code>#logfile="local0"</code>
<code>##郵件通知警告資訊</code>
<code>#emailalert="[email protected]"</code>
<code>##郵件通知間隔1小時</code>
<code>#emailalertfreq=3600</code>
<code>##郵件通知所有的狀态資訊</code>
<code>#emailalertstatus=all</code>
<code>##是否工作于靜默模式</code>
<code>quiescent=</code><code>yes</code>
<code>##虛拟服務配置</code>
<code># Sample for an http virtual service</code>
<code>##VIP </code>
<code>virtual=192.168.0.17:80</code>
<code>##RS gate為dr類型</code>
<code> </code><code>real=192.168.0.20:80 gate</code>
<code> </code><code>#real=192.168.6.3:80 gate</code>
<code> </code><code>#real=192.168.6.6:80 gate</code>
<code>##backserver</code>
<code> </code><code>fallback=127.0.0.1:80 gate</code>
<code>##健康狀态檢查基于http協定</code>
<code> </code><code>service=http</code>
<code>##請求的頁面</code>
<code> </code><code>request=</code><code>".health.html"</code>
<code>##檢查request=“”頁面中的字元串是否一緻</code>
<code> </code><code>receive=</code><code>""</code>
<code>##對多個虛拟主機進行檢查</code>
<code> </code><code>virtualhost=some.domain.com.au</code>
<code>##排程類型為rr</code>
<code> </code><code>scheduler=rr</code>
<code>##持久連接配接時長</code>
<code> </code><code>#persistent=600</code>
<code>##掩碼</code>
<code> </code><code>#netmask=255.255.255.255</code>
<code>##基于tcp的檢查,叢集服務類型</code>
<code> </code><code>protocol=tcp</code>
<code>##檢查類型為互動式檢查</code>
<code>##checktype:connect是傳輸層檢查,ping是網絡層檢查,negotlate是應用層檢查</code>
<code>##當checktype=negotlate時,ldirectord将基于指定的協定與各RS建立連接配接,完成應用層檢查</code>
<code> </code><code>checktype=negotia</code>
<code>##檢查端口為80</code>
<code> </code><code>checkport=80</code>
<code> </code><code>request=</code><code>"index.html"</code>
<code>##請求的字元串檢查</code>
<code> </code><code>#receive="Test Page"</code>
<code>##對虛拟主機檢查</code>
<code> </code><code>#virtualhost=</code>
<code> </code>
<code>3、準備web服務,node1作為back server提供sorry server服務</code>
<code>[root@node1 ha.d]</code><code># vim /var/www/html/index.html</code>
<code>This is sorry server(node1)</code>
<code>[root@node1 ha.d]</code><code># service httpd start</code>
<code>Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.0.15 </code><code>for</code> <code>ServerName</code>
<code> </code><code>[ OK ]</code>
<code>[root@node1 ha.d]</code><code># curl 192.168.0.15</code>
<code>4、将配置檔案</code><code>cp</code><code>給node2</code>
<code>[root@node1 ha.d]</code><code># scp ldirectord.cf node2:/etc/ha.d/</code>
備Director:node2配置
<code>[root@node2 ~]</code><code># vim /var/www/html/index.html </code>
<code>This is sorry server(node2)</code>
<code>[root@node2 ~]</code><code># service httpd start</code>
<code>Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.0.16 </code><code>for</code> <code>ServerName</code>
<code>[root@node2 ~]</code><code># curl 192.168.0.16</code>
RS準備測試頁
<code>[root@node3 ~]</code><code># echo "ok" > /var/www/html/.health.html</code>
啟動服務
<code>[root@node1 ~]</code><code># service heartbeat start; ssh node2 'service heartbeat start'</code>
gui界面配置資源
1、定義資源組ipvs,定義叢集ip資源(vip)
<a href="http://s5.51cto.com/wyfs02/M01/8A/72/wKioL1gxELCyetcIAADczpHFfEE299.png" target="_blank"></a>
2、定義ipvs規則,lsb格式不提供參數,ocf格式的資源代理須提供配置檔案
<a href="http://s3.51cto.com/wyfs02/M02/8A/76/wKiom1gxEa7ieEOfAADaUNvR_Bk213.png" target="_blank"></a>
3、啟動資源
<a href="http://s1.51cto.com/wyfs02/M02/8A/72/wKioL1gxEhXSmsReAAEwx1BWtYI866.png" target="_blank"></a>
4、驗證node2節點
<code>[root@node2 ~]</code><code># ipvsadm -L -n</code>
<code>IP Virtual Server version 1.2.1 (size=4096)</code>
<code>Prot LocalAddress:Port Scheduler Flags</code>
<code> </code><code>-> RemoteAddress:Port Forward Weight ActiveConn InActConn</code>
<code>TCP 192.168.0.17:80 rr</code>
<code> </code><code>-> 192.168.0.20:80 Route 1 0 0 </code>
<code> </code>
<code>[root@node2 ~]</code><code># ip add show eth0</code>
<code>2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000</code>
<code> </code><code>link</code><code>/ether</code> <code>00:0c:29:15:ea:32 brd ff:ff:ff:ff:ff:ff</code>
<code> </code><code>inet 192.168.0.16</code><code>/24</code> <code>brd 192.168.0.255 scope global eth0</code>
<code> </code><code>inet 192.168.0.17</code><code>/24</code> <code>brd 192.168.0.255 scope global secondary eth0</code>
<code> </code><code>inet6 fe80::20c:29ff:fe15:ea32</code><code>/64</code> <code>scope link </code>
<code> </code><code>valid_lft forever preferred_lft forever</code>
5、驗證負載均衡叢集效果
<a href="http://s3.51cto.com/wyfs02/M01/8A/76/wKiom1gxEu3wgWnYAAA-CgSsgsg478.png" target="_blank"></a>
6、檢測RS下線,director錯誤頁面
<code>[root@node3 ~]</code><code># mv /var/www/html/.health.html /var/www/html/a.html</code>
<code> </code><code>-> 127.0.0.1:80 Local 1 0 0 </code>
<code> </code><code>-> 192.168.0.20:80 Route 0 0 0</code>
<a href="http://s1.51cto.com/wyfs02/M01/8A/72/wKioL1gxE92TVSjvAABApx6xdqs999.png" target="_blank"></a>
同理檢查node1。
本文轉自 元嬰期 51CTO部落格,原文連結:http://blog.51cto.com/jiayimeng/1874717