linux下高可用集群之heartbeat详解
1.高可用集群简单效果图
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资源
4.2.新增httpd资源代理
4.3.启动资源
注意启动资源后,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组
5.2.新增webip资源代理
5.3.新增filesystem资源代理
5.4.新增httpd资源代理
5.5.启动所有资源
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节点上
6.2.新增colocation排列约束httpd_with_filesystem两资源绑在一起
再新增colocation排列约束filesystem_with_webip两资源绑在一起
6.3.新增顺序约束filesystem_before_httpd,filesystem在httpd之前启动
再新增顺序约束webip_before_filesystem,webip在filesystem之前启动
6.5.最后效果是所有资源都运行在同一node主机上
6.6.利用粘性设定更倾向于运行至指定节点,粘性值必须大于0
6.7.设定位置约束,让指定node主机上线后一直处于指定node主机
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 &
效果图如下: