基于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 [email protected]
节点172.16.5.12中
# ssh-keygen -t rsa -P ‘’ # ssh-copy-id [email protected]
注意:两个节点时间必须同步,否则会出现各种各样的问题
二、安装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'
a和b 是两个节点的主机别名。
五、启用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
配置vip
配置nfs
配置httpd
管理器在哪个节点启动,主节点就是哪个节点,即dc标志,意思是指派协调员。
配置基于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、其实,上面这些学完了,就差不多了,至于资源约束的问题,原理比较复杂,做起来很简单,随后会做补充,或者在之后的博客中也可以看到。