案例三:

上个案例中,两台director中时刻保持有一台处于活动状态,其中维护一个ipvsadm转发表,表中的条目一直不会发生变化,若下游的某台realserver忽然失效,但是director上的ipvsadm转发表将依旧把请求发送至失效的服务器来处理数据,将会出现网页访问失败的情况。所以,应该有一种机制,用来探测下游的服务器是否处于活动状态,若某台服务器失效,则自动修改ipvsadm转发表,将该发送给失效服务器的请求发送至活动的服务器来处理。动态转发规则表。

拓扑图:

LVS+Heartbeat+Ldirectord _LVS

1.realserver1 httpd访问停掉,访问并刷新192.168.10.101将会出现网页访问不到的情况(只能访问web test2

LVS+Heartbeat+Ldirectord _Ldirectord _02

2.发送至realserver1的转发条目依旧存在

[root@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 ,它能够将heartbeatLVS紧密结合,而且能够探测后方的服务器状态,当服务器失效时,自动删除该条转发条目,即对后方的web群集进行探测

[root@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,编辑该文件

[root@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,而不删除该条目,则该服务器将不能访问

LVS+Heartbeat+Ldirectord _Heartbeat_03

 56 #       request="index.html"

 57 #       receive="Test Page"  把这两行也要注释掉

5.修改资源文件/etc/ha.d/haresources,定义HA群集的资源

定义node1.a.com为主节点,虚拟ip10.101 ,将该虚拟地址添加到eth0上,eth0:0 ;资源2为 ldirectord,他的它的配置文件名称为ldirectord.cf

[root@node1 ha.d]# pwd

/etc/ha.d

[root@node1 ha.d]# vim haresources 

45 node1.a.com 192.168.10.101/24/eth0/ ldirectord::ldirectord.cf

6.删除ipvsadm的转发数据

[root@node1 ha.d]# ipvsadm -C

[root@node2 ha.d]# ipvsadm -C

同步node2

[root@node1 ha.d]# cp ldirectord.cf node2.a.com:/etc/ha.d

[root@node1 ha.d]# scp haresources node2.a.com:/etc/ha.d

7.分别重启两台节点的heartbeat 服务

[root@node1 ha.d]# service heartbeat restart

[root@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;这会由于调整的静默模式为开启,而测试页面不存在,所以将两个转发条目权重调小

[root@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 

realserver1realserver2 上创建探测页面:.test.html文件

[root@server1~]# cd /var/www/html/

[root@server1 html]# vim .test.html

Test ok

[root@server2 html]# vim .test.html

Test ok

9.这时候把server1httpd关掉还是可以访问到web2,刷新的时候不会出现访问不到。

director1上查看如下:

[root@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)上进行处理。所以在director1director2上安装httpd服务,并将该服务处于停止状态,然后将httpd加入haresource文件,成为一种资源,然后将/etc/init.d/httpd 复制到 /etc/ha.d/resource.d 

11.两台director上分别安装httpd服务,并产生页面,将httpd服务处于关闭状态

[root@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服务器,访问

LVS+Heartbeat+Ldirectord _Heartbeat_04

12.可以看到访问到director1上了。

此时查看director的转发表和httpd的状态,出现本机的条目

[root@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.如果director1heartbeat出现故障再次访问时就会通知到director2启动

访问就会出现如下:

LVS+Heartbeat+Ldirectord _LVS_05

[root@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        

本案例到这已经可以说是完整了。