本文主要讲述vs/dr方式
实验环境:
主Load Balancer服务器:192.168.2.40
备Load Balancer服务器:192.168.2.19
Real server 192.168.2.31,192.168.2.41
Vip 192.168.2.233(无人占用)
ipatbles off,selinux disabled
注意:在主备Load Balancer服务器上,heartbeat的配置内容完全一样。hearbeat不管服务状态,只管服务主机状态
一.部署heartbeat,即配置主备负载均衡服务器
HeartBeat 是 Linux-HA 的高可用性集群软件,它的主要作用是:
安装在 Load Balancer 和 Backup 上,运行于 active/standby 模式。当 Load Balancer 失效时,Backup 自动激活,成为实际的 Load Balancer。切换到 active 模式时,按顺序启动 Virtual IP、IPVS 和 Ldirectord。切换到 standby 模式时,按顺序关闭 Ldirectord、IPVS 和 Virtual IP。
下载软件包:
heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
安装软件包:
heartbeat-3.0.4-2.el6.x86_64.rpm heartbeat-libs-3.0.4-2.el6.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
[root@server40 ~]# yum localinstall * -y
更改配置文件:
将ha.cf,haresource, sauthkeys文件拷贝至系统启动会加载的目录/etc/ha.d/下。
[root@server40 heartbeat-3.0.4]# cp /usr/share/doc/heartbeat-3.0.4/ha.cf haresource sauthkeys /etc/ha.d/
打开或者编辑以下:
[root@server40 ha.d]# vim ha.cf
debugfile /var/log/ha-debug打开调试日志文件文件
logfile /var/log/ha-log打开系统运行日志文件
logfacility local0打开日志等级
keepalive 2心跳频率,自己设定。1:表示 1 秒;200ms:表示 200 毫秒
deadtime 30节点死亡时间阀值,就是从节点在过了 30秒 后还没有收到心跳就认为主节点死亡,自己设定
warntime 10发出警告时间,自己设定
initdead 120守护进程首次启动后应该等待 120 秒后再启动主服务器上的资源
udpport 694(做实验时,此端口必须是别人没用的)心跳信息传递的 udp 端口,使用端口 694 进行 bcast和 ucast 通信,取默认值
#baud 19200串口波特率,与 serial 一起使用。
#serial /dev/ttyS0采用串口来传递心跳信息。
bcast eth0采用 eth0网卡广播播来通知心跳
#ucast eth1 10.0.0.3采用网卡 eth1 的 udp 单播来通知心跳,eth1 的 IP
#mcast eth0 225.0.0.1 694 1 0采用 udp 多播来通知心跳
auto_failback on当主节点恢复后,是否自动切回
#stonith baytech /etc/ha.d/conf/stonith.baytechstonith 用来保证共享存储环境中的数据完整性
打开:watchdog /dev/watchdog
watchdog 能让系统在出现故障 1 分钟后重启该机器,这个功能可以帮助服务器在确实停止心
跳后能够重新恢复心跳。 如果使用该特性,修改系统中/etc/modprobe.d/softdog.conf 添加如下行
options softdog
这样在系统启动的时候,在内核中装入"softdog"内核模块,用来生成实际的设备文件/dev/watchdog
node server40.example.com
主节点名称,与 uname –n 保持一致。排在第一的默认为主节点,所以不要搞措顺序
node server19.example.com
副节点名称,与 uname –n 保持一致
ping 192.168.2.251此处为网关
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
默认 heartbeat 并不检测除本身之外的其他任何服务,也不检测网络状况。
所以当网络中断时,并不会进行 Load Balancer 和 Backup 之间的切换。
可以通过 ipfail 插件,设置'ping nodes'来解决这一问题,但不能使用一个集群节点作为
ping 的节点。
#######################################################
heartbeat自带的断网切换的工具-ipfail
ipfail断网切换的原理
关于ipfail这个断网切换的原理很简单,首先heartbeat要判断自己的网络是否正常其实就是通过ping某个ip,如果可以ping的通,说明网络是通的,如果ping不通了,说明是网络断了,或者是主服务器的网卡坏了,然后执行切换的动作。但是如果是被ping的那个ip的网卡出问题了怎么办呢,那岂不是也造成了误切换?所幸heartbeat想到了这种情况,而提供了ping group的功能,就是让heartbeat同时ping两个或者两个以上的ip,如果所有的都ping不通了,ipfail才认为是主服务器的网络断了,或是网卡坏了。然而在大多数的一般情况下我们ping一个ip也是可以的,因为我们可以把这个ip设置成我们这个网络中default gateway(默认网关)的ip,因为如果是默认网关的网卡坏了,即便是误切换也无所谓了,默认网关坏了那么我们的服务是怎么也不可能被访问到了。
下边我会对 ping 一个ip和ping group的功能及配置方法一一介绍。
ipfail的配置与使用
我们要使用ipfail这个断网切换的功能,只要在ha.cf这个配置文件中配置即可:
1.配置文件中有很多英文的解释以及示例被#号注释,供参考,我们使用ipfail时只要去掉相应的#号即可,下面写出ping一个ip的ipfail配置:
ping 192.168.2.251
respawn hacluster /usr/lib64/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
只有这3行,非常简单,只要写在ha.cf重启动heartbeat服务就可以生效了,我来解释一下这3行配置文件的意思:
ping 192.168.2.251
一般是ping网关,告诉ipfail网络是否畅通。
respawn hacluster /usr/lib64/heartbeat/ipfail
这句就是指定断网切换的程序文件路径,我们一定要给出正确的路径,一般情况下,这个ipfail文件会在heartbeat安装目录下的lib/heartbeat/子文件夹下,确认好以后我们给出正确的路径, 其中hacluster是一个uid,是以hacluster这个用户身份运行ipfail。即,当断网后,以hacluster用户的身份运行ipfail文件
apiauth ipfail gid=haclient uid=hacluster
是指定对ipfail有权限的用户和组
2.ping一个group的ipfail配置:
ping_group group1 172.16.103.254 172.16.103.212
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
ping_group group1 172.16.103.254 172.16.103.212
这个就是同时ping多个ip,只有所有的ip都无法ping通时,ipfail才会执行切换的动作,保证了不会是因为被ping的ip出了问题而产生误切换。后边两句前面说过了,不再解释了。
最后需要注意的是不要把ping 和ping group 这两行同时写出来,写ping的内容时,要保证ping group是注释的,写ping group时,要保证ping那行是注释着的,否则会出问题的, 切换运行不正常。
#######################################################
资源文件上更改启动哪些资源(必须填写主节点)
[root@server40 ha.d]# vim haresources
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd
#######################################################
haresources这个文件中定义了实现集群所需的各个软件的启动脚本,这些脚本必须放在/etc/init.d 或者/etc/ha.d/resource.d 目录里 IPaddr 的作用是启动 Virutal IP,它是 HeartBeart 自带的一个脚本;ldirectord 的作用是启动 ldirectord 监控程序,它会使 ldirectord.cf 中定义的 lvs 生效,并监听其健康状;httpd 是 apache 服务的启动脚本。
配置好ha.cf文件之后,便是haresources文件。该文件列出集群所提供的服务以及服务的默认所有者。 注意:两个集群节点上的该文件必须相同。集群的IP地址是该选项是必须配置的,不能在haresources文件以外配置该地址, haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等。其配置语句格式如下:
node-name network-config resource-group
其中node-name指定双机系统的主节点,取值必须匹配ha.cf文件中node选项设置的主节点。network-config用于网络设置,包括指定集群IP、子网掩码、广播地址等。resource-group用于设置heartbeat启动的服务,该服务最终由双机系统通过集群IP对外提供。在本文中我们假设要配置的HA服务为Apache。
在haresources文件中需要如下内容:
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd
该行指定在启动时,节点server40.example.com得到IP地址192.168.2.233,并启动Apache。在停止时,Heartbeat停止Apache,最后释放IP地址192.168.2.233。这里假设命令“uname –n”的输出为“server40.example.com”-如果输出为“server40”,便应使用“server40”。
正确配置好haresources文件之后,将ha.cf和haresource拷贝到/etc/ha.d目录。
注意:资源文件中能执行的命令必须在/etc/ha.d/resource.d/ 中可见
#######################################################
认证文件(/etc/ha.d/authkeys),文件的权限必须是 600:
[root@server40 ha.d]# vim authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
######################################################
注:安全级别由高到低:sha1->md5->crc
需要配置的第三个文件authkeys决定了您的认证密钥。共有三种认证方式:crc,md5,和sha1。您可能会问:“我应该用哪个方法呢?”简而言之: 如果您的Heartbeat运行于安全网络之上,如本例中的交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解。
因此,对于sha1,示例的/etc/ha.d/authkeys可能是
auth 1
1 sha1 key-for-sha1-any-text-you-want
对于md5,只要将上面内容中的sha1换成md5就可以了。 对于crc,可作如下配置:
auth 2
2 crc
不论您在关键字auth后面指定的是什么索引值,在后面必须要作为键值再次出现。如果您指定“auth 4”,则在后面一定要有一行的内容为“4 ”。
确保该文件的访问权限是安全的,如600。
######################################################
[root@server40 ha.d]# chmod 600 authkeys
[root@server40 modprobe.d]# modprobe softdog
[root@server19 modprobe.d]# modprobe softdog
[root@server40 modprobe.d]# vim softdog.conf
options softdog
~
[root@server40 ha.d]# yum install httpd -y
[root@server19 ha.d]# yum install httpd -y
[root@server40 ha.d]# scp ha.cf haresources authkeys 192.168.2.19:/etc/ha.d/
编辑测试页面:
[root@server40 html]# echo `hostname`>index.html
[root@server19 html]# echo `hostname`>index.html
启动heartbeat:
[root@server40 html]# /etc/init.d/heartbeat start
在主节点上出现以下信息则成功:
[root@server40 html]# ifconfig
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:7C:90
inet addr:192.168.2.233 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
apache被自动启动
[root@server40 html]# /etc/init.d/httpd status
httpd (pid 4226) is running...
而在备节点上,apache没有被自动启动:
[root@server19 html]# /etc/init.d/httpd status
httpd is stopped
浏览器中输入:192.168.2.233
出现以下信息则正确,表明主节点在工作
server40.example.com
当当掉主节点的heartbeat时,备节点会主动接管,虚拟ip会主动飘到备节点:
[root@server40 html]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
[root@server40 html]# /etc/init.d/httpd status
httpd is stopped
[root@server19 html]# /etc/init.d/httpd status
httpd (pid 25037) is running...
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:5D:75:96
inet addr:192.168.2.233 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
浏览器中输入:192.168.2.233
出现以下信息则正确,表明备节点在工作
server19.example.com
当主节点的heartbeat再次被启动时,会将运行在备节点上的资源服务接过去。
二.部署LB
安装lvs管理工具ipvsadm:
[root@server40 ~]# yum install ipvsadm -y
[root@server19 ~]# yum install ipvsadm -y
向ipvsadm表中添加规则:
[root@server40 ~]# ipvsadm -A -t 192.168.2.233:80 -s rr
[root@server40 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.31:80 -g
[root@server40 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.41:80 -g
[root@server19 ~]# ipvsadm -A -t 192.168.2.233:80 -s rr
[root@server19 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.31:80 -g
[root@server19 ~]# ipvsadm -a -t 192.168.2.233:80 -r 192.168.2.41:80 -g
用命令可查看所添加的规则:
[root@server40 ~]# ipvsadm -l
停掉本HA节点的httpd服务:
[root@server40 ~]# /etc/init.d/httpd stop
给real server安装httpd服务:
[root@server31 ~]# yum install httpd -y
[root@server41 ~]# yum install httpd -y
编辑测试页面并启动httpd服务:
[root@server31 html]# echo `hostname`
[root@server41 html]# echo `hostname`
[root@server31 html]# /etc/init.d/httpd start
[root@server41 html]# /etc/init.d/httpd start
在real server上安装MAC与IP地址的解析协议即arp:
[root@server31 html]# yum install arptables_jf -y
[root@server41 html]# yum install arptables_jf -y
添加规则:
[root@server31 ~]# ifconfig eht0:0 191.68.2.233 netmask 255.255.255.255
[root@server31 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server31 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.31
[root@server31 ~]# /etc/init.d/arptables_jf save
[root@server41 ~]# ifconfig eht0:0 191.68.2.233 netmask 255.255.255.255
[root@server41 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server41 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.41
[root@server31 ~]# /etc/init.d/arptables_jf save
测试:
http://192.168.2.233
反复刷新网页,每次出现的网页不同则表示成功。
三.用ldirectord实现调度
#################################################################
HA只有一台工作,real server两台都得工作
lvs三种工作模式(nat,tun,DR)
VS/NAT
在一组服务器前有一个调度器,它们是通过 Switch/HUB 相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执 行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系统(如 NFS)共享,也可以通过一个分布式文件系统来提供。VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。缺点是它的伸缩能力有限, 当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
VS/TUN
它的连接调度和管理与 VS/NAT 中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP 的报文,服务器发现 VIP地址被配置在本 地的 IP 隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。在 VS/TUN 的集群系统中,负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调 度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。即使负载调度器只有100Mbps 的全双工网卡,整个系统的最大吞吐量可超过 1Gbps。所以,VS/TUN 可以极大地增加负载调度器调度的服务器数量。VS/TUN 调度器可以调度上百台服务器,而它本身不会成为系统的瓶颈,可以 用来构建高性能的超级服务器。
VS/DR
跟 VS/TUN 方法相同,VS/DR 利用大多数 Internet 服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB 相连。VIP 地址为调度器和服务器组共享,调度器配置的 VIP 地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把 VIP 地址配置在各自的 Non-ARP 网络设备上,它对外面是不可见的,只是用于处 理目标地址为 VIP 的网络请求。
以下是LVS-DR的工作原理,包括数据包、数据帧的走向和转换过程:官方的原理说明:Director接收用户的请求,然后根据负载均衡算法选取一台realserver,将包转发过去,最后由realserver直接回复给用户。
实例场景设备清单:
说明:我这里为了方便,client是与vip同一网段的机器。如果是外部的用户访问,将client替换成gateway即可,因为IP包头是不变的,变的只是源mac地址。
① client向目标vip发出请求,Director接收。此时IP包头及数据帧头信息如下:
② VS根据负载均衡算法选择一台active的realserver(假设是192.168.57.122),将此RIP所在网卡的mac地址作为目标mac地址,发送到局域网里。此时IP包头及数据帧头信息如下:
③ realserver(192.168.57.122)在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文。随后重新封装报文,发送到局域网。此时IP包头及数据帧头信息如下:
④ 如果client与VS同一网段,那么client(192.168.57.135)将收到这个回复报文。如果跨了网段,那么报文通过gateway/路由器经由Internet返回给用户。
DR模式的工作过程:
当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real-server上;当连接中止或者超时,hash表中的记录将被删除。
LVS的DR模式不需要开启路由转发功能,就可以正常的工作,出于安全考虑,如果不需要转发功能,最好关闭。
Ldirectord功能说明:
checktimeout=3
这个值就是 ldirectord 等待健康检查执行完毕的等待时间,单位秒。如果因为某些原因检查失败或在设置的时间周期内没有完成检查,ldirectord 将会从 IPVS 表中移除真实服务器
ARP问题:
通常,DR模式需要在Real-server上配置VIP,配置的方式为:
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255
原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上;当发送应答包给client时,Real-server就会把包的源和目的地址调换,直接回复给client。
关于ARP广播:
上面绑定VIP的掩码是”255.255.255.255″,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止与LVS上VIP冲突,而导致IP冲突。
另外在Linux的Real-server上,需要设置ARP的sysctl选项:(下面是举例说明设置项的)
checkinterval=1
这个值指定 ldirectord 在两个检查之间的间隔时间。
autoreload=yes
如果启用这个选项,它使 ldirectord 按时计算这个配置文件的 md5 校验和值,看其是否有改动,当发现有改动时自动应用那些改动,这个方便的 特性运行你容易地改变集群的配置,你对配置文件改动后几秒,ldirectord 将察觉到有改动,调用 ipvsadm 命令实现改动,从有效服务器池中移除 真实服务器或按需要将它们添加到池中[17]。
quiescent=no
当一个节点在 checktimeout 设置的时间周期内没有响应时它是“静止的”(它的权重为0),当你设置了这个选项后,ldirectord 将 会从 IPVS 表中移除真实服务器而不是“停止”它,从 IPVS 表移除节点将中断现有的客户端连接,并使 LVS 丢掉所有的连接跟踪记录和持续连接模板,如果 你不将这个选项设置为 no,当某个节点崩溃时,对某些客户端计算机而言可能会显示为集群关闭了,因为在这个节点崩溃前这些客户端计算机被分配给它了,而连 接跟踪记录和程序连接模板仍然保留在 Director 上。
Ldirectord将会每秒连接一次real server并请求/index.html。如果real server返回的数据没有包含 "Test Message" 信息,则检测失败,并且real server将会被踢出集群,当real server被检测成功时,才会被恢复到集群。如果所有的real server都被剔除了,则本地的服务则会被当做real server而工作。
中文网站:zh.linuxvirtualserver.org
###########################################################################
在real server上必须屏蔽掉vip,采用设置arp即在底层换掉mac地址
屏蔽方法:1内核上屏蔽
2arptable(红帽推荐的方法)
实验环境:
Load Balancer:192.168.2.40(主)
192.168.2.19(备)
Real Server:192.168.2.31
192.168.2.41
Vip 192.168.2.233
[root@server40 ha.d]# /etc/init.d/heartbeat stop
[root@server19 ha.d]# /etc/init.d/heartbeat stop
下载安装调度器的软件包:
ldirectord-3.9.2-1.2.x86_64.rpm
[root@server40 ~]# yum localinstall ldirectord-3.9.2-1.2.x86_64.rpm -y
由以下命令查看ldirectord的配置文件位置:
[root@server40 ~]# rpm -ql ldirectord
/usr/share/doc/packages/ldirectord/ldirectord.cf
将其配置文件拷贝至ha目录下:
[root@server40 ~]# cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
修改配置文件:
Load Balancer 通过 Ldirectord 监测各 Real Server 的健康状况。在 Real Server 不可用时把它从群中剔除,恢复时重新加入。
[root@server40 ha.d]# vim ldirectord.cf
# Sample for an http virtual service
virtual=192.168.2.233:80 ##这一行指定我们想要在 Director 上设置的 VIP 地址和端口号,这就是你要添加到 DNS 向客户端广播的 ip 地址,任何情况下,这就是客户端计算机用来连接到你配置的集群资源的 ip 地址。
real=192.168.2.31:80 gate ##服务器
real=192.168.2.41:80 gate ##服务器
fallback=127.0.0.1:80 gate ##当real server均不可用时,调用自己的服务
service=http ##定义服务
scheduler=rr ##调度策略,轮询
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80 ##检测端口
request="index.html" ##ldirectord默认到real server找index.html文件,若找不到,则认为real server不可用
# receive="Test Page" ##ldirectord默认到real server找index.html文件的"Test Page"内容,若找不到,则认为real server不可用
# virtualhost=www.x.y.z
拷贝ldirectord.cf到HA的备节点上:
[root@server40 ha.d]# scp ldirectord.cf 192.168.2.19:/etc/ha.d/
刷掉之前实验时的IPVS表:
[root@server40 ha.d]# ipvsadm -C
[root@server40 ha.d]# vim haresources
server40.example.com IPaddr::192.168.2.233/24/eth0:0 httpd ldirectord
[root@server40 ha.d]# scp haresources 192.168.2.19:/etc/ha.d/
基本的配置工作已经完成,可以尝试启动ldirectord,但当启动ldirectord时会报如下错:
[root@server40 ha.d]# /etc/init.d/ldirectord start
Starting ldirectord... Can't locate IO/Socket/INET6.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/ldirectord line 3061.
BEGIN failed--compilation aborted at /usr/sbin/ldirectord line 3061.
failure
[root@server40 ha.d]# yum install perl-IO-Socket-INET6 -y
[root@server31 ~]# ifconfig eth0:0 192.168.2.233 netmask 255.255.255.255
[root@server31 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server31 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.31
[root@server31 ~]# /etc/init.d/arptables_jf save
[root@server41 ~]# ifconfig eth0:0 192.168.2.232 netmask 255.255.255.255
[root@server41 ~]# arptables -A IN -d 192.168.2.233 -j DROP
[root@server41 ~]# arptables -A OUT -s 192.168.2.233 -j mangle --mangle-ip-s 192.168.2.41
[root@server41 ~]# /etc/init.d/arptables_jf save
停掉以下所有的服务,因为以下所有的服务均会有heartbeat启动
[root@server40 ha.d]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server41 ~]# /etc/init.d/httpd stop
[root@server19 ha.d]# /etc/init.d/ldirectord stop
Stopping ldirectord... success
[root@server19 ~]# /etc/init.d/heartbeat stop
Stopping High-Availability services: Done.
开启如下服务:
[root@server41 ~]# /etc/init.d/httpd stop
[root@server41 ~]# chkconfig httpd on
[root@server41 ~]# chkconfig arptables_jf on
[root@server31 ~]# /etc/init.d/httpd stop
[root@server31 ~]# chkconfig httpd on
[root@server31 ~]# chkconfig arptables_jf on
[root@server40 ha.d]# /etc/init.d/heartbeat start
[root@server19 ha.d]# /etc/init.d/heartbeat start
测试检查:
1.浏览器输入192.168.2.233
看到页面在两个realserver上切换表示成功!你也可以通过 ipvsadm -l 查看详细连接情况!
[root@server40 ha.d]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.2.233:http rr
-> 192.168.2.31:http Route 1 0 3
-> 192.168.2.41:http Route 1 0 2
2.先后关掉两台real server的httpd服务,刷浏览器测试
3.将主节点的心跳关闭,心跳自动切换到备节点
[root@server40 ha.d]# /etc/init.d/heartbeat stop
刷新浏览器依旧出现real server提供的服务的界面