对Director的高可用分为两部分完成:

一:配置好LVS-DR模型的负载均衡
二:配置一台Director对已有Director做高可用
 
做如下规划:
有两台real server;分别为rs1;rs2;主用调度器为dr1;做高可用的调度器为dr2
 
 
  
  1. 主机 IP类型 IP地址   网络连接 
  2. rs1 RIP172.16.14.10  桥接 
  3.     lo:0 172.16.14.2 
  4. rs2 RIP172.16.14.11 桥接 
  5.     lo:0 172.16.14.2 
  6. dr1 DIP 172.16.14.100  桥接 
  7.     VIP eth0:0 172.16.14.2 
  8. dr2 VIP 172.16.14.99   桥接 
  9.     DIP eth0:0 172.16.14.2 
  10. CIP 192.168.0.243 
确保所有主机关闭selinux;
setenforce 0
 
一:配置DR模型的lvs负载均衡
 
1、配置rs1:
 
 
   
  1. ifconfig eth0 172.16.14.10/16 
添加lo:0使客户端访问VIP,让VIP来响应客户端:
 
 
   
  1. ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2  
  2. netmask 255.255.255.255 
  3. route add -host 172.16.14.2 dev lo:0 
修改两个内核参数,用于隐藏rs1的RIP:
 
 
   
  1. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
  2. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
  3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
  4. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
安装httpd:
 
    
  1. yum -y insatll httpd 
建立测试页面:
 
    
  1. vim /var/www/html/index.html 
  2. 添加:<h1>real server1</h1> 
启动httpd服务,测试页面
 
   
  1. service httpd start 
2、配置rs2
 
 
   
  1. ifconfig eth0 172.16.14.11/16 
  2. 添加lo:0使客户端访问VIP,让VIP来响应客户端: 
  3. ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2  
  4. netmask 255.255.255.255 
  5. route add -host 172.16.14.2 dev lo:0 
  6. 隐藏rs2的RIP: 
  7.         echo 1 >  
  8.         /proc/sys/net/ipv4/conf/lo/arp_ignore 
  9.         echo 2 >  
  10.         /proc/sys/net/ipv4/conf/lo/arp_announce 
  11.         echo 1 >  
  12.         /proc/sys/net/ipv4/conf/all/arp_ignore 
  13.         echo 2 >  
  14.         /proc/sys/net/ipv4/conf/all/arp_announce 
  15.  
  16. 安装httpd 
  17. yum -y insatll httpd 
  18.  
  19. 为了测试结果的明显,将rs2的测试页面为: 
  20. vim /var/www/html/index.html 
  21. 添加:<h1>real server2</h1> 
  22. 启动服务,测试页面 
3、dr1作为主用调度器
 
 
   
  1. ifconfig eth0 172.16.14.100/16 
  2. ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2  
  3. netmask 255.255.255.255 
  4. route add -host 172.16.14.2 dev lo:0 
开启内核转发功能:
 
 
   
  1. echo 1 > /proc/sys/net/ipv4/ip_forward 
4、安装ipvsadm:
 
 
   
  1. yum -y insatll ipvsadm 
添加集群及服务:
 
 
   
  1. ipvsadm -A -t 172.16.14.2:80 -s rr 
  2. ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.10 -g 
  3. ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.11 -g 
  4. ipvsadm -Ln 
在本地浏览器中测试负载均衡结果
 
 
二:配置一台Director对已有Director做高可用
dr2对dr1高可用;除ip外其资源配置与dr1一致:
 
 
    
  1. ifconfig eth0 172.16.14.99/16 
  2. ifconfig lo:0 172.16.14.2 broadcast 172.16.14.2  
  3. netmask 255.255.255.255 
  4. route add -host 172.16.14.2 dev lo:0 
  5. 开启内核转发功能: 
  6. echo 1 > /proc/sys/net/ipv4/ip_forward 
  7. 安装ipvsadm: 
  8. yum -y insatll ipvsadm 
  9. ipvsadm -C 
  10. 添加规则: 
  11. ipvsadm -A -t 172.16.14.2:80 -s rr 
  12. ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.10 -g 
  13. ipvsadm -a -t 172.16.14.2:80 -r 172.16.14.11 -g 
  14. ipvsadm -Ln 
不要让ipvsadm开机启动:
chkconfig ipvsadm off
 
进行高可用前的主要步骤:
 
1、DNS域名解析
用uname -n的结果来识别对方的名字
 
 
    
  1. 使dr1,dr2的uname -n分别为: 
  2. dr1.magedu.com 
  3. dr2.magedu.com 
  4.  
  5. hostname dr1.magedu.com 
  6. vim /etc/sysconfig/network 
  7.    HOSTNAME=dr1.magedu.com 
  8.     
  9. hostname dr2.magedu.com 
  10. vim /etc/sysconfig/network 
  11.    HOSTNAME=dr2.magedu.com 
  12.  
  13. vim /etc/hosts添加: 
  14. 172.16.14.10 dr1.magedu.com dr1 
  15. 172.16.14.11 dr2.magedu.com dr2 
2、设定两个节点可以基于密钥进行ssh通信,
 
 
   
  1. dr1: 
  2. # ssh-keygen -t rsa 
  3. # ssh-copy-id -i ~/.ssh/id_rsa.pub root@dr2 
  4.  
  5. dr2 
  6. # ssh-keygen -t rsa 
  7. # ssh-copy-id -i ~/.ssh/id_rsa.pub root@dr1 
3、两个节点时间同步
 
 
  
  1. # date 112322022012;ssh dr2 'date 112322022012' 
4、在两个主机上安装以下rpm包:
 
 
  
  1. yum -y --nogpgcheck localinstall  
  2. heartbeat-2.1.4-9.el5.i386.rpm  
  3. heartbeat-pils-2.1.4-10.el5.i386.rpm  
  4. heartbeat-stonith-2.1.4-10.el5.i386.rpm  
  5. libnet-1.1.4-3.el5.i386.rpm 
查看配置文件:
 
 
  
  1. cd /usr/share/doc/heartbeat-2.1.4
  2. cp ha.cf haresources authkeys /etc/ha.d/ 
  3. cd /etc/ha.d/ 
  4. ##ha.cf  主配置文件 
  5. ##haresources 资源配置文件 
  6. ##authkeys  认证文件 

修改authkeys:
 
  
  1. 把authkeys权限改为600 
  2. chmod 600 authkeys 
  3. vim authkeys 
  4. auth 3      ##启用加密方式3 
  5. 3 md5 Hello! 
  6.  
  7. 生成一串密码,把md5后的hello!替换掉: 
  8. dd if=/dev/urandom count=1 bs=512 |md5sum 
  9. 5bd1ebacb939d34261ff2b2e6730a8d9  -  
  10. ##用该行替换Hello! 
修改ha.cf
 
 
  
  1. vim ha.cf      ##启用如下项: 
  2. keepalive 2    ##两个心跳信息的间隔时间 
  3. deadtime 30    ##多长认为主机dead 
  4. warntime 6     ##在发出最后一个心跳信息的警告时间 
  5. initdead 120   ##开机时等待时间;用于增强容错能力 
  6. udpport 694     ##默认使用的端口(单播) 
  7. mcast eth0 224.2.2.14 694 1 0  ##组播地址 
  8. auto_failback on    ##当主节点重新上线后,是否回到主节点 
  9. crm on             ##启用crm 
  10. node dr1.magedu.com  ##添加两个节点信息 
  11. node dr2.magedu.com 
  12. ping 172.16.0.1    ##两个节点集群时的仲裁设备 
  13. compression bz2    ##压缩类型 
  14. compression_threshod 2    ##大于多少KB才压缩 
5、安装配置ldirectord
 
 
  
  1. yum -y  --nogpgcheck  localinstall   
  2. perl-MailTools-1.77 heartbeat-ldirectord-2.1.4.9 
  3.  
  4. 查看信息: 
  5. rpm -ql heartbeat-ldirectord 
  6.  
  7. chkconfig --list|grep ldirectord 
  8. 显示3,5级别为on,需要关闭 
  9. chkconfig ldirectord off 
  10.  
  11. cd /usr/share/doc/heartbeat-ldirector-2.1.4
  12.  
  13. cp ldirectord.cf  /etc/ha.d/ 
  14.  
  15. vim ldirectord.cf 做如下修改: 
  16. checktimeout=3       ##检测时间 
  17. checkinterval=1      ##平均检测间隔时间 
  18. logfile="/var/log/ldirectord.log"  ##启用日志 
  19.  
  20. virtual=172.16.14.2:80      ##定义虚拟主机服务 VIP的地址 
  21. real=172.16.14.10:80 gate   ##节点IP;gate表示DR模型 
  22. real=172.16.14.11:80 gate  
  23. service=http               ##服务类型 
  24. request=".health.html"     ##健康检测页面;必须在节点上 
  25. receive="OK"               ##检测页面内容 
  26. scheduler=rr 
  27. #persistent=600 
  28. #netmask=255.255.255.255     
  29. protocol=tcp               ##协议 
  30. checktype=negotiate        ##检测类型 
  31. checkport=80               ##检测端口 
  32.  
  33. 然后启动ldirectord测试  
  34. service  ldirector start 
  35.  
  36. 将上述操作同步到dr2上: 
  37. /usr/lib/heartbeat/ha_propagete 
  38.  
  39. 在两个节点主机上建立测试页面: 
  40. cd /var/www/htdocs 
  41. vim .health.html 
  42. 写入:OK 
 
三、运行gui界面:
 
 
  
  1. hb_gui    ##打开gui界面 
  2. 为hacluster设置一个密码 
1、添加资源

dr1运行,dr2为standby

dr2运行,dr1为standby

再添加一个VIP资源

 

使用ip addr show查看:

将Director和VIP进行排序约束:

 
四、测试结果:
1、dr1为active,dr2为standby:

说明资源约束生效,
访问页面时根据设定好的调度算法变换,说明负载均衡正常
 
2、dr2为active,dr2为standby:

 
说明资源切换成功,高可用有效,
通过访问页面,负载均衡也正常工作

3、把rs1的httpd服务停止
service httpd stop
访问页面时只显示rs2的页面结果,
说明Director通过健康状态监控发现rs1故障,把请求只发送到rs2上
重新启动rs1的httpd服务后,负载均衡恢复正常,

停掉rs2的httpd服务时,反之亦然