LVS+heartbeat 高可用LINUX服务器
ha服务器设置:
主机名      lvs.abc.com
Ip地址      eth0:192.168.50.9
            eth1:192.168.60.9
ha服务器设置:
主机名      lvs1.abc.com
IP地址      eth0:192.168.50.8
            Eth1:192.168.60.8
 
Realserver1 设置
主机名      web1.abc.com
IP地址      eth0:192.168.50.5
            Eth1:192.168.60.5
 
Realserver2 设置
主机名      web2.abc.com
IP地址      eth0:192.168.50.6
            Eth1:192.168.60.6
 
实验拓扑图:

LVS+heartbeat 高可用LINUX服务器_LINUX

 
 
Heartbeat 安装依赖和支持软件:
 
  1. yum –y install libnet* 
  2. yum –y install heartbeat* 
  3. yum -y install heartbeat 
  4. yum –y install ipvsadm* 
 
配置haeartbeat:
复制配置文件
 
  1. cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/ 
  2. cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/ 
  3. cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/ 
  4. cp /usr/share/doc/heartbeat-ldirectord-2.1.3/ldirectord.cf /etc/ha.d/ 
 
修改配置文件/etc/ha.d/ha.cf
 
  1. vim /etc/ha.d/ha.cf 
 
  1. logfile /var/log/ha-log 
  2. debugfile /var/log/ha-debug 
  3. logfacility     local0 
  4. keepalive 2    #主从切换的保持时间 
  5. deadtime 30   #宣布对方死亡时间 
  6. warntime 10   #警告时间 
  7. udpport 694   #主从之间的通信端口 
  8. ucast eth0 192.168.50.8  #采用单播方式探测心跳,bcast是广播方式;后面的地址是对端地址 
  9. auto_failback on   #自动恢复,就是说如果主从故障中恢复会抢回主的位置 
  10. node    lvs.abc.com   #主节点主机名 hostname后的名称 
  11. node    lvs1.abc.com  #从节点主机名 hostname后的名称 
  12. ping 192.168.50.8 (最好是网关地址) 
  13. ping_group group1 192.168.50.8 192.168.50.9 
  14. ping_group group1 192.168.60.8 192.168.60.9 
  15. respawn hacluster /usr/lib/heartbeat/ipfail 
  16.  #如果是64位系统,则目录应该为/usr/lib64/heartbeat/ipfail 
  17. apiauth ipfail gid=haclient uid=hacluster  #用户已经自动建立 

 修改authkeys 验证文件

 

  1. vim /etc/ha.d/authkeys 

 

  1. auth 2           #去掉下面哪行的注释 就填上哪行的行号,此文件主从必须一样。 
  2. #1 crc           #crc算法是求和 
  3. 2 sha1 HI!        #sha1是hash加密 HI!是被加密的值 
  4. #3 md5 Hello!    # md5 加密 hello 加密值 

  设置验证权限authkeys 的权限(注意:此文件主从必须都是600的权限)

  

  1. chmod 600 /etc/ha.d/authkeys 

   

  修改ldirectord.cf资源管理文件

  

  1. vim /etc/ha.d/ldirectord.cf 

 

  1. checktimeout=3     #隔3秒没有收到realserver的返回页面,ha认定宕机 服务将不使用 
  2. #该realserver提供服务. 
  3. checkinterval=1     #间隔1秒访问一次real根目录的test.html文件 
  4. #fallback=127.0.0.1:80  # 此处针对全局 下面的fallback 是针对局部的。 
  5. autoreload=yes        #当realserver 恢复正常后自动加入队列提供服务 
  6. logfile="/var/log/ldirectord.log"  #log日志的路径 
  7. logfile="local0"              
  8. emailalert=XXXXX@fantong.com   #接收告警邮件的邮箱 
  9. emailalertfreq=3600       
  10. emailalertstatus=all 
  11. quiescent=no 
  12. # Sample for an http virtual service 
  13. virtual=192.168.50.80:80       #virtual IP 对外IP 
  14.      real=192.168.50.5:80 gate Weight 8     #真实服务器必须空4格,Weight 是权重。 
  15.      real=192.168.50.6:80 gate Weight 10    #权重高对应的承载能力就高 
  16.      #real=192.168.6.6:80 gate 
  17.   
  18.  fallback=127.0.0.1:80 gate        #real机器全部宕机由谁来承担。 
  19.  service=http                  
  20.  scheduler=wrr                    #轮询加权 
  21.  protocol=tcp                     #tcp协议 也支持UDP协议 
  22.  checktype=negotiate    #很多种选择默认是negotiate通过页面来检测rs 
  23.  checkport=80                   #检测的端口 
  24.  request="test.html"         #验证文件必须位于rs机器的网页根目录 
  25.  receive="Test Page"              #验证文件的内容必须相同 
  26.  #virtualhost=www.x.y.z 

           

 
修改/etc/ha.d/haresources文件
 
  1. vim /etc/ha.d/haresources 
 
 
  1. lvs.abc.com 192.168.50.80 lvs ldirectord 
  2.  #主ha的主机名 + virtual ip(对外提供的IP)+ 需要启动的服务(lvs是下面脚本的名称) 
 
写资源脚本lvs 文件(注意需要根据自身情况修改网卡名)
 
  1. vim /etc/init.d/lvs 
 
 
  1. #!/bin/bash 
  2.  # description: start LVS of DirectorServer 
  3.  #Written by :NetSeekhttp://www.linuxtone.org GW=192.168.1.254 
  4.   
  5.  # website director vip. 
  6.  GW=192.168.50.80      #网关地址千万不要填错了,否则你的辅助(浮动)ip是无法访问的。 
  7.  WEB_VIP=192.168.50.80  #virtual ip 对外的唯一IP 
  8.  WEB_RIP1=192.168.50.5 
  9.  WEB_RIP2=192.168.50.6 
  10.  #WEB_RIP3=1.1.1.18 
  11.  #WEB_RIP3=1.1.1.19 
  12.  . /etc/rc.d/init.d/functions 
  13.  logger $0 called with $1 
  14.  case "$1" in 
  15.  start) 
  16.  # Clear all iptables rules. 
  17.  /sbin/iptables -F 
  18.  #这个地方要注意一下,如果公司最外端有防火墙,就可以清空iptables内容(都做允许,或#者停止),把改行注释掉;如果没有就需要有防火墙了,自己写策略或者写脚本。 
  19.  # Reset iptables counters. 
  20.  /sbin/iptables -Z 
  21.  #同上 
  22.  # Clear all ipvsadm rules/services. 
  23.  /sbin/ipvsadm -C 
  24.  #set lvsvip for dr 
  25.  /sbin/ipvsadm --set 30 5 60 
  26.  /sbin/ifconfig eth0:0 $WEB_VIP broadcast $WEB_VIP netmask 255.255.255.255 up 
  27.   
  28.  /sbin/route add -host $WEB_VIP dev eth0:0 
  29.  /sbin/ipvsadm -A -t $WEB_VIP:80 -s wrr -p 3 
  30.  /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP1:80 -g -w 1 
  31.   
  32.  /sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP2:80 -g -w 2 
  33.   
  34.  #/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP3:80 -g -w 1 
  35.   
  36.  #/sbin/ipvsadm -a -t $WEB_VIP:80 -r $WEB_RIP4:80 -g -w 1 
  37.   
  38.  touch /var/lock/subsys/ipvsadm>/dev/null 2>&1 
  39.   
  40.  # set Arp 
  41.  /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW >/dev/null 2>&1 
  42.   
  43.  ;; 
  44.  stop) 
  45.  /sbin/ipvsadm -C 
  46.  /sbin/ipvsadm -Z 
  47.  ifconfig eth0:0 down 
  48.  route del $WEB_VIP >/dev/null 2>&1 
  49.   
  50.  rm -rf /var/lock/subsys/ipvsadm>/dev/null 2>&1 
  51.   
  52.  /sbin/arping -I eth0 -c 5 -s $WEB_VIP $GW 
  53.  echo "ipvsadmstoped" 
  54.  ;; 
  55.  status) 
  56.  if [ ! -e /var/lock/subsys/ipvsadm ];then 
  57.  echo "ipvsadm is stoped" 
  58.  exit 1 
  59.  else 
  60.  ipvsadm -ln 
  61.  echo "..........ipvsadm is OK." 
  62.  fi 
  63.  ;; 
  64.  *) 
  65.  echo "Usage: $0 {start|stop|status}" 
  66.   
  67.  exit 1 
  68.  esac 
  69.  exit 0 
 
以上文件写好之后,做如下操作

  1. chmod 755 /etc/init.d/lvs  
  2. ln –s /etc/init.d/lvs /etc/ha.d/resource.d/lvs 

#ldirectord 启动的时候会从/etc/init.d  和 /etc/ha.d/resource.d 下搜索资源( 这里说的资源#就是指脚本)

 
设置heartbeat ipvsadm 的开机自启动
 
  1. Chkconfig heartbeat on 
  2.  Chkconfig ipvsadm on 
 
ha服务器设置:
 
 
同样安装所有的依赖和支持软件,操作和主-ha一样的
其他配置文件相同通过scp 从主ha上拷贝修改即可。

 

  1. scp root@192.168.50.9:/etc/ha.d/* /etc/ha.d/ 
复制资源脚本

 

  1. scp root@192.168.50.9:/etc/init.d/lvs /etc/init.d/lvs 
 
复制完成后修改ha.cf,其他文件保持一致不必修改(注意看看authkeys的权限)
ucast 192.168.50.9  #单播方式探测心跳,跟的是对端地址 主ha的IP地址
ping 192.168.50.9
 
资源脚本的链接
 
  1. chmod 755 /etc/init.d/lvs 
  2.  ln –s /etc/init.d/lvs /etc/ha.d/resource.d/lvs 

 

 
 
realserver 真实服务器的配置
创建脚本(用来屏蔽arp,否则会和其他机器产生冲突):
 
  1. vim /usr/local/real.sh 
 
 
  1. #/bin/sh 
  2.  VIP=192.168.50.80                        #virtual ip的地址                      
  3.  source /etc/rc.d/init.d/functions 
  4.  case "$1" in 
  5.  start) 
  6.  echo "start LVS of RealServer" 
  7.  /sbin/ifconfig lo:0 ${VIP} broadcast ${VIP} netmask 255.255.255.255 up 
  8.   
  9.  echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore 
  10.   
  11.  echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 
  12.   
  13.  echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore 
  14.  echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 
  15.   
  16.  ;; 
  17.  stop) 
  18.  /sbin/ifconfig lo:0 down 
  19.  echo "Close LVS of RealServer" 
  20.  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore 
  21.   
  22.  echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce 
  23.   
  24.  echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore 
  25.  echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce 
  26.   
  27.  ;; 
  28.  *) 
  29.  echo "wrong,please use start|stop" 
  30.   
  31.  exit 1 
  32.  esac 
 

保存脚本 退出

修改权限:
 
  1. Chmod 755 /usr/local/real.sh 
加入启动:
 
  1. Vim /etc/rc.local 
  2.  /usr/local/real.sh start 
保存后退出
 
 
创建index.html    test.html2个文件
 
  1. Vim /var/www/html/index.html 
  1. test 192.168.50.5 

 另外的realserver机器写test 192.168.50.6 方便测试

vim /var/www/html/test.html     

#这个文件和/etc/ha.d/ldirectord.cf下的receive="Test Page"选项内容保持一致.

否则该机器将无法正常提供服务
 
主从服务器和真实服务器配置完成.
 
测试部分
启动主ha服务器
Service heartbeat start

LVS+heartbeat 高可用LINUX服务器_LINUX_02

tail –F /var/log/ha-log

LVS+heartbeat 高可用LINUX服务器_主机_03

tail –F /var/log/message

LVS+heartbeat 高可用LINUX服务器_服务器 heartbeat lvs 高可_04

Heartbeat 正常启动
 
我们看看网卡是不是正常获取到了virtual ip

LVS+heartbeat 高可用LINUX服务器_服务器 heartbeat lvs 高可_05

 
看到了吧eth0:0 已经获得了192.168.50.80 的虚拟IP地址了
 
下面我们看看ipvsadm 的状况:

LVS+heartbeat 高可用LINUX服务器_主机_06

正常的找到了realserver 机器。
 
从机器也同样启动 heartbeat
 
Tail –F /var/log/ha-log

LVS+heartbeat 高可用LINUX服务器_LINUX_07

正常启动

Ipvsadm   和  ifconfig

LVS+heartbeat 高可用LINUX服务器_主机_08

由于是从机器必须探测到主机器故障后才能启动LVS 和资源等。
 
 
就可以看到  test 192.168.50.5    按ctrl+F5 就能看到test 192.168.50.6 之间切换。 
 

按F5 刷新 之后看主ha的ipvsadm –L –n –stats

LVS+heartbeat 高可用LINUX服务器_LINUX_09