linux学习之使用heartbeat搭建高可用lvs集群服务

linux学习之使用heartbeat搭建高可用lvs集群服务

使用heartbeat搭建HA+LB集群
实验环境,注意时间同步和解析,火墙和selinux关闭
192.168.2.168   ankse.example.com
192.168.2.72    ha1.example.com
192.168.2.68    ha2.example.com
192.168.2.78    lb1.example.com
192.168.2.221   lb2.example.com
主机的yum源为
[root@ha1 yum.repos.d]# cat dvd.repo 
# repos on instructor for classroom use
# Main rhel6.5 server
[base]
name=Instructor Server Repository
baseurl=http://192.168.2.251/pub/rhel6.5
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# HighAvailability rhel6.5
[HighAvailability]
name=Instructor HighAvailability Repository
baseurl=http://192.168.2.251/pub/rhel6.5/HighAvailability
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# LoadBalancer packages
[LoadBalancer]
name=Instructor LoadBalancer Repository
baseurl=http://192.168.2.251/pub/rhel6.5/LoadBalancer
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# ResilientStorage
[ResilientStorage]
name=Instructor ResilientStorage Repository
baseurl=http://192.168.2.251/pub/rhel6.5/ResilientStorage
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# ScalableFileSystem
[ScalableFileSystem]
name=Instructor ScalableFileSystem Repository
baseurl=http://192.168.2.251/pub/rhel6.5/ScalableFileSystem
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

1、HA节点安装和配置

lftp i:~> get pub/docs/heartbeat/rhel6/ldirectord-3.9.2-1.2.x86_64.rpm 
lftp i:/> mget pub/docs/heartbeat/rhel6/new/*
[root@ha1 ~]# ls 在6.5系统中使用3.0.4-2版本。6.4可以使用3.0.4-1
heartbeat-3.0.4-2.el6.x86_64.rpm        heartbeat-libs-3.0.4-2.el6.x86_64.rpm  ldirectord-3.9.2-1.2.x86_64.rpm
heartbeat-devel-3.0.4-2.el6.x86_64.rpm
[root@ha1 ~]# yum localinstall * -y
[root@ha1 ~]# yum install httpd -y
[root@ha1 html]# vim index.html 写入内容1或2

[root@ha1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@ha1 heartbeat-3.0.4]# cp ha.cf haresources authkeys /etc/ha.d/
[root@ha1 heartbeat-3.0.4]# cd /etc/ha.d/ 可以查看README.conf
修改配置文件
[root@ha1 ha.d]# vim ha.cf 
debugfile /var/log/ha-debug 记录日志信息,也可以打开logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694 广播端口
bcast   eth0            # Linux 广播的接口
watchdog /dev/watchdog 看门狗,长时间没反映重启
node    ha1.example.com 结点1,优先
node    ha2.example.com
ping 192.168.2.251 用来检测是否存活,一般ping自己的网关
respawn hacluster /usr/lib64/heartbeat/ipfail 64位的在lib64下
apiauth ipfail gid=haclient uid=hacluster

[root@ha1 ha.d]# modprobe softdog添加看门狗模块可将其写在/etc/rc.local中
[root@ha1 ha.d]# vim haresources 
ha1.example.com IPaddr::192.168.2.232/24/eth0:0 httpd 脚本位置/etc/init.d/ 

[root@ha1 ha.d]# vim authkeys 
auth 1 使用方式1,比较不安全
1 crc
[root@ha1 ha.d]# chmod 600 authkeys 这个文件的权限是600

然后把配置文件发给另一个结点
[root@ha1 ha.d]# scp ha.cf haresources authkeys ha2.example.com:/etc/ha.d/
节点h1,h2依次开启hearbeat,其他都不用开,heartbeat会自动管理资源
[root@ha1 ~]# /etc/init.d/heartbeat start
[root@ha1 ~]# ip addr show查看232启动在哪个结点上
测试
[root@ha1 ~]# /etc/init.d/heartbeat stop 浏览器访问虚拟ip停止结点1的heartbeat,http会跳转到结点2,所以这个仅对heartbeat检测,不针对服务,再次开启会跳转回来。

2、添加LB做http负载均衡

[root@ha1 ~]# yum install -y ipvsadm 默认已经安装;暂时使用命令添加,整合使用ldirectord维护添加
[root@ha1 ~]# ipvsadm -A -t 192.168.2.232:80 -s rr 添加虚拟IP 使用轮叫
[root@ha1 ~]# ipvsadm -a -t 192.168.2.232:80 -r 192.168.2.78:80 -g 添加LB服务器1
[root@ha1 ~]# ipvsadm -a -t 192.168.2.232:80 -r 192.168.2.221:80 -g 添加LB服务器2
[root@ha1 ~]# ipvsadm -ln 查看
LB服务器均做如下配置:
[root@lb1 ~]# yum install httpd -y
[root@lb1 ~]# vim /var/www/html/index.html 写入lb1或lb2
[root@lb1 ~]# ifconfig eth0:0 192.168.2.232 netmask 255.255.255.255 使用DR方式,添加用于返回用户数据所使用的IP地址,写入rc.local,否则重启失效
[root@lb1 ~]# yum install arptables_jf.x86_64 -y
[root@lb1 ~]# arptables -A IN -d 192.168.2.232 -j DROP 进来的数据目的地址改为虚拟IP
[root@lb1 ~]# arptables -A OUT -s 192.168.2.232 -j mangle --mangle-ip-s 192.168.2.78 出去的源地址改为虚拟IP
[root@lb1 ~]# /etc/init.d/arptables_jf save
[root@lb1 ~]# /etc/init.d/arptables_jf start
[root@lb2 ~]# chkconfig httpd on
[root@lb2 ~]# chkconfig arptables_jf on
之后浏览器访问192.168.2.232就会轮寻。

3、优化整合HA+LB

lvs缺陷,不会对后端服务的状态进行检测,服务停止依然会调度,应该是把坏掉的服务器从调度列表中删掉。所以使用ldirectord维护调度列表,最后使用heartbeat管理ldirectord资源。

整合ldirectord和交由heartbeat管理
[root@ha1 ~]# cp /usr/share/doc/packages/ldirectord/ldirectord.cf /etc/ha.d/
[root@ha1 ~]# vim /etc/ha.d/ldirectord.cf 
virtual=192.168.2.232:80 虚拟IP地址
        real=192.168.2.78:80 gate 服务器1
        real=192.168.2.221:80 gate 服务器2
        fallback=127.0.0.1:80 gate 当所有服务停掉之后,自己充当服务器
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html" 检测文件来判断http状态
#       receive="Test Page"
#       virtualhost=www.x.y.z
[root@ha1 ~]# vim /etc/ha.d/haresources 添加资源
ha1.example.com IPaddr::192.168.2.232/24/eth0:0 httpd ldirectord

[root@ha1 ~]# ipvsadm -C 清除调度列表
[root@ha1 ~]# yum install -y perl-IO-Socket-INET6
[root@ha1 ~]# /etc/init.d/ldirectord start
[root@ha1 ~]# ipvsadm -ln 查看调度列表,ldirectord自动维护,可以关闭LB服务器的HTTP测试
TCP  192.168.2.232:80 rr
  -> 192.168.2.78:80              Route   1      0          0         
  -> 192.168.2.221:80             Route   1      0          0 

最后,交由heartbeat管理资源ldirectord
[root@ha1 ~]# scp /etc/ha.d/ldirectord.cf /etc/ha.d/haresources ha2.example.com:/etc/ha.d/
关闭ha所有资源
[root@ha1 ~]# ifconfig eth0:0 down
[root@ha1 ~]# /etc/init.d/httpd stop
[root@ha1 ~]# /etc/init.d/ldirectord stop
[root@ha1 ~]# /etc/init.d/heartbeat stop
开启heartbeat
[root@ha1 ~]# /etc/init.d/heartbeat start
之后h1会自动开启eth0:0,http,ldirectord。

最后测试,ha1,lb1,lb2工作访问,可以正常轮寻
关闭ha1的heartbeat,ha2资源自动启动,可以正常轮寻
关闭lb2的http,查看ha2的调度列表,ipvsadm -ln
TCP  192.168.2.232:80 rr
  -> 192.168.2.78:80              Route   1      0          8   
再关闭lb1的http,查看
  -> 127.0.0.1:80                 Local   1      0          0         
再次访问,调度器自己充当http服务器;
再次开启lb的http,可以正常轮寻,再开启ha1的heartbeat,ha1再次接管调度。


你可能感兴趣的:(linux)