项目实践:配置LVS Director(WEB LVS)的HA集群,要求:

1、DR模型;

2、能监控后台RealServer的健康状态;

clip_p_w_picpath002[6]

实现原理:

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上:

 

 
  
  1. ifconfig eth0 172.16.14.11   
  2.  
  3. vim /etc/sysconfig/network-scripts/ifcfg-eth0  
  4.  
  5. DEVICE=eth0  
  6.  
  7. BOOTPROTO=static  
  8.  
  9. ONBOOT=yes  
  10.  
  11. HWADDR=00:0c:29:43:79:d5  
  12.  
  13. NETMASK=255.255.0.0 
  14.  
  15. IPADDR=172.16.14.11 
  16.  
  17. GATEWAY=172.16.0.1 
  18.  
  19. # 配置心跳信息隧道  
  20.  
  21. ifconfig eth1 192.16.14.11 
  22.  
  23. vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1  
  24.  
  25. BOOTPROTO=static  
  26.  
  27. IPADDR=192.168.14.11 
  28.  
  29. NETMASK=255.255.255.0 
  30.  
  31. ONBOOT=yes  
  32.  
  33. HWADDR=00:0c:29:43:79:df  
  34.  

 

DR2上同上:

 

 
  
  1. ifconfig eth0 172.16.14.12 
  2.  
  3. vim /etc/sysconfig/network-scripts/ifcfg-eth0  
  4.  
  5. DEVICE=eth0  
  6.  
  7. BOOTPROTO=static  
  8.  
  9. ONBOOT=yes  
  10.  
  11. IPADDR=172.16.14.12 
  12.  
  13. GATEWAY=172.16.0.1 
  14.  
  15. NETMASK=255.255.255.0 
  16.  
  17. HWADDR=00:0c:29:13:c1:e5  
  18.  
  19. vim /etc/sysconfig/network-scripts/ifcfg-eth1  
  20.  
  21. DEVICE=eth1  
  22.  
  23. BOOTPROTO=static  
  24.  
  25. ONBOOT=yes  
  26.  
  27. HWADDR=00:0c:29:13:c1:ef  
  28.  
  29. IPADDR=192.168.14.12 
  30.  
  31. NETMASK=255.255.255.0 
  32.  

 

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的状态

 

 
  
  1. vim /root/.testrss.sh  
  2.  
  3. #!/bin/bash  
  4.  
  5. # This script is used to test the RSS's status and take some action when it down  
  6.  
  7. # 定义一个数组来存放DIP信息  
  8.  
  9. declare -a DIP=(  
  10.  
  11. 172.16.14.21 
  12.  
  13. 172.16.14.22 
  14.  
  15. 172.16.14.23)  
  16.  
  17. SERVICE='-t 172.16.14.1:80' # 定义ipvsadm添加的主条目  
  18.  
  19. MAILBOX=root@a.org # 定义管理员邮件地址  
  20.  
  21. # 函数RSMON的作用是监控整个后台的RSS,某一台当机后,将其从集群表中删除,恢复后,将其加入集群  
  22.  
  23. RSMON() {  
  24.  
  25. local TEST=`elinks -dump $1/.test.html 2> /dev/null |tr 'a-z' 'A-Z' |grep OK`  
  26.  
  27. if [ "$TEST" = 'OK' ];then  
  28.  
  29. ipvsadm -Ln |grep $1 || ipvsadm -a $SERVICE -r $1 -g -w $W  
  30.  
  31. else 
  32.  
  33. sleep 1 
  34.  
  35. local TEST=`elinks -dump $1/.test.html 2> /dev/null |tr 'a-z' 'A-Z' |grep OK`  
  36.  
  37. if [ "$TEST" != 'OK' ]; then  
  38.  
  39. ipvsadm -Ln |grep $1 && ipvsadm -d $SERVICE -r $1  &&  
  40.  
  41. echo "The Host $1 is failure." |mail -s "$1 failure." $MAILBOX  
  42.  
  43. fi  
  44.  
  45. fi  
  46.  
  47. }  
  48.  
  49. # 定义死循环,每5秒执行一次上面的函数  
  50.  
  51. while true;do  
  52.  
  53. for myIP in ${DIP[*]};do  
  54.  
  55. W=`ipvsadm -Ln |grep $myIP |awk '{print $4}'`  
  56.  
  57. RSMON $myIP  
  58.  
  59. done  
  60.  
  61. sleep 5 
  62.  
  63. done  
  64.  

 

# 将该脚本的路径添加到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服务的同时,启动监控脚本,项目目标达成。