设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 3624|回复: 0

[Heartbeat] Linux Heartbeat新手上路 [复制链接]

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

签到
475
注册时间
2008-5-19
最后登录
2019-11-16
在线时间
1946 小时
阅读权限
200
积分
59409
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2008-12-20 10:06:40 |显示全部楼层
HeartBeat用于搭建双机热备环境,可以通过专门的心跳线来连接双机,也可以通过普通的网线来连接。
官方网站:http://www.linux-ha.org


当然在linux 下面除了heartbeat还有很多,比如redhat的cluster软件等等。下面将简单介绍heartbeat的安装和配置。




2.安装

2.1. 准备

本试验环境共有2个主机,其IP分别为:

主机名 IP地址

alssme_probe3 172.18.158.23

alssme_probe4 172.18.158.24


如果/etc/hosts中没有配置的话, 则需要先配置/etc/hosts文件


2.2 创建用户和用户组


heartbeat需要haclient用户组和hacluster用户。


两个节点做同样的操作,并保证haclient和hacluster的ID一样。

[[email=root@alsme_probe3]root@alsme_probe3[/email] log]# groupadd haclient

[[email=root@alsme_probe3]root@alsme_probe3[/email] log]# useradd -g haclient hacluster



2.3. 安装

可以直接下载rpm包,或者自己下载源码包进行编译,在这里,我采用自己编译源码的方式。安装heartbeat前,需要先安装libnet包。


[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# tar zxvf heartbeat-2.1.3.tar.gz

[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# rpm -ivh libnet-1.1.2.1-2.2.el4.rf.x86_64.rpm

[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# cd heartbeat-2.1.3
[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]#./configure

[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# make

[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# make install


同样地,在另一个主机上也是这么安装。

libnet包可以在http://rpmfind.net/linux/rpm2html/search.php这里搜索到。




3. 配置

heartbeat有三个配置文件:

ha.cf

authkyes

haresources

这些文件在每台机器都要保持一致.下面将一一介绍.


cp /usr/local/share/doc/heartbeat-2.1.3/ha.cf /usr/local/etc/ha.d

cp /usr/local/share/doc/heartbeat-2.1.3/haresources /usr/local/etc/ha.d

cp /usr/local/share/doc/heartbeat-2.1.3/authkeys /usr/local/etc/ha.d




3.1 编辑hertbeat主配置文件ha.cf,2个主机上的内容一样。


以下是需要打开的配置,ha.cf里面有详细说明。

[[email=root@alsme_probe3]root@alsme_probe3[/email] tmp]# vi /usr/local/etc/ha.d/ha.cf

## ha的日志文件记录位置。如没有该目录,则需要手动添加
logfile /var/log/ha-log #File to write other messages to
logfacility local0 #这个是设置heartbeat的日志,这里是用的系统日志


##设定心跳(监测)时间时间为2秒
keepalive 2 #多长时间检测一次
warntime 5 #连续多长时间联系不上后开始警告提示

deadtime 20 #连续多长时间联系不上后认为对方挂掉了(单位是妙)

initdead 120 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)



#采用bond0的udp广播用来发送心跳信息

#bcast bond0


#采用网卡bond0的udp单播来通知心跳,ip应为对方IP,建议采用单播。当一个网段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的节点,从而报错。

ucast bond0 172.18.57.154



##使用udp端口694 进行心跳监测
udpport 694
auto_failback off #恢复正常后是否需要再自动切换回来,一般都设为off。


##节点1,必须要与 uname -n 指令得到的结果一致。
node alsme_probe3
##节点2
node alssme_probe4


##通过ping 网关来监测心跳是否正常
ping 172.18.158.254

hopfudge 1

deadping 5

#指定和heartbeat一起启动、关闭的进程#respawn hacluster /usr/local/lib64/heartbeat/ipfail#apiauth ipfail gid=haclient uid=hacluster

#是否采用v2 style模式,在三节点以上时一定要打开

#crm on


从heartbeat的官方文档来看,目前的ping节点还没什么实际用途,只是用于检测节点的连通性,并不作为节点切换的真正依据。在将来的新版本中也许会这么做。



3.2 编辑双机互联验证文件:authkeys

[[email=root@alsme_probe3]root@alsme_probe3[/email] heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys
auth 1
1 crc
[[email=root@alsme_probe3]root@alsme_probe3[/email] heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys

注意authkeys的权限一定要是600.



3.3 编辑集群资源文件:haresources

[[email=root@alsme_probe3]root@alsme_probe3[/email] heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources
alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql


如何配置,可以参见haresources,里面也有详细的说明。

有几个注意事项:

1).资源组的第一列是我们在ha.cf配置文件中的node之一,而且应该是当前准备作为primary节点的那一个node。

2).每一行代表一个资源组,如果一行写不下可以用" "换行

3).资源组启动顺序是从左往右,关闭的顺序是从右往左

4).脚本的参数通过::来分隔和传递

5).一个资源组里面不同资源之间以空格分隔

6).不同的资源组之间没有必然关系

7).每个资源都是一个角本,可以是在/etc/init.d目录下面的,也可以是/usr/local/etc/ha.d/resource.d目录下面的角本。这些角本必须要支持xxx start;xxx stop;模式。

8).关于service IP的资源设置格式详见haresources文件。

9).如果mysql是编译安装的话, 则需要修改/etc/init.d/mysql文件中的basedir和datadir两个参数




3.4 资源角本例子---drbd


下面是drbd的资源管理角本的例子:

[[email=root@alsme_probe3]root@alsme_probe3[/email] heartbeat-2.1.3]# vi /usr/local/etc/ha.d/resource.d/drbd
#!/bin/sh
case "$1" in
start)
#声明为drbd的primary节点
drbdadm primary db
#挂载文件系统
mount /dev/drbd0 /data
#启动相关服务
service mysql start
;;
stop)
#上面操作的反向
service mysql stop
umount /dev/drbd0 /data
drbdadm secondary db
;;esac
exit 0


我们测试的mysql是安装mysql时自带的,在/etc/init.d目录下面,它可以实现mysql的启动和关闭。

如果我们采用的是heartbeat+双master模式的话, 则不需要加上mysql资源组。

如果我们采用的是heartbeat+master/slave模式的话,则需要重新mysql角本,在start时将slave变成master。在stop时将master变成slave。


建议还是采用heartbeat+双master模式,这样将数据丢失降到最低。



4. 测试


测试切换不外乎以下几种:1).手工调用heartbeat的节点切换脚本

2).拔掉网线,测试在primary节点的网络断开后的切换情况,通过测试,在拔掉网线后,当主节点发现无法和standby节点无法通信后,会在log中记录warn信息,如果延续时间达到在ha.cf中设定的时长后,会开始释放资源,standby节点发现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动资源并将自己active成primary节点。切换过程除ha.cf中设定的时长之外的时间段同样非常短。这里容易出现custer脑分裂的问题。如果采用双master的话,就不存在这个问题。

3). shutdown primary主机,测试是否能够正常切换。4). 主节点机器掉电,是否能够正常切换。


第一种和第三种测试方法一定要测一下。



5.管理


启动和关闭heartbeat的方法:

/etc/init.d/hearbeat start或service heartbeat start



/etc/init.d/hearbeat stop或service heartbeat stop



手工切换:

[[email=root@alsme_probe3]root@alsme_probe3[/email] rc.d]# /usr/local/share/heartbeat/hb_standby

2008/07/19_20:01:21 Going standby [all].

[[email=root@alsme_probe3]root@alsme_probe3[/email] rc.d]# service heartbeat status

heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...


手工接管

[[email=root@alsme_probe3]root@alsme_probe3[/email] rc.d]# /usr/local/share/heartbeat/hb_takeover


查看heartbeat状态

[[email=root@alsme_probe3]root@alsme_probe3[/email] rc.d]# service heartbeat status

heartbeat OK [pid 13763 et al] is running on alsme_probe3 [alsme_probe3]...



6.其他

实际测试结果表明:如果采用myisam存储引擎,则在primary节点当掉的时候,总会丢失数据;而采用innodb存储引擎时,如果primary节点本身没有程序往本机写数据的话,那么基本上不会发生数据丢失;而如果primary节点本身有程序在写数据,则在当机瞬间,本机上的程序可能还会写入部分数据,而如果是其他主机程序连接过来的话,基本上不会发生丢数据的情况。

建议:在drbd+hb的环境中,最好是采用innodb存储引擎,并且设置innodb_flush_log_at_trx_commit = 1,这使得几乎每个提交的事务都能记录在ib_logfile* 中,在 secondary 节点上能得到恢复,减小损失。



heartbeat有两种模式,默认的模式只支持两个节点。如果cluster里面有2个以上节点的话,则需要采用cib模式,即v2 style:

1).把三个节点都加到ha.cf里,然后在ha.cf里加上"crm 1"

2).然后用/usr/local/lib64/heartbeat/haresources2cib.py把原来的/usr/local/etc/ha.d/haresources 转换成/usr/local/var/lib/heartbeat/crm/cib.xml.

"/usr/local/lib64/heartbeat/haresources2cib.py haresources /usr/local/var/lib/heartbeat/crm/cib.xml"

3).把haresources清空



另外如果只起一个节点的话,则service IP地址需要2分钟才能生效。这个时间不知道是如何控制的。

来源: http://logzgh.itpub.net/post/3185/466910
<-sina_sign,1762622645,2a5b1a59,10->感谢大家对linuxtone的支持!</strong>
您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2020-2-21 00:44 , Processed in 0.021748 second(s), 14 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部