项目实践:配置LVS Director(WEB LVS)的HA集群,要求:
1、DR模型;
2、能监控后台RealServer的健康状态;
实现原理:
1)使用LVS-DR模型构建集群实现负载均衡
2)使用heartbeat构建双Director组成HA集群,提高Director的高可用性
3)利用脚本实现检测后台realserver健康状态,当一台服务器发生故障时,自动将其从集群里删除,待恢复后,再加入集群中
4)虚拟IP :172.16.14.1为两台DR想争夺的资源,通过IP的论调来实现HA
主机名规划: 两台DR :DR1,DR2
每台DR配置两块网卡,一块用来连接“提供服务”,一块用来连接“心跳信息”
实现双director组成HA步骤:
1. 配置网卡IP地址信息,都是设置为静态地址
DR1上:
- ifconfig eth0 172.16.14.11
- vim /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=static
- ONBOOT=yes
- HWADDR=00:0c:29:43:79:d5
- NETMASK=255.255.0.0
- IPADDR=172.16.14.11
- GATEWAY=172.16.0.1
- # 配置心跳信息隧道
- ifconfig eth1 192.16.14.11
- vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1
- BOOTPROTO=static
- IPADDR=192.168.14.11
- NETMASK=255.255.255.0
- ONBOOT=yes
- HWADDR=00:0c:29:43:79:df
DR2上同上:
- ifconfig eth0 172.16.14.12
- vim /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=static
- ONBOOT=yes
- IPADDR=172.16.14.12
- GATEWAY=172.16.0.1
- NETMASK=255.255.255.0
- HWADDR=00:0c:29:13:c1:e5
- vim /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- BOOTPROTO=static
- ONBOOT=yes
- HWADDR=00:0c:29:13:c1:ef
- IPADDR=192.168.14.12
- NETMASK=255.255.255.0
2.安装ipvsadm,heartbeat v2 并配置须实现下载好所需软件包到一个文件夹里:
heartbeat-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm
heartbeat-devel-2.1.4-9.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm
heartbeat-gui-2.1.4-9.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm
DR1 DR2上:
yum localinstall -y -nogpgcheck *.rpm
yum install ipvsadm -y
我们需要手动拷贝heartbeat的配置文件到/etc/ha.d下
cd /etc/ha.d
cd /usr/share/doc/heartbeat-2.1.4/
cp ha.cf haresources authkeys /etc/ha.d
修改主机名称:
hostname node1.a.org
vim /etc/hosts # 添加下面两行
172.16.14.11 node1.a.org node1
172.16.14.12 node2.a.org node2
vim /etc/sysconfig/network #修改network值于主机名对应
HOSTNAME=node1.a.org
配置三个配置文件
cd /etc/ha.d #添加下面的内容
vim ha.cf
node node1.a.org #节点名称,注意要在/etc/hosts里面定义主机名和这个一致
node node2.a.org
bcast eth1 #心跳信息传播网卡
logfile /var/log/ha-log #打开日志文件
vim haresources #配置虚拟IP资源
# HA开启时分配给DR1 自动配置为eth0:0 172.16.14.1/172.16.14.1 并且开启ipvsadm
node1.a.org 172.16.14.1/16/eth0/172.16.14.1 ipvsadm
编辑 authkeys
vim authkeys # 定义心跳传送加密方式和密钥
auth 2
2 sha1 13db1dff9f50c88841f4199457b11091
# 编辑完后要将该文件改为400 或600否则无法启动
chmod 400 authkeys
生成ssh密钥,复制到DR2主机
# 创建key文件
ssh-keygen -t rsa
# 复制到node2上
ssh-copy-id -i .ssh/id_rsa.pub root@node2
以上步骤在DR2上也执行一次,注意IP的变化
3.配置ipvsadm
[root@node1 ha.d]# ipvsadm -A -t 172.16.14.1:80
[root@node1 ha.d]# ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.21
[root@node1 ha.d]# ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.22
[root@node1 ha.d]# ipvsadm -a -t 172.16.14.1:80 -r 172.16.14.23
# 将配置好的表保存在/etc/sysconfig/ipvsadm 这样可以使用ipvsadm脚本来实现DR的控制
ipvsadm -S > /etc/sysconfig/ipvsadm
同样的操作,在DR2上进行一次
4.编写监控脚本,用于监控后台RSS的状态
- vim /root/.testrss.sh
- #!/bin/bash
- # This script is used to test the RSS's status and take some action when it down
- # 定义一个数组来存放DIP信息
- declare -a DIP=(
- 172.16.14.21
- 172.16.14.22
- 172.16.14.23)
- SERVICE='-t 172.16.14.1:80' # 定义ipvsadm添加的主条目
- MAILBOX=root@a.org # 定义管理员邮件地址
- # 函数RSMON的作用是监控整个后台的RSS,某一台当机后,将其从集群表中删除,恢复后,将其加入集群
- RSMON() {
- local TEST=`elinks -dump $1/.test.html 2> /dev/null |tr 'a-z' 'A-Z' |grep OK`
- if [ "$TEST" = 'OK' ];then
- ipvsadm -Ln |grep $1 || ipvsadm -a $SERVICE -r $1 -g -w $W
- else
- sleep 1
- local TEST=`elinks -dump $1/.test.html 2> /dev/null |tr 'a-z' 'A-Z' |grep OK`
- if [ "$TEST" != 'OK' ]; then
- ipvsadm -Ln |grep $1 && ipvsadm -d $SERVICE -r $1 &&
- echo "The Host $1 is failure." |mail -s "$1 failure." $MAILBOX
- fi
- fi
- }
- # 定义死循环,每5秒执行一次上面的函数
- while true;do
- for myIP in ${DIP[*]};do
- W=`ipvsadm -Ln |grep $myIP |awk '{print $4}'`
- RSMON $myIP
- done
- sleep 5
- done
# 将该脚本的路径添加到ipvsadm的启动脚本里
vim /etc/init.d/ipvsadm
# 在start的最后一行添加
/root/.testrss.sh &
# 在stop的最后一行添加
killall testrss.sh
拷贝两个脚本到DR2上
[root@node1 ha.d]# cd /etc/init.d/
[root@node1 init.d]# scp /root/.testrss.sh ipvsadm node2:/etc/init.d/
这样就实现了HA的两个DR节点在抢夺资源的时候,开启ipvsadm服务的同时,启动监控脚本,项目目标达成。