案例三: 上个案例中,两台director中时刻保持有一台处于活动状态,其中维护一个ipvsadm转发表,表中的条目一直不会发生变化,若下游的某台realserver忽然失效,但是director上的ipvsadm转发表将依旧把请求发送至失效的服务器来处理数据,将会出现网页访问失败的情况。所以,应该有一种机制,用来探测下游的服务器是否处于活动状态,若某台服务器失效,则自动修改ipvsadm转发表,将该发送给失效服务器的请求发送至活动的服务器来处理。动态转发规则表。 拓扑图:
1.将realserver1 的httpd访问停掉,访问并刷新192.168.10.101将会出现网页访问不到的情况(只能访问web test2)
2.发送至realserver1的转发条目依旧存在 [iyunv@node1 ~]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.101:http rr -> 192.168.10.203:http Route 1 0 3 -> 192.168.10.204:http Route 1 0 4 3.要想实现一种动态的ipvsadm转发规则表,需要安装heartbeat-ldirectord ,它能够将heartbeat与LVS紧密结合,而且能够探测后方的服务器状态,当服务器失效时,自动删除该条转发条目,即对后方的web群集进行探测 [iyunv@node1 ~]# rpm -ivh heartbeat-ldirectord-2.1.4-9.el5.i386.rpm 4.拷贝heartbeat-ldirectord的配置文件/usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf 到/etc/ha.d下,编辑该文件 [iyunv@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ checkinterval=1 每一秒检查一次后方服务器 checktimeout=3 三秒检测不到服务器就删除到该服务器的转发条目 autoreload=yes 修改该文件后,不用重启服务就进行加载该文件内容 fallback=127.0.0.1:80 如果后方的服务器全都无法探测到的话,就将本机作为服务器提供服务,不过本机的服务要处于停止状态,有heartbeat进行控制 logfile="local0" 将ldirectord的日志和/var/log/messages混合 quiescent=yes 静默模式 当无法探测到后方的服务器时就调整到该服务器的条目的权重为0,而不删除该条目,则该服务器将不能访问
56 # request="index.html" 57 # receive="Test Page" 把这两行也要注释掉 5.修改资源文件/etc/ha.d/haresources,定义HA群集的资源 定义node1.a.com为主节点,虚拟ip为10.101 ,将该虚拟地址添加到eth0上,eth0:0 ;资源2为 ldirectord,他的它的配置文件名称为ldirectord.cf [iyunv@node1 ha.d]# pwd /etc/ha.d [iyunv@node1 ha.d]# vim haresources 45 node1.a.com 192.168.10.101/24/eth0/ ldirectord::ldirectord.cf 6.删除ipvsadm的转发数据 [iyunv@node1 ha.d]# ipvsadm -C [iyunv@node2 ha.d]# ipvsadm -C 同步node2 [iyunv@node1 ha.d]# cp ldirectord.cf node2.a.com:/etc/ha.d [iyunv@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d 7.分别重启两台节点的heartbeat 服务 [iyunv@node1 ha.d]# service heartbeat restart [iyunv@node2 ha.d]# service heartbeat restart 在node1.a.com,是node1在使用vip eth0:0 Link encap:Ethernet HWaddr 00:0C:29:56:00:D6 inet addr:192.168.10.101 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:67 Base address:0x2000 8.查看node1.a.com 的ipvsadm的转发表,发现权重都变为0,默认为1;这会由于调整的静默模式为开启,而测试页面不存在,所以将两个转发条目权重调小 [iyunv@node1 ha.d]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.101:http rr -> 192.168.10.203:http Route 0 0 0 -> 192.168.10.204:http Route 0 0 0 -> localhost.localdomain:http Local 1 0 0 在realserver1和realserver2 上创建探测页面:.test.html文件 [iyunv@server1~]# cd /var/www/html/ [iyunv@server1 html]# vim .test.html Test ok [iyunv@server2 html]# vim .test.html Test ok 9.这时候把server1的httpd关掉还是可以访问到web2,刷新的时候不会出现访问不到。 在director1上查看如下: [iyunv@node1 ~]# ipvsadm TCP 192.168.10.101:http rr -> 192.168.10.203:http Route 0 0 0 -> 192.168.10.204:http Route 1 0 4 10.若后方的两台服务器都失效,则用户将无法访问到页面。这是可以使用回滚fallback,将请求发送到本机(director1)上进行处理。所以在director1和director2上安装httpd服务,并将该服务处于停止状态,然后将httpd加入haresource文件,成为一种资源,然后将/etc/init.d/httpd 复制到 /etc/ha.d/resource.d 下 11.两台director上分别安装httpd服务,并产生页面,将httpd服务处于关闭状态 [iyunv@node1 ha.d]# vim ldirectord.cf 27 fallback=127.0.0.1:80 gate 修改/etc/ha.d/resources,添加httpd 45 node1.a.com 192.168.10.101/24/eth0/ 空格ldirectord::ldirectord.cf 空格httpd 重新启动heartbeat服务,然后停用后方的两台web服务器,访问
12.可以看到访问到director1上了。 此时查看director的转发表和httpd的状态,出现本机的条目 [iyunv@node1 ha.d]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.101:http rr -> localhost.localdomain:http Local 1 0 4 -> 192.168.10.203:http Route 0 0 0 -> 192.168.10.204:http Route 0 0 0 13.如果director1的heartbeat出现故障再次访问时就会通知到director2启动 访问就会出现如下:
[iyunv@node2 ha.d]# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.101:http rr -> 192.168.10.203:http Route 0 0 0 -> 192.168.10.204:http Route 0 0 0 -> localhost.localdomain:http Local 1 0 3 本案例到这已经可以说是完整了。 |