基于hearbeat的高可用集群配置


注意,高可用集群最少需要三个节点,两个节点要想能够运行,必须忽略法定票数,ignore-quorum。而在heartbeat配置中我们使用两个节点,配置文件中ping node 可以另外提供一个节点,ping node 可以ping多个节点,使集群满足法定票数。ignore-quorum是针对后面的corocync而言的,若集群中配置了两个节点,一台挂了,服务是无法转移的,必须忽略法定票数才行。


Stonith是专门的硬件设备,用来将于集群断开连接的节点干掉。


集群中的节点一旦心跳连接没有了,就是所谓的脑裂,它还可以独立运行,还会征用集群的资源,stonith就是用来处理脑裂的工具,但它必须另外使用设备。


一、建立双机互信


节点172.16.5.11中:


# ssh-keygen -t rsa -P ‘’
# ssh-copy-id root@172.16.5.12

节点172.16.5.12


# ssh-keygen -t rsa -P ‘’
# ssh-copy-id root@172.16.5.11

注意:两个节点时间必须同步,否则会出现各种各样的问题


二、安装heartbeat


解决依赖关系


# yum -y install PyXMLlibnet net-snmp-libs

安装heartbeat需要的包


# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x86_64.rpm
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
heartbeat-2.1.4-12.el6.x86_64.rpm 主要的包
heartbeat-gui-2.1.4-12.el6.x86_64.rpm图形界面配置
heartbeat-stonith-2.1.4-12.el6.x86_64.rpm 一个节点挂掉了,必须把它杀死

注意:这几个程序包两台机器上都得装。


三、编辑配置


主配置文件


Authkeys: crc,md5,sha1
Ha.cf:hearbeat
Haresources


注意,这三个文件都必须放在/etc/ha.d目录下,但rpm包装完了之后是没有的,要为它提供,在/usr/share/doc/heartbeat-2.1.4目录下,将之copy/etc/ha.d目录下即可。


# cd /usr/share/doc/heartbeat-2.1.4
# cp authkeys ha.cf haresources /etc/ha.d/
# cd /etc/ha.d
# openssl rand -hex 16 >> authkeys

在authkeys中编辑

Auth 3
3 md5 78e282ea3dbff2e7a5614bafc89e0e32

三种加密方式,随便选择一种,但两个节点的此文件必须相同

# chmod 600 authkeys 不改权限,heartbeat启动不了
# vim ha.cf  配置 节点

mcast eth0 225.30.d0.1 694 1 0 选择组播,单播,不方便,改组播地址,防止所有报文对方都能收到

node www.a.com 添加节点

node www.b.com

ping 172.16.0.1 ping 节点,传递心跳信息的辅助机制,使得满足法定票数。相当于ignore-quarum

logfile /var/log/ha-log 启用后,自动生成文件。

compression bz2 要不要压缩

compression_threshold 2 大于2k才压缩

auto_failback on 当挂掉的节点重新启动之后,自动取代另一节点。

# vim haresources 配置资源

www.a.com 172.16.5.10/16/eth0 httpd

www.a.com指派协调员,当这个节点运行正常时,第二个节点不会启动,但这个节点挂掉之后,另一个节点自动启动。

Heartbeat v1 haresources 在配置文件中定义主节点即:DC指派协调员

Heartbeat v2 crm 在哪个节点启动,该节点就是DC

Heartbeat v3 pacemaker 自定义主节点



四、启动服务

这里要强调指出,当启动服务的时候,必须是对方启动自己,而dump掉却是自己的事。


心跳服务,本身就是我挂了通知你,而在对方没有启动的时候,是由自己通知它启动的,所以,启动的时候也必须是自己去启动对方,这也是为什么要建立双机互信的原因。否则,自己独自启动自己,高可用集群服务不能正常运行。


还要注意一点的是,在启动心跳服务之前,必须将web服务停掉,而且是开机默认不启动


# service httpd stop


# chkconfig mysqld off


两个节点同样操作


# ssh b 'service heartbeat start'
# ssh a 'service heartbeat start'

ab 是两个节点的主机别名。


五、启用nfs服务,让两个节点的首页显示为nfs服务器上挂在的页面。


1、再启动一台机器,创建目录/web/data并在目录下创建web页面


# mkdir -pv /web/data
# vim /web/data/index.html
<h1>welcome to my home.</h1>

2、导出文件,供节点挂在。


# vim /etc/exports
/web/data 172.16.0.0/16(ro)

3、重启nfs,两个节点就可以挂载该挂载点。


六、启动crm集群资源管理器来管理节点


# vim /etc/ha.d/ha.cf

crm respawn ----------------crm启用后,在资源文件中的配置都起不了作用了。


必须在heartbeat启动之后,添加这项配置,否则,如果先添加了这项配置,heartbeat有可能启动不起来。


Crm的客户端工具是hb_gui


跟心跳服务启动之前web服务必须关闭一样,之前挂载的nfs在启动前必须卸载。否则管理器也无法正常管理。


# umount /var/www/html/ -------两个节点都要如此

启动心跳服务 heartbeat,给hacluster用户配置密码后,就可以启用hb_gui了。


# ssh b 'service heartbeat start'
# ssh a 'service heartbeat start'
# passwd hacluster

两个节点只要给用户hacluster设置了密码,都可以登录管理器,前提是,heartbeat服务必须已经启动。


# hb_gui &

使用crm后,登录管理器,必须进行配置高可用集群才会生效。


一共需要添加三个资源 ip nfs(若要共享网页文件,这个资源必须的)、服务httpd

高可用集群之heartbeat_高可用集群  heartbeat


高可用集群之heartbeat_高可用集群  heartbeat_02

高可用集群之heartbeat_高可用集群  heartbeat_03

高可用集群之heartbeat_高可用集群  heartbeat_04

高可用集群之heartbeat_高可用集群  heartbeat_05


配置vip


高可用集群之heartbeat_高可用集群  heartbeat_06


配置nfs


高可用集群之heartbeat_高可用集群  heartbeat_07

配置httpd


高可用集群之heartbeat_高可用集群  heartbeat_08


管理器在哪个节点启动,主节点就是哪个节点,即高可用集群之heartbeat_高可用集群  heartbeat_09dc标志,意思是指派协调员。


高可用集群之heartbeat_高可用集群  heartbeat_10



配置基于mysql的服务高可用集群


mysql有服务高可用和存储高可用之分,服务高可用是指在节点上安装服务并配置成高可用,存储高可用是指在节点上配置数据存储,将存储做成高可用)


服务高考可用挂载的是其他服务器上的nfs,而存储高可用挂载点是自己的设备,/dev/drbd0.


1、在nfs服务器上配置导出文件


# vim /etc/exports
/mysqldata 172.16.0.0/16(rw,no_root_squash)
no_root_squash  不压缩root权限

注意要创建该目录


# mkdir /mysqldata

2、重新导出文件


# exportfs -arv

-a 操作所有文件系统


-r 重新导出


-v 详细信息


Nfs服务器需要开机自动启动,因为它并不参与集群,只是提供共享文件,不需要心跳链接来管理。


3、在三个节点上分别创建mysql用户,使得它们拥有同样的id号,以便能够实现id映射,让三台服务器都对mysql都有操作权限。


# useradd -u 306 -r mysql--------三个节点进行同样操作

4、在两个节点安装mysql的通用二进制包


详细请看http://qiufengsong.blog.51cto.com/7520243/1284355


数据文件,先不要初始化,只创建/mydata目录,之前的过程请看链接中的步骤。


5、创建目录/mydata,作为数据目录的挂载点,如果原先该目录下已经有文件,将之全部删除,这种方案因该是针对mysql通用二进制包有效,因为它可以初始化数据文件。


# mkdir /mydata

6、挂载nfs文件到一个节点,创建data目录,修改data权限并初始化mysql


注意:只需要初始化一次就行了,千万不要再去另一个 节点初始化一次了。


# mount 172.16.251.95:/mysqldata /mydata
# cd /mydata
# mkdir data
# chown -R mysql.mysql data
# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# cd /mydata/data
# chown -R mysql.mysql *

7、启动服务看看,应该没什么问题。在另一个节点安装mysql通用二进制包到初始化数据文件截止,不用初始化数据文件,因为它要和另一个节点实现数据共享,只需要挂在了nfs上的文件,就可以直接启动mysql服务了。不出意外的话,应该没什么问题了。


8、注意:实验中可能会出现两个节点挂在的nfs文件无法卸载,这时要看看mysqld服务是否停止。没问题就可以启动hb_gui添加资源,并对添加的资源进行管理了。


9、其实,上面这些学完了,就差不多了,至于资源约束的问题,原理比较复杂,做起来很简单,随后会做补充,或者在之后的博客中也可以看到。