天天看點

ipvs+ldirectord實作高可用ipvs

一、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 &gt; </code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>        </code><code>echo</code> <code>1 &gt; </code><code>/proc/sys/net/ipv4/conf/eth0/arp_ignore</code>

<code>        </code><code>echo</code> <code>2 &gt; </code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>        </code><code>echo</code> <code>2 &gt; </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 &gt; </code><code>/proc/sys/net/ipv4/conf/all/arp_ignore</code>

<code>        </code><code>echo</code> <code>0 &gt; </code><code>/proc/sys/net/ipv4/conf/eth0/arp_ignore</code>

<code>        </code><code>echo</code> <code>0 &gt; </code><code>/proc/sys/net/ipv4/conf/all/arp_announce</code>

<code>        </code><code>echo</code> <code>0 &gt; </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 &amp;&gt; </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" &gt; /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"  &gt; /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>-&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn</code>

<code>TCP  192.168.0.17:80 rr</code>

<code>  </code><code>-&gt; 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: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; 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>-&gt; 127.0.0.1:80                 Local   1      0          0         </code>

<code>  </code><code>-&gt; 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

繼續閱讀