实验拓扑


heartbeat v2 + lvs-DR实现Director的高可用_ldirector


 实验步骤

一、配置lvs-DR

1、配置RealServer (在这里以配置node1为例,node2与node1配置相同)

(1)配置web服务

  1. 使用yum安装  
  2. #yum -y install httpd   
  3. #service httpd start  
  4. #echo "node1" > /var/www/html/index.html  //添加访问页面
  5. #echo "Test Page" > /var/www/html/.test.html  //测试页面
  6. #elinks -dump http://192.168.0.11   
  7.              node1    //访问成功  

(2)配置参数及VIP

  1. #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore  
  2. #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce  
  3. #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  
  4. #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  
  5.  
  6. 配置VIP  
  7. #ifconfig lo:0 172.16.19.1 broadcast 172.16.19.1 
  8. netmask 255.255.255.255 up  
  9. #route add -host 172.16.19.1 dev lo:0 //添加路由  
  10. #ifconfig    //查看VIP是否添加成功 

heartbeat v2 + lvs-DR实现Director的高可用_高可用_02

2、配置Director 
(与RealServer一样,在此以Dir1为例配置。Dir2做相同配置即可)

(1)配置VIP

  1. #ifconfig eth0:0 172.16.19.1 broadcast 172.16.19.1 
  2. netmask 255.255.255.255 up    
  3. #route add -host 172.16.19.1 dev eth0:0    
  4. #echo 1 > /proc/sys/net/ipv4/ip_forward //打开路由转发 

(2)安装ipvsadm并定义规则

  1. #yum -y install ipvsadm  
  2. #ipvsadm -A -t 172.16.19.1:80 -s rr   
  3. #ipvsadm -a -t 172.16.19.1:80 -r 192.168.0.11 -g  
  4. #ipvsadm -a -t 172.16.19.1:80 -r 192.168.0.66 -g 

(3)访问http://172.16.19.1,查看负载均衡效果

heartbeat v2 + lvs-DR实现Director的高可用_ldirector_03heartbeat v2 + lvs-DR实现Director的高可用_高可用_04

 (4)保存规则,关闭服务

  1. #ipvsadm -S > /etc/sysconfig/ipvsadm  
  2. #service ipvsadm stop  
  3. #chkconfig ipvsadm off  
  4.  
  5. 停用VIP 因为VIP也是高可用资源  
  6. #ifconfig eth0:0 down  

二、配置Director高可用

在这里我们使用除了使用heartbeat相关软件外,还要安装heartbeat-ldirectord包和它的依赖包perl-MailTools。它相当于heartbeat的一个模块,它可以管理集群的虚拟化和资源,同时还可以检查后端节点健康状况,非常符合实际需求。

1、安装前的准备工作

  1. Dir1与Dir2保证时间同步,可使用date命令  
  2.  
  3. #vim /etc/hosts  //添加如下两行,做主机名称解析  
  4.  192.168.0.100    Dir1  
  5.  192.168.0.101    Dir2  
  6. 建立双机互信以便Dir1远程启动Dir2的heartbeat服务  
  7. #ssh-keygen -t rsa  //产生私钥  
  8. #ssh-copy-id -i ./ssh/id_rsa.pub root@Dir2   
  9. #ssh Dir2 'uname -n'  //测试ssh  
  10. #scp /etc/hosts Dir2:/etc  //Dir1与Dir2的hosts文件保持一致  
  11.  
  12. 在Dir2上  
  13. #ssh-keygen -t rsa  //产生私钥  
  14. #ssh-copy-id -i ./ssh/id_rsa.pub root@Dir2   
  15. #ssh Dir2 'uname -n'  //测试ssh  

2、安装配置软件

  1. #yum -y --nogpgpcheck localinstall heartbeat-2.1.4-9.el5.i386.rpm   
  2. heartbeat-pils-2.1.4-10.el5.i386.rpm  
  3. heartbeat-gui-2.1.4-9.el5.i386.rpm  
  4. heartbeat-stonith-2.1.4-10.el5.i386.rpm  libnet-1.1.4-3.el5.i386.rpm   
  5. heartbeat-ldirectord-2.1.4-9.el5.i386.rpm   
  6. perl-MailTools-1.77-1.el5.noarch.rpm  
  7.  
  8. #cd /usr/share/doc/heartbeat-2.1.4/  
  9. #cp authkeys ha.cnf haresource /etc/ha.d/  
  10. #cd ..heartbeat-ldirectord-2.1.4/  
  11. #cp ldirectord.cf /etc/ha.d  
  12. #cd /etc/ha.d/  
  13.  
  14. #vim ha.cf  //编辑主配置文件  
  15.   initdead 120 //第一次启动时等待其他节点启动的时间  
  16.   bcast eth0   //心跳信息传播方式  
  17.   auto_failback on  //夺回资源是否开启  
  18.   node    Dir1     //定义节点  
  19.   node    Dir2   
  20.   ping  172.16.0.1  //当接收不到其他节点的心跳信息时,  
  21. 通过ping前端路由证实不是本节点发生故障  
  22.   compression  bz2 //定义压缩方式  
  23.   compression_threshold 2 //文件大于2k时才压缩  
  24.   crm   on     
  25.  
  26. #chmod 600 authkeys //必须改变其权限,否则服务无法启动  
  27. #vim authkeys  
  28.   auth 1  
  29.   1 md5 f4ecab5e96446b2986 
  30. //此处的字符串可以使用 dd if=/dev/urandom count=512 bs=1 | md5sum 
  31. 命令生成的随即数  
  32.  
  33. #vim ldirectord.cf   
  34.   checktimeout=3  //当检查不到RealServer时的超时时间  
  35.   checkintervel=1  //每隔多长时间检查一个RealServer  
  36.   autoreload=yes    //当此前配置文件发生改变时会不会自动加载  
  37.   logfile="/var/log/ldirectord.log" 
  38.   virtual=172.16.19.1:80  //VIP  
  39.         real=192.168.0.11:80 gate  //定义RealServer  
  40.         real=192.168.0.66:80 gate  
  41.         fallback=127.0.0.1:80 gate  
  42.         service=http   //提供的服务  
  43.         request=".test.html" //通过此页面判断RS是否工作  
  44.         receive="Test Page"  //页面返回结果  
  45.         #virtualhost=some.domain.com.au //可定义虚拟主机  
  46.         scheduler=rr  //使用的算法  
  47.         protocol=tcp 
  48.         checktype=negotiate 
  49.         checkport=80 
  50. #scp authkeys ha.cf ldirectord.cf Dir2:/etc/ha.d   
  51. #service ldirectord stop  
  52. #chkconfig ldirector off  
  53.  
  54. #passwd haclustet //给hacluster用户添加密码redhat,在启动图形界面时要使用

 

3、启动服务,管理资源

  1. #service heartbeat start  
  2. #ssh node2 '/etc/init.d/heartbeat start'  
  3. #hb_gui &  //启动gui界面

heartbeat v2 + lvs-DR实现Director的高可用_高可用_05

输入密码便可管理界面

heartbeat v2 + lvs-DR实现Director的高可用_高可用_06
 

(1)首先添加ldirectord资源

右击'Rescources' ,选择"Add new items"。点击"Add Parameter"提交

heartbeat v2 + lvs-DR实现Director的高可用_高可用_07

(2)添加VIP

同样方法进入定义页面:

heartbeat v2 + lvs-DR实现Director的高可用_heartbeat_08

(3)查看定义的资源

heartbeat v2 + lvs-DR实现Director的高可用_heartbeat_09

 此时没有定义约束,资源以负载均衡的方式定义在了两个节点上。

(4)定义并列约束

heartbeat v2 + lvs-DR实现Director的高可用_heartbeat_10

 heartbeat v2 + lvs-DR实现Director的高可用_节点状况_11

 约束定义好后,两个资源都被定义在了Dir1上。此时访问,http://172.16.19.1一切正常。

还可以定义顺序约束,方法同上不再演示。

三、测试实验

1、测试Director是否高可用

由上图可知,此时资源都定义在了Dir1上。现在我们模拟Dir1不能正常工作,查看资源的流转状况。

heartbeat v2 + lvs-DR实现Director的高可用_节点状况_12

ok。资源顺利的转移到了dir2上。Director高可用成功。

2、Director是否能够检查RealServer的健康状况

我们现有两个realserver,我们通过iptables来限制192.168.0.66的80端口。

  1. #iptables -A INPUT -d 192.168.0.66 -p tcp --dport 80 -j DROP 

再次访问http://172.16.19.1。此时会发现访问页面只会出现“node1”。使用iptables -F 清除规则后,两台RealServer重新恢复负载均衡。现在可以证明Director可以实现检查后端节点健康状况的功能。



至此,实验结束。