天天看点

HA高可用搭建

HA高可用搭建

系统环境:

[root@ha1 ha.d]# uname -a

Linux ha1 2.6.18-238.el5 #1 SMP Thu Jan 1315:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux

ha1:192.168.0.2

ha2:192.168.0.3

heartbeat 虚ip:192.168.0.4

所用到的安装包:

wgetftp://ftp.univie.ac.at/systems/linux/dag/redhat/el4/en/x86_64/dag/RPMS/libnet-1.1.2.1-2.2.el4.rf.x86_64.rpm

Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

heartbeat-2.1.3.tar.gz(Heartbeat-3-0-7e3a82377fa8.tar.bz2用了,但没有成功,执行没反应)

××××××××××××××××××××××××××××××××××××××

安装过程

在ha1和ha2机器上都安以下执行:

1.#yum install -y flex bisonlibet net-snmp-devel OpenIPMI docbook-style-xsl libtool libxml2-devellibuuid-devel libxslt-devel libtool libtool-devel libtool-ltdl-devellibtool-ltdl  bzip2-devel  glib2-devel

不然在make的时候会出错

2.#rpm-ivhlibnet-1.1.2.1-2.2.el4.rf.x86_64.rpm

3.#tar jxvf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2

#cd Reusable-Cluster-Components-glue--glue-1.0.9

#./ autogen.sh

#./configure && make && make install

4.#tarzxvfheartbeat-2.1.3.tar.gz

#cdheartbeat-2.1.3

#cpdoc/ha.cf/usr/local/etc/ha.d

# cpdoc/authkeys/usr/local/etc/ha.d

# cpdoc/haresources/usr/local/etc/ha.d

×××××××××××××××××××××××××××××××××××××

配置:

5.首先在/etc/hosts 文件中添加ha1 ha2 信息

cat/etc/hosts

192.168.0.2 ha1

192.168.0.3 ha2

6.heartbeat有三个配置文件:

ha.cf

authkyes

haresources

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

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

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

[root@alsme_probe3tmp]# 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检测肯定通不过,但这时候并不能切换

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

#bcast ech0

#采用网卡ech0的udp单播来通知心跳,ip应为对方IP,建议采用单播。当一个网

段有多台这样cluster话,则一定要采用单播,否则每组cluster都会看到对方的

节点,从而报错。

ucast eth0 192.168.0.3

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

udpport 694

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

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

node ha1

##节点2

node ha2

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

ping 192.168.0.254

hopfudge 1

deadping 5

#指定和heartbeat一起启动、关闭的进程#respawnhacluster

/usr/local/lib64/heartbeat/ipfail#apiauthipfail gid=haclient

uid=hacluster

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

#crm on

从heartbeat的官方文档来看,目前的ping节点还没什么实际用途,只是用于检测

节点的连通性,并不作为节点切换的真正依据。在将来的新版本中也许会这么做

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

#vi /usr/local/etc/ha.d/authkeys

auth 1

1 crc

chmod600 /usr/local/etc/ha.d/authkeys

注意authkeys的权限一定要是600

8.编辑集群资源文件:haresources

#vi /usr/local/etc/ha.d/haresources

ha1 IPaddr::192.168.0.4/24/eth0:1 mysqld keepalived

以上个人理解:

ha1 为ha.cf文件中且要作为primary 的node

IPaddr:: 192.168.0.4/24/eth0:1 是给ha指定的virtualip(漂移ip),即

当heartbeat 启动时通过heartbeat 的/usr/local/etc/ha.d/resource.d/IPaddr 为服务器配置虚拟ip

后面的mysqld 则是要求heartbeat 在启动时执行 service mysqld start 或heartbeat关掉时执行service mysqld stop 命令

Keepalived等同于mysqld

9.如何配置,可以参见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;xxxstop;模式。

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

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

和datadir两个参数

10.服务启动/关闭

/etc/init.d/heartbeat start/stop

或service heartbeat start/stop

11.测试

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

2).拔掉网线,测试在primary节点的网络断开后的切换情况,通过测试,在拔掉

网线后,当主节点发现无法和standby节点无法通信后,会在log中记录warn信息

,如果延续时间达到在ha.cf中设定的时长后,会开始释放资源,standby节点发

现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动资源并将自己

active成primary节点。切换过程除ha.cf中设定的时长之外的时间段同样非常短

。这里容易出现custer脑分裂的问题。如果采用双master的话,就不存在这个问

题。

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

否能够正常切换。

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

12.管理

启动和关闭heartbeat的方法:

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

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

手工切换:

[root@alsme_probe3rc.d]# /usr/local/share/heartbeat/hb_standby

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

[root@alsme_probe3rc.d]# service heartbeat status

heartbeatOK [pid 13763 et al] is running on alsme_probe3

[alsme_probe3]…

手工接管

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

查看heartbeat状态

用ifconfig 查看

primary ,我做的实验显示eth0:0 不知道为何不是显示的eth0:1

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:A1:D1:28  

         inet addr:61.233.30.218  Bcast:61.233.30.223  Mask:255.255.255.240

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

13.其他

实际测试结果表明:如果采用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里加上”crm1″

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.pyharesources

/usr/local/var/lib/heartbeat/crm/cib.xml”

3).把haresources清空

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

知道是如何控制的。