lchl0388 发表于 2019-1-5 08:47:50

heartbeat+heartbeat

LVS-DR负载均衡集群实现Director高可用并且能对RS进行健康状况检查实现过程;
目的: 防止Director故障导致用户请求无法转发到RS使LVS集群故障并利用heartbeat-ldirectord模块时时对RS进行健康状况检查,确保lvs集群工作正常;
拓补图:

http://blog.运维网.com/attachment/201208/133943384.jpg

注:图中直线为用户通过主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://172.16.11.1访问LVS-DR集群服务正常(注意:当利用Director-主来转发用户请求时Director-备应关闭ipvsadm服务并停止器eth0:0上的虚拟地址,Director-备同理)
[*]----------以上过程为了验证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=www.x.y.z
[*]将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用户登录:

http://blog.运维网.com/attachment/201208/155419495.jpg

添加资源:

http://blog.运维网.com/attachment/201208/154332765.jpg

添加ldirectord资源

http://blog.运维网.com/attachment/201208/134712862.jpg

添加vip资源

http://blog.运维网.com/attachment/201208/134746671.jpg

启动ldirectord和vip资源成功;

http://blog.运维网.com/attachment/201208/134829128.jpg

ipvsadm规则在RS2上已定义,并且对RS1和RS2做了健康状况检查;

http://blog.运维网.com/attachment/201208/135015375.jpg

vip资源在RS1上启动正常

http://blog.运维网.com/attachment/201208/135230406.jpg

通过浏览器访问http://172.16.11.1,此时RS1和RS2的页面均能以负载均衡方式正常访问;

http://blog.运维网.com/attachment/201208/135453215.jpg

http://blog.运维网.com/attachment/201208/135513591.jpg

将RS1节点关闭掉,验证一下ldirectord对RS1和RS2健康状况检查的效果:


[*]在RS1上添加如下防火墙规则;
[*]# iptables -A INPUT -p tcp --dport 80 -j DROP

查看Director-主上的ipvsadm规则如下:

http://blog.运维网.com/attachment/201208/135723199.jpg

通过浏览器访问http://172.16.11.1,此时只有RS2响应用户的请求;

http://blog.运维网.com/attachment/201208/135513591.jpg

定义位置资源约束,让ldirectord和vip在同一个节点上;
定义顺序资源约束,让ldirectord在vip启动后再启动;
此时无论将node1和node2中任何一节点作为主节点或备节点,ldirectord和vip资源都会在同一个节点上,并且启动服务过程中都将会是ldirectord在vip启动后再启动;

http://blog.运维网.com/attachment/201208/140000437.jpg

http://blog.运维网.com/attachment/201208/140017324.jpg

http://blog.运维网.com/attachment/201208/140037282.jpg

http://blog.运维网.com/attachment/201208/140053644.jpg



以上就是集群服务的LVS-DR模型基于heartbeat-ldirectord模块管理Director上虚拟服务及RS1和RS2的定义并对RS进行健康状况检查的实现过程。



页: [1]
查看完整版本: heartbeat+heartbeat