一、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