1. 简介

HeartBeat用于搭建双机热备景象,可以经由过程专门的心跳线来连接双机,也可以经由过程通俗的网线来连接。

官方网站:http://www.linux-ha.org/HeartBeat

本文所提到实验景象为:

[root@alsme_probe3 tmp]#  cat /etc/redhat-release

Red Hat Enterprise Linux AS release 4 (Nahant Update 6)

heartbeat 2.1.3

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一样。

groupadd haclient -g 1001

useradd -g haclient hacluster -u 1002

2.3. 安装

可以直接下载rpm包,或者本身下载源码包进行编译,在这里,我采取本身编译源码的体式格式。

安装heartbeat前,须要先安装libnet包。

tar zxvf heartbeat-2.1.3.tar.gz

rpm -ivh libnet-1.1.2.1-2.2.el4.rf.rpm

[root@alsme_probe3 tmp]# cd heartbeat-2.1.3

[root@alsme_probe3 tmp]# ./configure

[root@alsme_probe3 tmp]# make

[root@alsme_probe3 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里面有具体申明。

[root@alsme_probe3 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

#采取网卡eth0的udp单播来通贴心跳,ip应为对方IP,建议采取单播。当一个网段有多台如许cluster话,则必然要采取单播,不然每组cluster都邑看到对方的节点,从而报错。

ucast eth0 172.18.57.154

##应用udp端口694 进行心跳监测

udpport 694


auto_failback off    #恢复正常后是否须要再主动切换回来,一般都设为off。

##节点1的HOSTNAME,必必要与 uname -n 指令获得的成果一致。

node alsme_probe3

##节点2的HOSTNAME

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

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

[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/authkeys

auth 1


1 crc


[root@alsme_probe3 heartbeat-2.1.3]# chmod 600 /usr/local/etc/ha.d/authkeys

重视: authkeys的权限必然如果600.

3.3 编辑集群资料文件:haresources (切换时备机须要做的工作)

[root@alsme_probe3 heartbeat-2.1.3]# vi /usr/local/etc/ha.d/haresources

alssme_probe3 IPaddr::172.18.158.111/24/bond0 mysql

#此中,172.18.158.111为VIP

如何设备,可以拜见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的资料经管角本的例子:

[root@alsme_probe3 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

….. 号令收拾

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  /usr/local/etc/ha.d/haresources /usr/local/var/lib/heartbeat/crm/cib.xml”

3).把haresources清空

别的若是只起一个节点的话,则service IP地址须要2分钟才干生效。这个时候不知道是如何把握的。

heartbeat默认模式是没法监控资料的,也就是说此中某个资料如果crash掉了,也不会产生任何动作,它只有当它认为对方机械dead后才会产活泼作。也就是机械crashed,收集断掉了之类。这显然没法达到我们的目标。

 为了达到我们的目标就要采取crm(cluster resource management)模式了。

起首,先按默认模式设备heartbeat(详见heartbeat新手上路)。

默认模式设备成功后,再按下面的步调操纵:

1)在ha.cf里面增长

    crm on

2)将haresources资料文件转换成cib.xml文件,2.1.3自带有转换脚本

   /usr/local/lib64/heartbeat/haresources2cib.py /usr/local/etc/ha.d/haresources

   输出文件在/usr/local/var/lib/heartbeat/crm/cib.xml

3)若是hacluster和haclient用户和用户组是在安装heartbeat之后创建的话,则须要履行下面号令批改权限

    批改heartbeat目次权限,可以用以下号令:

  find / -type d -name “heartbeat” -exec chown -R hacluster {} \;

  find / -type d -name “heartbeat” -exec chgrp -R haclient {} \;

4)在2.0的版本中ipfail与crm 模式有冲突,所以在ha.cf中不成打开ipfail。

5) cib.xml文件的批改

    若是在IPaddr中有下面两行,则删除:

     <nvpair id=”IPaddr_172_18_57_83_attr_1″ name=”nic” value=”24″/>

     <nvpair id=”IPaddr_172_18_57_83_attr_2″ name=”cidr_netmask” value=”bond0″/>

     2.1.3版本生成的cib.xml文件中,mysql资料是ocf格局的,而它自带的mysql角本是无法启动mysql的,所以须要批改,有两种办法。在批改前先介绍一下ocf和lsb格局的差别:

LSB格局的角本必须支撑status功能,必须能接管start,stop,status,三个参数;而若是是OCF格局,则必须支撑start,stop,monitor三个参数.此中status和monitor参数是用来监控资料的,很是首要.

例如LSB风格的脚本,运行./mysql status时辰,

返回值包含OK或则running则默示资料正常

返回值包含stopped或者No则默示资料不正常。

假如是OCF风格的脚本,运行./mysql monitor时辰,

返回0默示资料是正常的,

返回7默示资料呈现题目.

ocf格局的启动角本在/usr/lib/ocf/resource.d/heartbeat(也许你的机械上目次不是这个,可以搜刮ocf来查找)

lsb格局的启动角本在/usr/lib/lsb/resource.d/heartbeat目次下。

两种批改办法

1.批改cib.xml,将mysql的ocf改成lsb。然后在/usr/lib/lsb/resource.d/heartbeat(若是 
该目次不存在,则手工创建,并将权限赋给hacluster:haclient)下面履行ln -s /etc/init.d/mysql mysql。

#  rm /usr/heartbeat/var/lib/heartbeat/crm/cib.xml.* -f

#  vi /usr/heartbeat/var/lib/heartbeat/crm/cib.xml

2.批改/usr/lib/ocf/resource.d/heartbeat下面的mysql的角本,使之能正常工作。或者将/etc/init.d/mysql拷过来,批改使它支撑monitor操纵

6) 然后启动heartbeat即可。Service heartbeat start.

7)若是mysql采取双master的话,则在stop资料后,记的将mysql手动起来。

Heartbeat CRM模式经管

1)查看所有资料

[root@alssme_probe3 sbin]# crm_resource -L

Resource Group: group_1

    IPaddr_172_18_158_111       (heartbeat::ocf:IPaddr)

    mysql_2     (lsb:mysql)

2)查看资料跑在哪个节点上

[root@alssme_probe3 sbin]# crm_resource -W -r mysql_2

resource mysql_2 is running on: alssme_probe3

4)启动/停止资料(cluster不会产生切换,手工停mysql,将会从头启动或者产生切换)

[root@alssme_probe4 crm]# crm_resource -r mysql_2 -p target_role -v started

 [root@alssme_probe3 sbin]# crm_resource -r mysql_2 -p target_role -v stopped

5)查看资料在cib.xml中的定义

[root@alssme_probe3 sbin]# crm_resource -x -r mysql_2

mysql_2 (lsb:mysql):    Started alssme_probe3

raw xml:

 <primitive provider=”heartbeat” type=”mysql” id=”mysql_2″>

   <operations>

     <op id=”mysql_2_mon” interval=”60s” name=”monitor” timeout=”30s”/>

   </operations>

   <instance_attributes id=”mysql_2″>

     <attributes>

       <nvpair name=”target_role” id=”mysql_2-target_role” value=”started”/>

     </attributes>

   </instance_attributes>

 </primitive>

    即每60秒检测资料运行景象,若是发明资料不在,则测验测验启动资料,若是30s后还未启动成功,则资料切换向另节点。时候可以批改( mysql一般建议采取这个时候值)。

6)将资料移向指定节点

  crm_resource -M -r mysql_2 -H alssme_probe4
Logo

更多推荐