linux下高可用集群之heartbeat详解

1.高可用集群简单效果图

wKioL1eZrQvgMrjlAAB9HRK7wVo857.jpg-wh_50

1.1.Messaging Layer:主要收集节点间的事务资源心跳等信息,分别有以下几种:

   heartbeatV1 heartbeatV2 heartbeatV3

   corosync

   cman

   keepalived

   ultramokey

1.2.CRM:cluster resourse manager,对Messaging Layer收集到的资源进行管理,分别有以下几种:

   Heartbeat v1 自带的资源管理器:haresources

   Heartbeat v2 自带的资源管理器:haresources和crm

   Heartbeat v3: 资源管理器crm发展为独立的项目,pacemaker

1.3.RA: Resource Agent,资源代理,由符合LSB标准的脚本(start,stop,restart,status)

   主要功能是CRM资源管理器对资源管理分配后由RA进行执行

  RA Classes:RA类型

Legacy heartbeat v1 RA

LSB (/etc/rc.d/init.d/)

OCF (Open Cluster Framework):含pacemaker 和 linbit (drbd)

STONITH 隔离

   Resource Type:资源类型

primitive: 基本类型

clone: 克隆

group:组

master/slave: drbd,运行于两节点的主从关系

资源粘性:资源对当前节点的依赖程度,通过score定义

资源约束:Constraint

位置约束 location: 资源对节点倾向程度

排列约束 coloation: 资源间依赖性

顺序约束 order: 资源的采取动作的次序

2.高可用集群

2.1.三个基本要求

 节点之间名称解析建议写在/etc/hosts文件下

 节点之间ssh能互相通信,建议使用密钥认证

 节点之间时间同步建议使用ntp服务器

2.2.三个配置文件:

 authkeys:密钥文件,600, 

 ha.cf: heartbeat服务的配置

 haresources:资源管理配置文件

3.本实验背景:双集群节点为node1.willow.com,IP为1.1.1.18 node2.willow.com,IP为1.1.1.19

在node1.willow.com主机配置如下:(与node2.willow.com集群配置全部相同)

3.1.安装HA集群包

#yum --nogpgcheck localinstall perl-MailTools-1.77-1.el5.noarch.rpm 

#yum --nogpgcheck localinstall heartbeat-2.1.4-9.el5.i386.rpm heartbeat-gui-2.1.4-9.el5.i386.rpm heartbeat-pils-2.1.4-10.el5.i386.rpm heartbeat-stonith-2.1.4-10.el5.i386.rpm libnet-1.1.4-3.el5.i386.rpm 

#cd /usr/share/doc/heartbeat-2.1.4/

#cp -p authkeys ha.cf haresources /etc/ha.d/

#chmod 600 authkeys

#cd /etc/ha.d/

3.2.vim authkeys #新增如下內容:

auth 1

1 md5 willow!  #其中willow!是md5所需的salts


3.3.vim ha.cf  #修改成如下內容:

logfacilitylocal0

keepalive 1

bcasteth0# Linux

auto_failback on

nodenode1.willow.com

nodenode2.willow.com

ping 1.1.1.144


3.3.vim haresources #修改成如下內容:

node1.willow.com  IPaddr::1.1.1.100/24/eth0 httpd

#yum -y install httpd

#echo "<h1>node1.willow.com</h1>" > /var/www/html/index.html #区别首页显示内容

#chkconfig httpd off

#setenforce 0

#iptalbes -F

3.4.node2.willow.com主机只修改如下部分(其他与node1.willow.com集群配置全部相同,省略)

#echo "<h1>node2.willow.com</h1>" > /var/www/html/index.html #区别首页显示内容

3.5.基于haresources简单集群测试:

在node1.willow.com主机下:

#serivce heartbeat start

#ssh node2 'serivce heartbeat start'

#tail -f /var/log/messages #看日志

此时通过web访问VIP1.1.1.100看效果

#cd /usr/lib/heartbeat

#./ha_stanby  #模拟node1节点掉线,web自动转到node2节点上,进行服务

此时通过web访问VIP1.1.1.100再看效果

3.6.基于haresources通过第三台linux主机1.1.1.20的NFS服务器共享网页内容,再进行集群测试

在1.1.1.20主机上开启NFS共享:

#mkdir -pv /web/ha

#echo "<h1>this is NFS sharing</h1>" > /web/ha/index.html

#vim /etc/exports

/web/ha     1.1.1.0/24(ro)

#service nfs start

#service portmap start

在node1主机上:停止heartbeat服务

#ssh node2 'serivce heartbeat stop'

#serivce heartbeat stop

在node1和node2两台主机上:同进修改haresources文件

#vim haresources #修改如下内容

node1.willow.com IPaddr::1.1.1.100/24/eth0 Filesystem::1.1.1.20:/web/ha::/var/www/html::nfs httpd

再在node1主机上:启动heartbeat服务

#serivce heartbeat start

#ssh node2 'serivce heartbeat start'

#tail -f /var/log/messages #看日志

此时通过web访问VIP1.1.1.100看效果

#cd /usr/lib/heartbeat

#./ha_stanby  #模拟node1节点掉线,web自动转到node2节点上,进行服务

此时通过web访问VIP1.1.1.100再看效果

4.通过hb_gui基于native进行crm管理并集群测试

#vim ha.cf  新增如下内容

crm respawn

#hb_gui & 通过Xshell打开crm管理图行界面

#/usr/lib/heartbeat/ha_propagate  传播ha.cf和authkeys文件给其他节点进行更新

4.1.新增webip资源


wKiom1efC4SCBXTVAAFXRdk9FoA089.jpg-wh_50

wKioL1efC4WzTkV3AAJAcUdGmtg930.jpg-wh_50

wKiom1efC4axT1vfAALqYN0FX-k923.jpg-wh_50

wKioL1efC4jiJFSDAAMV4OLJtKE691.jpg-wh_50

4.2.新增httpd资源代理


wKioL1efDFOR_cJkAALvu-IvLI8599.jpg-wh_50

4.3.启动资源

wKiom1efDQqzzf-IAAHi-D1fBis945.jpg-wh_50

wKiom1efDQqARWRDAAHFUSIEa78635.jpg-wh_50

注意启动资源后,webip和httpd资源分别运行在不同主机上,这不是我们所需要的

如果将所有资源绑定成一个组,那么所有资源肯定会运行在同一主机上?

5.通过hb_gui基于group进行crm管理并通过第三台linux主机1.1.1.20NFS服务器共享网页内容

#vim ha.cf  新增如下内容

crm respawn

#hb_gui &   通过Xshell打开crm管理图行界面

#/usr/lib/heartbeat/ha_propagate  传播ha.cf和authkeys文件给其他节点进行更新

先新增资源组webservice,再在webservice组基础上依次顺序新增webip,filesystem,httpd资源

webip资源代理ipaddr,filesystem资源为Filesystem,httpd资源为httpd服务

5.1.新增webservice组

wKioL1efAdmgoTxTAAFwifkVPGE894.jpg-wh_50

wKiom1efAdqgdTq_AAF3aSrZbpE871.jpg-wh_50


5.2.新增webip资源代理

wKiom1efCbHiU1HiAAI_ziYFW-Q038.jpg-wh_50

wKioL1efCbPRPDqeAALll628bk0993.jpg-wh_50

wKioL1efCbSB5POeAALZJlm4mJo089.jpg-wh_50


5.3.新增filesystem资源代理

wKiom1efBAzxe0rsAAPbT4IBoPo787.jpg-wh_50


5.4.新增httpd资源代理

wKiom1efBGPyIKBzAANY9TkQOR0844.jpg-wh_50


5.5.启动所有资源

wKiom1efBxfy***yAAHPxyNIzm0023.jpg-wh_50

wKiom1efBxiTcnVdAAHFtaca3LI327.jpg-wh_50

6.通过hb_gui基于约束进行crm管理并通过第三台linux主机1.1.1.20NFS服务器共享网页内容

#vim ha.cf  新增如下内容

crm respawn

#hb_gui &   通过Xshell打开crm管理图行界面

#/usr/lib/heartbeat/ha_propagate  传播ha.cf和authkeys文件给其他节点进行更新

先新增资源组webservice,再在webservice组基础上依次顺序新增webip,filesystem,httpd资源

webip资源代理ipaddr,filesystem资源为Filesystem,httpd资源为httpd服务

6.1.在新增native基础资源后,webip,filesystem和httpd轮徇运行在不同node节点上

wKiom1egQXWSdmqYAAIV1fyw6z8689.jpg-wh_50

6.2.新增colocation排列约束httpd_with_filesystem两资源绑在一起

wKioL1egQaSglJuGAAJdmoILDLs996.jpg-wh_50

再新增colocation排列约束filesystem_with_webip两资源绑在一起

wKioL1egQkPCltzsAAJvbnKAJiA864.jpg-wh_50

6.3.新增顺序约束filesystem_before_httpd,filesystem在httpd之前启动

wKiom1egQtDTA65HAAI0ueXG_28065.jpg-wh_50

再新增顺序约束webip_before_filesystem,webip在filesystem之前启动

wKiom1egQ2LS03QEAAJqKC7p8Gg775.jpg-wh_50

6.5.最后效果是所有资源都运行在同一node主机上

wKioL1egQ-PgvZdKAAHjHxy-ZCE171.jpg-wh_50

6.6.利用粘性设定更倾向于运行至指定节点,粘性值必须大于0

wKiom1eioorTS5_kAALYbJI6qoQ177.jpg

6.7.设定位置约束,让指定node主机上线后一直处于指定node主机

wKiom1eioqHC5eMhAAHSTsngBYg399.jpg

wKioL1eioqLBzx8lAALTVXHBKLE765.jpg

7.通过nfs服务实现mysql数据共享集群

7.1.通过第三台主机1.1.1.20,做nfs共享,步骤如下:

 #fdisk  /dev/sda  #创建lvm分区省略

 #partprobe /dev/sda

 #pvcreate /dev/sda5

 #vgcreate myvg /dev/sda5

 #lvcreate --help

 #lvcreate -L +1G -n mydata myvg

 #mke2fs -j /dev/myvg/mydata 

 #mkdir /mydata

 #vim /etc/fstab 

    /dev/myvg/mydata   /mydata    ext3   defaults    0 0

 #mount -a

 #mkdir /mydata/data

 #groupadd -g 3306 mysql

 #useradd -u 3306 -g 3306 -s /sbin/nologin -M mysql

 #chown -R mysql.mysql /mydata/data/

 #vim /etc/exports 

    /mydata     1.1.1.0/24(no_root_squash,rw)

 #exportfs -arv

 #chkconfig nfs on

 #chkconfig portmap on

7.2.node1主机节点安装mysql步骤如下:

 #groupadd -g 3306 mysql

 #useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql

 #mkdir /mydata

 #mount -t nfs 1.1.1.20:/mydata /mydata

 下载并解压通用二进制mysql-5.5.49-linux2.6-i686至/usr/local/路径下

 #cd /usr/local/

 #ln -sv mysql-5.5.49-linux2.6-i686 mysql

 #cd /usr/local/mysql

 #chown -R root.mysql .

 #scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

 #cp support-files/my-huge.cnf /etc/my.cnf

 #vim /etc/my.cnf

  thread_concurrency = 2

  datadir = /mydata/data

  innodb_file_per_table = 1

 #cp support-files/mysql.server /etc/init.d/mysqld

 #chkconfig --add mysqld

 #chkconfig mysqld off

 #service mysqld start #进行测试mysql是否安装正常

 #service mysqld stop

 #umount/mydata

7.3.安装node2节点之前,先在node1节点主机上umount/mydata和service mysqld stop,

  再依node1节点上步骤一样安装node2节点mysql,步骤如上省略

7.4.测试mysql集群

 #serivce heartbeat start

 #ssh node2 'serivce heartbeat start'

 #hb_gui &

 效果图如下:

 wKioL1eivBHzfAlBAAHKRbwEVCs730.jpg