posir 发表于 2019-1-7 09:42:37

Heartbeat v2 + haresouce 实现WEB高可用

  一、简介

  heartbeat最后一个v2版本是2.1.4,可以使用v1版本的haresource和crm,本实验以haresource为crm来讲解WEB的HA,haresource是不支持资源的监控操作,因此当资源出现了挂起,异常问题时不会导致heartbeat资源的转移,就存在问题,因此需要切合其他方式来实现资源的健康控制,这边我使用自己写得脚本的SHELL脚本来实现。
  

  

  二、拓扑
http://s3.运维网.com/wyfs02/M02/5D/B4/wKioL1UjkaaiDsXEAADeqj7ov7Y916.jpg
  三、配置

  0、HA前提:
  1.时间同步(心跳信息要时刻一致)

  utpdate.....

  2.主机名通信(ha当中的心跳信息的传递是通过主机名解析得来)
  uname-n   与/etc/hosts当中的一致

  3.ssh互信 (当heartbeat出现问题的时候,通过ssh来自动完成资源的转移操作)

  

  1、说明:
  rhel5当中的heartbeat软件包可以从epel当中下载或者源代码编译,rhel6开始已自带
  

  heartbeat的主要文件如下:

/etc/ha.d/authkeys   #心跳信息认证
         ha.cf      #message line心跳信息的配置参数
         haresource   #v1版本的crm
/usr/share/heartbeat/#很多可执行的程序
                     hb_standy   #当前节点切换为备份节点
                     hb_takeover#抢回资源,变为主节点
                     hb_delnode   #删除节点  

  

  2、配置authkeys,认证信息
#chmod 600 /etc/ha.d/authkeys
#openssl rand -base64 16>> /etc/ha.d/authkeys
# tail -5 /etc/ha.d/authkeyshttp://s3.运维网.com/wyfs02/M01/5D/B4/wKioL1UjllKwyvZjAADMeV-KR0U688.jpg
  

  3.配置ha.cf,心跳参数
..............
#debugfile /var/log/ha-debug   #调试日志位置
#logfile /var/log/ha-log       #日志记录在本地文件位置
#logfacility    local0         #通过syslog记录日志(同上,2选1即可)
#keepalive 2                  #每2s发送一次心跳包
#deadtime 30                  #死亡时间
#warntime 10                  #警告时间
#initdead 120                   #初始化死亡时间
udpport 694                     #进程监听udp 694端口
#baud   19200                  #波特率19200,使用com口才使用的配置,一般不用
#       serialserialportname ...
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#---------------------------------------------------
bcast   eth1            # Linux    #在eth1口使用广播传递心跳信息
#bcasteth1 eth2       # Linux
#bcastle0             # Solaris
#bcastle1 le2         # Solaris
#mcast eth0 225.0.0.1 694 1 0
#
#ucast eth0 192.168.1.2
auto_failback off
#node   ken3
node node1.yu.com               #节点1
node node2.yu.com               #节点2
ping 192.168.192.1                #pingnode节点为192.168.192.1
#ping_group group1 10.10.10.254 10.10.10.253
.......  

  

  4.配置资源
node1.yu.com192.168.192.222/24/eth0 httpd#默认在node1节点启动vip和http服务  

  5.HA测试
http://s3.运维网.com/wyfs02/M02/5D/B9/wKiom1UjmuaBSFusAADJmhzJlJ4661.jpg
http://s3.运维网.com/wyfs02/M00/5D/B5/wKioL1UjnC6SV7-ZAAj1mJ-eZgo570.jpg
http://s3.运维网.com/wyfs02/M00/5D/B9/wKiom1UjmumSiSl0AAfX10qbMb8523.jpg
http://s3.运维网.com/wyfs02/M01/5D/B5/wKioL1UjnDDSFR85AADCviLBQl8167.jpg
  6.添加额外脚本实现资源监控
  

  此时,HA即可实现,关闭heartbeat也能实现切换,但是如果vip 或者httpd进程异常,那么heartbeat是不会现在资源转移的,也就是说heartbeat是不会监控vip和httpd的健康状态,因此为了实现httpd异常时,也能保证HA,这边我使用一个简单地脚本来实现,如下:
# cat /etc/ha.d/1.sh
#!/bin/bash
#
vip="192.168.192.222";
while true;
do
ip addr show | grep $vip > /dev/null
ip_num=$?
nc 127.0.0.1 80 -z > /dev/null
port_return=$?
if [ $ip_num -eq 0] && [ $port_return -eq 0 ] ;then
   let num=0
elif [ $ip_num -eq 0 ] && [ $port_return -ne 0 ];then
    let num++
elif [ $ip_num -ne 0 ] && [ $port_return -eq 0 ];then
    let num++
elif [ $ip_num -ne 0 ] && [ $port_return -ne 0 ];then
    let num=0
fi
sleep 1
if [ $num -gt 2 ]; then
   service heartbeat stop > /dev/null
fi
done
      ###大致的过程如下,判断当前的节点是否有vip或者httpd进程,当一个为0一个非为0即表示存在问题的资源,这个时候休眠2s,然后再执行一次,如果还是一样的问题,则关闭当前节点的heartbeat的服务,实现切换和资源的转移。  将1.sh加入到heartbeat的启动脚本中,随着heartbeat启动和关闭:
  编辑/etc/init.d/heartbeat在start和stop处修改为如下:
start)
      StartLogd
      RunStartStop pre-start
      StartHA
      RC=$?
      Echo
      if
          [ $RC -eq 0 ]
      then
          [ ! -d $LOCKDIR ] && mkdir -p $LOCKDIR
          touch $LOCKDIR/$SUBSYS
      fi
      RunStartStop post-start $RC
      /etc/ha.d/1.sh &                ##让1.sh也在后台实时操作
      ;;
stop)
      RunStartStop "pre-stop"
      StopHA
      RC=$?
      Echo
      if
          [ $RC -eq 0 ]
      then
          rm -f $LOCKDIR/$SUBSYS
      fi
      RunStartStop post-stop $RC
      StopLogd
      pkill 1.sh                ##杀掉1.sh的进程
      ;;
restart)
      sleeptime=`ha_parameter deadtime`
      StopHA
      pkill1.sh
      Echo
      EchoNoNl Waiting to allow resource takeover to complete:
      sleep $sleeptime
      sleep 10 # allow resource takeover to complete (hopefully).
      echo_success
      Echo
      StartHA
      /etc/ha.d/1.sh &
      Echo
      ;;  

  此时vip或者httpd的进程出现问题都可以实现资源的转移。



页: [1]
查看完整版本: Heartbeat v2 + haresouce 实现WEB高可用