天天看点

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

继续阅读