Heartbeat_ldirector+LB+NFS实现HA及LB、文件共享
高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断,是保证业务连续性的有效解决方案
一个很关键的组件叫做heartbeat,heartbeat的工作原理:heartbeat最核心的包括两个。部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务
案例拓扑:
实验原理:
两个director实现HA(高可用性)群集
两个web服务器实现LB(负载均衡)群集
后方NFS服务器实现给web服务器提供共享资源
对外呈现虚拟ip地址:192.168.20.100/24
实验步骤:
Director配置:
配置yum源:
[root@node1 ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
安装所需软件包:
[root@node1 ~]# yum install -y ipvsadm
[root@node1 ~]# yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpmheartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-ldirectord-2.1.4-9.el5.i386.rpm --nogpgcheck
拷贝ldirector的配置文件,用于和heartbeat结合,内含ipvsadm规则:
[root@node1 ~]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
[root@node1 ~]# vim /etc/ha.d/ldirectord.cf
虚拟ip:192.168.20.100
Realserver:192.168.20.12和192.168.20.13
后方用于反馈信息的隐藏文件.test.html,用于director对后方服务器的监测
不是静默模式(一旦停止就删除掉规则条目)
生成heartbeat的配置文件,密码文件以及资源文件
[root@ node1~]# cd /usr/share/doc/heartbeat-2.1.4/
[root@ node1 heartbeat-2.1.4]# cp ha.cf /etc/ha.d/
[root@ node1 heartbeat-2.1.4]# cp authkeys /etc/ha.d/
更改密码文件权限
[root@ node1~]# chmod 600 /etc/ha.d/authkeys
[root@ node1 heartbeat-2.1.4]# cp haresources /etc/ha.d/
Heartbeat消息从eth1口广播出去
[root@node1 ~]# vim /etc/ha.d/ha.cf
两个director主机的主机名
生成随机MD5加密数
[root@node1 ~]# dd -f=/dev/randombs=512 count=1 |md5sum
[root@node1 ~]# vim /etc/ha.d/authkeys
Node1.a.com这台主机作为主director
[root@node1 ~]# vim /etc/ha.d/haresources
[root@node1 ~]# service heartbeat start
更改hosts文件为下面拷贝文件做准备
[root@node1 ~]# vim /etc/hosts
192.168.20.200node1.a.com
192.168.20.201node2.a.com
Director2相关配置和director1相同这里直接拷贝
[root@node1 ~]# scp /etc/hosts node2.a.com:/etc/hosts
[root@node1 ~]# scp /etc/ha.d/ha.cf node2.a.com:/etc/ha.d/ha.cf
[root@node1 ~]# scp /etc/ha.d/authkeys node2.a.com:/etc/ha.d/authkeys
[root@node1 ~]# scp /etc/ha.d/haresources node2.a.com:/etc/ha.d/haresources
[root@node1 ~]# scp /etc/ha.d/ldirectord.cf node2.a.com:/etc/ha.d/ldirectord.cf
[root@node1 ~]# scp /etc/yum.repos.d/rhel-debuginfo.repo node2.a.com:/etc/yum.repos.d/
[root@node1 ~]# chmod 600 /etc/ha.d/authkeys
[root@node2 ~]# yum install -y ipvsadm
[root@node2 ~]# yum localinstall -y heartbeat-2.1.4-9.el5.i386.rpmheartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-ldirectord-2.1.4-9.el5.i386.rpm –nogpgcheck
NFS服务器配置:
确保服务器端已经安装以下有关nfs的软件包
# rpm -qa |grep nfs
nfs-utils-lib-1.0.8-7.6.el5
nfs-utils-1.0.9-42.el5
查看rpc工作状态
# rpcinfo -p
program vers protoport
1000002tcp111portmapper
1000002udp111portmapper
1000241udp653status
1000241tcp656status
1000111udp663rquotad
1000112udp663rquotad
1000111tcp666rquotad
1000112tcp666rquotad
1000032udp2049nfs
1000033udp2049nfs
1000034udp2049nfs
1000211udp38515nlockmgr
1000213udp38515nlockmgr
1000214udp38515nlockmgr
1000032tcp2049nfs
1000033tcp2049nfs
1000034tcp2049nfs
1000211tcp34341nlockmgr
1000213tcp34341nlockmgr
1000214tcp34341nlockmgr
1000051udp677mountd
1000051tcp680mountd
1000052udp677mountd
1000052tcp680mountd
1000053udp677mountd
1000053tcp680mountd
把/usr/local/nginx/html/website作为共享目录,并修改权限
# chmod 777 /usr/local/nginx/html/website
编辑共享清单信息
# vim /etc/exports
/usr/local/nginx/html/website192.168.20.0/24(rw,sync)(给192.168.20.0/24网段的用户对/usr/local/nginx/html/website有读写权限)
# exportfs –r(刷新共享清单)
# servicenfsrestart
创建共享网页
在/usr/local/nginx/html/website下创建一个隐藏的.test.html用于director对服务器的监控时反馈信息
# cd /usr/local/nginx/html/website
# echo ‘ok’ .test.html
Web服务器配置:
Web服务器上搭建有lamp环境,前面已有详细介绍
创建挂载目录
# mkdir /var/www/website
1000241udp675status
1000241tcp678status
查看服务器共享清单列表
# showmount -e 192.168.20.10
Export list for 192.168.20.10:
/usr/local/nginx/html/website 192.168.20.0/24
编辑开机脚本,使动态网站开机就能挂载到本地
# vim /etc/fstab
加入下面代码
192.168.20.10:/usr/local/nginx/html/website /var/www/websitenfsrw,soft,intr00
添加虚拟端口并配置路由,web服务器回应客户端时使用虚拟端口
# ifconfig lo:0 192.168.20.100 broadcast 192.168.20.100 netmask 255.255.255.255
# route add -host 192.168.20.100 dev lo:0
更改系统控制文件,在接收arp请求时不给予回应以防冲突
# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
更改web主站点路径到挂载目录
# vim /etc/httpd/httpd.conf
213 DocumentRoot "/var/www/website"
# service httpd restart
stoping httpd......ok
starting apache.......ok
测试:
查看director1上面的规则:
Director1规则:
把ip资源分给了director1
作为备份的director2此时没有资源:
把web服务器down掉一个:
# service httpd stop
通过虚地址访问内部网站:
再次查看规则已经有一条匹配:
再次刷新浏览器:(符合rr轮训的规则)
把director1 down掉,在director2上立马有规则,得到资源: