LVS-DR负载均衡集群实现Director高可用并且能对RS进行健康状况检查实现过程;
目的: 防止Director故障导致用户请求无法转发到RS使LVS集群故障并利用heartbeat-ldirectord模块时时对RS进行健康状况检查,确保lvs集群工作正常;
拓补图:
注:图中直线为用户通过主Director访问web服务;
曲线为用户通过备Director访问web服务;
LVS-DR模型配置过程:
- 安装配置RS1和RS2的web服务并添加测试页面;
# yum -y install httpd #为两个RS安装配置httpd;
# echo "RS1
" >/var/www/html/index.html #为RS1添加测试页面;
# echo "RS2
" >/var/www/html/index.html #为RS2添加测试页面;
- 配置RS1和RS2内核参数;
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- 配置RS1和RS2的虚拟ip和路由信息;
# ifconfig lo:0 172.16.11.1 netmask 255.255.255.255 broadcast 172.16.11.1 up
# route add -host 172.16.11.1 dev lo:0
- 为Director-主和Director-备安装LVS并添加虚拟ip和路由信息;
# yum -y install ipvsadm
# ifconfig eth0:0 172.16.11.1 netmask 255.255.255.255 broadcast 172.16.11.1 up
# route add -host 172.16.11.1 dev eth0:0
- 为Director-主和Director-备添加LVS服务并保存至配置文件中;
# ipvsadm -A -t 172.16.11.1:80 -s rr
# ipvsadm -a -t 172.16.11.1:80 -r 172.16.11.21 -g
# ipvsadm -a -t 172.16.11.1:80 -r 172.16.11.22 -g
# service ipvsadm start
# service ipvsadm save
- 为Director-主和Director-备打开路由转发功能;
# echo 1 > /proc/sys/net/ipv4/ip_forward
通过http:
- ----------以上过程为了验证LVS-DR模型集群服务工作正常-----------
为Director-主和Director-备配置高可用:
关闭Director-主和Director-备的ipvsadm服务使其不开机自动启动并停止VIP和清空ipvs规则;
- # service ipvsadm stop
- # chkconfig ipvsadm off
- # ifconfig eth0:0 down
- # ipvsadm -C
1)在Director-主和Director-备上安装配置heartbeat,用到的安装包如下:
heartbeat-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
- 定义Director-主和Director-备的节点名称分别为node1和node2
- 修改Director-主和Director-备的主机名称,使节点名称与主机名称保持一致;
- # hostname node1 #另外需要将主机名称写在配置文件中,以免重启后失效;
- # hostname node2 #另外需要将主机名称写在配置文件中,以免重启后失效;
- 配置Director-主和Director-备的ssh互联互通(因为Director-主要控制Director-备的heartbeat服务启动和关闭)
- 编辑Director-主和Director-备的/etc/hosts文件添加如下内容:
- 172.16.11.12 node2
- 172.16.11.11 node1
- Director-主和Director-备进行互联网密钥交换
- 在Director-主配置如下:
- # ssh-key -t rsa #生成一对密钥;
- # ssh-copy-id -i ./.ssh/id_rsa.pub root@node2 #将密钥放到node2节点上;
- 在Director-备配置如下:
- # ssh-key -t rsa #生成一对密钥;
- # ssh-copy-id -i ./.ssh/id_rsa.pub root@node1 #将密钥放到node1节点上;
- 修改Director-主和Director-备的时间保持一致,直接使用date命令修改即可;
- 在Director-主和Director-备安装配置heartbeat(这里安装的是v2版本)
- # yum --nogpgcheck localinstall heartbeat-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
- 复制配置文件样例至配置文件目录中:
- # cd /usr/share/doc/heartbeat-2.1.4/
- # cp ha.cf authkeys haresources /etc/ha.d/
- 编辑修改配置文件/etc/ha.d/ha.cf,修改内容如下:
- 打开以下几项:
- keepalive 2 #表示多长时间发送一个心跳信息,默认单位是秒;
- deadtime 30 #多长时间设定主机down机,时间不能设置过短,不然会造成脑裂;
- udpport 694 # heartbeat传递心跳信息用到的端口;
- bcast eth0 #定义通过eth0网卡向外通过广播方式传递心跳;
- compression bz2 #定义集群事务信息传递压缩格式;
- compression_threshold 2 #定义大于2KB的集群事务信息才进行压缩;
- 打开以下并修改如下内容:
- ping 172.16.0.1 # ping网关确认节点工作是否正常;
- 添加两个节点:
- node node1
- node node2 #添加节点,一定是节点名称与主机名称保持一致;
- 修改/etc/ha.d/authkeys权限为600,保证签名信息更安全;
- # chmod 600 /etc/ha.d/authkeys
- 编辑配置/etc/ha.d/authkeys添加如下内容:
- auth 1
- 1 md5 7f687dc09a57c98a2b4d38292e319dc0 #注意:使用随机数确保签名信息的安全;
- 编辑修改配置文件/etc/ha.d/ haresources,添加如下信息;
- node1 172.16.11.1/16/eth0/172.16.255.255 httpd #指定节点虚拟网卡信息及所对应的服务;
- 复制ha.cf authkeys haresources配置文件至RS2上;
- # scp ha.cf haresources authkeys root@node2:/etc/ha.d/
- 启动Director-主和Director-备上的heartbeat服务:
- # service heartbeat start
- # ssh node2 ‘service heartbeat /etc/rc.d/init.d/heartbeat start’
使用heartbeat v2版本的heartbeat-gui图形化工具管理集群服务:
- 1)首先要将node1和node2节点上的heartbeat服务停掉;
- #service heartbeat stop #停止本节点服务;
- #ssh node2 '/etc/rc.d/init.d/heartbeat stop' #停止node2节点集群服务;
- 2)在RS1和RS2上同时安装heartbeat-gui工具
- # rpm -ivh heartbeat-gui-2.1.4-9.el5.i386.rpm
- 3)编辑/etc/ha.d/ha.cf配置文件,添加crm on或crm respawn指令;
- 4)给hacluster用户添加密码,hacluster用户是登录图形界面的用户;
- #passwd hacluster
- 5)#netstat -tnlp #确保端口5560打开;
- 6)#hb_gui & #打开图形管理界面;
利用heartbeat-ldirectord模块管理Director上的虚拟服务及RS1和RS2的定义并对RS1和RS2 进行健康状况检查,安装ldirectord需要用到的包有heartbeat-ldirectord-2.1.4-9.el5.i386.rpm和perl-MailTools-1.77-1.el5.noarch.rpm
- # yum -y --nogpgcheck localinstall heartbeat-ldirectord-2.1.4-9.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
- 复制ldirectord配置文件至/etc/ha.d/目录下:
- # cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
- 编辑/etc/ha.d/ldirectord.cf配置文件:
- 打开如下选项:
- logfile="/var/log/ldirectord.log" #打开日志
- 定义虚拟主机,将配置文件中的虚拟主机修改为以下内容:
- virtual=172.16.11.1:80 #定义LVS的虚拟服务;
- real=172.16.11.21:80 gate #指定RS1;
- real=172.16.11.22:80 gate #指定RS2;
- # real=192.168.6.6:80 gate
- # fallback=127.0.0.1:80 gate
- service=http #指定服务;
- request=" .test.html" #做健康状况检查从RS上获取的测试页面;
- receive="OK" #测试页面中添加的相应字符串;
- # virtualhost=some.domain.com.au #定义虚拟主机;
- scheduler=rr #调度算法;
- #persistent=600
- #netmask=255.255.255.255
- protocol=tcp #指定相应的协议;
- checktype=negotiate #检查RS的健康状况方式,negotiate是协商方式;
- checkport=80 #检查RS端口号;
- # request="index.html"
- # receive="Test Page"
- # virtualhost=
- 将ldirectord配置文件传递至Director-备主机上的/etc/ha.d/目录下;
- # scp /etc/ha.d/ldirectord.cf node2:/etc/ha.d/
- 在RS1和RS2的网页主目录下添加.test.html测试页面,页面内容写为OK;
- # echo "OK" > /var/www/html/.test.html
- 将Director-主和Director-备上的ldirectord服务开机自动启动停止掉;
- # chkconfig ldirectrod off
打开heartbeat的图形的界面添加ldirectord和vip资源;
- # service ipvsadm start #开启Director-主ipvsadm服务;
- # service heartbeat start #开启Director-主heartbeat服务;
- # ssh node2 'service ipvsadm start' #开启Director-备ipvsadm服务;
- # ssh node2 '/etc/rc.d/init.d/heartbeat start' #开启Director-备heartbeat服务;
- #hb_gui &
利用hacluster用户登录:
添加资源:
添加ldirectord资源
添加vip资源
启动ldirectord和vip资源成功;
ipvsadm规则在RS2上已定义,并且对RS1和RS2做了健康状况检查;
vip资源在RS1上启动正常
通过浏览器访问此时RS1和RS2的页面均能以负载均衡方式正常访问;
将RS1节点关闭掉,验证一下ldirectord对RS1和RS2健康状况检查的效果:
- 在RS1上添加如下防火墙规则;
- # iptables -A INPUT -p tcp --dport 80 -j DROP
查看Director-主上的ipvsadm规则如下:
通过浏览器访问,此时只有RS2响应用户的请求;
定义位置资源约束,让ldirectord和vip在同一个节点上;
定义顺序资源约束,让ldirectord在vip启动后再启动;
此时无论将node1和node2中任何一节点作为主节点或备节点,ldirectord和vip资源都会在同一个节点上,并且启动服务过程中都将会是ldirectord在vip启动后再启动;
以上就是集群服务的LVS-DR模型基于heartbeat-ldirectord模块管理Director上虚拟服务及RS1和RS2的定义并对RS进行健康状况检查的实现过程。
阅读(2247) | 评论(0) | 转发(0) |