heartbeat

      Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。下面描述了 heartbeat 模块的可靠消息通信机制,并对其实现原理做了一些介绍。

heartbeat
有这么几个要点:
1、2个网卡,1个用于管理访问用,一个用于做心跳检测。
2、一个额外的IP做第三方仲裁
3、监测脚本。

可能是我只是粗浅的搞了一下这个,认识得不够深,我总觉得heartbeat的浮动IP切换是要整个节点宕掉才能切换,只将服务停掉,浮动IP不会切换,所以要写监测脚本。

开始配置:

H1 :
管理IP:172.16.12.23
心跳检测IP:10.1.1.1
H2 :
管理IP:172.16.12.24
心跳检测IP:10.1.1.2

浮动IP:10.1.1.3

1、 hostname 设置好 一定要写:

主机名:jq-c6-h1,jq-c6-h2

2、 关闭防火墙 iptables -F; 关闭selinux: setenforce 0

3、 hosts文件

[root@jq-c6-h1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.12.24 jq-c6-h2
172.16.12.23 jq-c6-h1

4、 安装epel扩展源:

[root@jq-c6-h1 ~]# yum -y install epel-release

5、 两个机器都安装heartbeat / libnet

[root@jq-c6-h1 ~]# yum  install -y heartbeat httpd

准备工作就基本完成了。

主节点上:jq-c6-h1

[root@jq-c6-h1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
//样例文件的目录
[root@jq-c6-h1 heartbeat-3.0.4]# ls
apphbd.cf  authkeys  AUTHORS  ChangeLog  COPYING  COPYING.LGPL  ha.cf  haresources  README

把这几个文件拷贝到/etc/ha.d目录下。

[root@jq-c6-h1 heartbeat-3.0.4]# cp  authkeys  ha.cf    haresources   /etc/ha.d/

修改配置文件:

[root@jq-c6-h1 heartbeat-3.0.4]# cd /etc/ha.d/

authkeys 文件:
这个文件就是认证配置文件

auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!

该文件主要是用于集群中两个节点的认证,采用的算法和密钥(如果有的话)在集群中节点上必须相同,目前提供了3种算法:md5,sha1和crc。

这里我就用md5了。打开然后这样写就好了。

然后需要改变该文件的权限为600,否则heartbeat启动将失败。

[root@jq-c6-h1 ha.d]# chmod 600 authkeys 

haresources 文件:
资源配置文件

#jq-c6-h1 10.1.1.1/24/eth1:0 rpcbind
#jq-c6-h1 10.1.1.1/24/eth1:0 nfs
jq-c6-h1 10.1.1.3/24/eth1:0 httpd

这个配置文件只在最后变加上这1个就好了。
前边是主机名,主节点的主机名,注意是要在主配置文件中node 后有的,并且节点名必须与uname –n相匹配。

后边的那个 是浮动IP的地址,一定是没被使用的IP。
在后边就是服务了,这里写的服务要在/etc/ha.d/resource.d/下能找到才行

ha.cf 文件:
heartbeat的主要配置文件

比较好的一点是这里的配置文件都是注释掉的,打开就可以了

debugfile /var/log/ha-debug   #设定debug文件目录
logfile /var/log/ha-log     #设定日志文件目录
logfacility     local0		#产生日志的设备
keepalive 2            #设定检查时间间隔为2s
deadtime 30            #设定死亡时间为30s
warntime 10            #设定告警时间为10s(10s以上没有收到对方的回应就报警)
initdead 60            #设定初始化时间为60s
udpport 694            #启动udp694监听端口(该端口可以修改)
ucast eth1 10.1.1.2    #设定侦听的心跳线的接口和对应的对端接口的IP地址
auto_failback off         #不启动抢占模式(主节点死掉,浮动IP切换到从,主节点再启动,浮动IP不切换回主)
node    jq-c6-h1         #指定两个节点
node    jq-c6-h2
ping 172.16.0.254         #指定一个第三方的仲裁节点
respawn hacluster /usr/lib/heartbeat/ipfail  #使用这个脚本去侦听对方是否还活着(使用的是ICMP报文检测)

从节点上:jq-c6-h1

[root@jq-c6-h1 ~]# scp  authkeys  ha.cf   haresources   172.16.12.24:/etc/ha.d/

直接将主节点上的拷贝到从节点上。

修改主配置文件中的,心跳检测IP

[root@jq-c6-h2 ha.d]# vim ha.cf

ucast eth1 10.1.1.1  这个改为主节点的IP

然后启动服务,先主后从。

[root@jq-c6-h1 ~]# /etc/init.d/heartbeat start 
[root@jq-c6-h1 ~]# chkconfig heartbeat on

[root@jq-c6-h2 ~]# /etc/init.d/heartbeat start 
[root@jq-c6-h2 ~]# chkconfig heartbeat on

然后主节点上就能出现浮动IP了,就是在haresource里写的那个。

[root@jq-c6-h1 ~]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:47:42:C8  
          inet addr:172.16.12.23  Bcast:172.16.255.255  Mask:255.255.0.0

eth1      Link encap:Ethernet  HWaddr 00:0C:29:47:42:D2  
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0

eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:47:42:D2  
          inet addr:10.1.1.3  Bcast:10.1.1.255  Mask:255.255.255.0

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

然后停掉主:

[root@jq-c6-h1 ~]# /etc/init.d/heartbeat stop 
Stopping High-Availability services: Done.

浮动IP跑到从上了。

[root@jq-c6-h2 ha.d]# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0C:29:DB:7A:22  
          inet addr:172.16.12.24  Bcast:172.16.255.255  Mask:255.255.0.0

eth1      Link encap:Ethernet  HWaddr 00:0C:29:DB:7A:2C  
          inet addr:10.1.1.2  Bcast:10.1.255.255  Mask:255.255.0.0

eth1:0    Link encap:Ethernet  HWaddr 00:0C:29:DB:7A:2C  
          inet addr:10.1.1.3  Bcast:10.1.255.255  Mask:255.255.255.0

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0

监测脚本,因为heartbeat不能直接运行脚本,我曾经试过直接在ha.cf中引入我写的脚本但是并不执行。

监测脚本

#!/bin/bash
while true
do
curl 172.16.12.24 &> /dev/null
if [ $? -eq 0 ]
then
        exit 0
else
        /etc/init.d/heartbeat stop &> /dev/null
        exit 1
fi 
done

很简单直接写个死循环在后台一直运行,一直检测,健康性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值