设为首页 收藏本站
查看: 978|回复: 0

[经验分享] Heartbeat v2 + haresouce 实现WEB高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-8 08:50:40 | 显示全部楼层 |阅读模式
一、简介

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


二、拓扑
wKioL1UjkaaiDsXEAADeqj7ov7Y916.jpg
三、配置

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

                utpdate  .....

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

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


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

heartbeat的主要文件如下:


1
2
3
4
5
6
7
8
/etc/ha.d/authkeys     #心跳信息认证
           ha.cf        #message line心跳信息的配置参数
           haresource   #v1版本的crm

/usr/share/heartbeat/  #很多可执行的程序
                     hb_standy   #当前节点切换为备份节点
                     hb_takeover  #抢回资源,变为主节点
                     hb_delnode   #删除节点





2、配置authkeys,认证信息
1
2
3
#chmod 600 /etc/ha.d/authkeys
#openssl rand -base64 16  >> /etc/ha.d/authkeys
# tail -5 /etc/ha.d/authkeys



wKioL1UjllKwyvZjAADMeV-KR0U688.jpg

3.配置ha.cf,心跳参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
..............
#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口才使用的配置,一般不用  
#       serial  serialportname ...
#serial /dev/ttyS0      # Linux
#serial /dev/cuaa0      # FreeBSD
#serial /dev/cuad0      # FreeBSD 6.x
#serial /dev/cua/a      # Solaris
#---------------------------------------------------

bcast   eth1            # Linux    #在eth1口使用广播传递心跳信息
#bcast  eth1 eth2       # Linux
#bcast  le0             # Solaris
#bcast  le1 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.配置资源
1
node1.yu.com  192.168.192.222/24/eth0 httpd  #默认在node1节点启动vip和http服务




5.HA测试
wKiom1UjmuaBSFusAADJmhzJlJ4661.jpg
wKioL1UjnC6SV7-ZAAj1mJ-eZgo570.jpg
wKiom1UjmumSiSl0AAfX10qbMb8523.jpg
wKioL1UjnDDSFR85AADCviLBQl8167.jpg
6.添加额外脚本实现资源监控

此时,HA即可实现,关闭heartbeat也能实现切换,但是如果vip 或者httpd进程异常,那么heartbeat是不会现在资源转移的,也就是说heartbeat是不会监控vip和httpd的健康状态,因此为了实现httpd异常时,也能保证HA,这边我使用一个简单地脚本来实现,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[iyunv@node1 html]# 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处修改为如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
        pkill  1.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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-54835-1-1.html 上篇帖子: heartbeat 双机的热备份 下篇帖子: HA集群之Heartbeat v1 高可用安装讲解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表