集群基本概念:
1、HA Resource
由集群控制的IP地址、服务等
2、FailOver
活动节点故障后,活动节点上的资源全都转移到备份节点
3、FailBack
活动节点状态恢复后,资源转回到活动节点的动作
4、资源粘性
资源是否更倾向于运行在当前节点
HA集群层次架构:
RA:Resource Agent资源代理
LSB脚本:Linux Standard Base
能够接受start | stop | restart | status 4个参数的脚本
由这些脚本负责完成资源的管理
CRM:Cluster Resource Manager 集群资源管理器
负责计算、比较集群节点的事务信息
DC:Designated Coordinator
属于CRM的一部分
在集群节点中选择一个节点作为DC,进行集群节点状态信息进行计算/比较
DC中包括以下两个引擎:
PE:Policy Engine 策略引擎
负责进行集群节点事务信息的计算,比较
TE:Transaction Engine 事务引擎
PE对信息计算结束后,由TE指定集群资源应该转移到哪个节点
LRM:Local Resource Manager
属于CRM的一部分
运行在每个集群节点上,负责接收TE的指令,执行资源转移的操作
Messaging Layer:集群事务信息层
负责传递集群节点的事务信息(心跳信息、资源粘性值等信息)
基于UDP协议工作
以上三个层次的功能可以由不同的软件实现。
RG:Resource Group资源组
将多个资源归为一组,实现资源的共同转移
资源约束:Constraint
排列约束:Colation Constraint
定义资源是否能够运行在同一个节点上
正值:资源可以运行在同一个节点上
负值:资源不可以运行在同一个节点上
位置约束:Location Constraint
通过定义score(分数)来完成约束,定义资源是否更倾向于运行在哪个节点
正值:倾向于此节点
负值:倾向于逃离此节点
顺序约束:Order Constraint
定义资源启动或关闭的顺序
以上score(分数)有如下两个特殊的值:
-inf:负无穷
inf:正无穷
STONITH
当active节点故障时,passive节点会抢夺其资源,为避免active由于假死再次抢夺资源,通过一定的方法使active节点彻底失效
split-brain:脑裂
集群节点无法获取对方的状态信息,产生脑裂
后果之一会导致双方共同争夺共享存储,导致数据损坏
资源隔离:避免产生脑裂
节点级别隔离:STONITH
资源级别隔离
例如,FC SAN switch可以实现在存储资源级别控制某节点是否可以正常访问
STONITH
用于隔离集群节点
STONITH设备
1、Power Distribution Units (PDU) 电源交换机
需要向厂商申请专门用于管理STONITH功能的管理组件
2、Uniterruptible Power Supplies (UPS)
3、Blade Power Control Devices 刀片服务的电源控制设备
4、Lights-out Devices(IBM RSA, HP IL0,Dell DRAC)
服务器自带的管理模块
5、Testing Devices
STONITH的实现
1、stonithd进程
2、STONITH Plug-ins
多节点的高可用集群
ha-aware application:
可以借助Messageing Layer信息传递的功能,实现对集群服务及节点的管理
CRM的目的:
可以为那些本身不具备HA能力的软件提供高可用的功能
quorum:法定票数
每个集群节点都具有一定数量的法定票数,当某个节点的票数小于半数时,节点等待其他节点对自己进行判决
集群的全局资源策略(without_quorum_policy):
当某个节点的票数小于半数时(不具备法定票数的时候),对自身上运行的集群资源的处理机制:
1、freeze
不再接收新的请求,对已经接入的请求继续提供服务
2、stop
停止自身的集群资源
3、ignore
无论法定票数是否满足与否,仍然继续提供服务
Failover Domain:故障转移域
集群资源倾向于转移的节点的集合
集群运行模型:
N--M:
n个节点运行M个服务,n>m;例如4个节点上运行3个服务
N--N:
N个节点运行N个服务
资源类型:
根据资源运行的场景不同,分为如下4类:
1、primitive
某一时刻只能运行在同一个节点上的资源
2、clone
可同时运行在多个节点上的资源
3、group
是个资源容器,将多个集群资源归类到一起
4、master/slave
独特的clone类资源
只能运行在两个节点上,其中一个节点为master主节点,另外一个为slave节点
RA class 类别:
1、Legacy
heartbeat v1版本的RA
2、LSB脚本
/etc/init.d/目录下的所有脚本都是基于LSB的脚本
3、OCF(Open Cluster Framework)脚本
不同的provider内置提供不同的OCF脚本,例如:
pacemaker
linbit(实现drbd)
4、STONITH
专门用于管理硬件STONITH设备
提供Messaging Layer功能的软件
1、heartbeat(v1,v2,v3)
heartbeat v3
heartbeat
pacemaker
cluster-glue
2、corosync(rhel 6.0)
需要配合pacemaker提供CRM功能
3、cman(rhel 5.0)
4、keepalived
专门为lvs Director提供高可用功能使用
5、ultramonkey
提供CRM功能的软件
1、heartbeat v1,自带资源管理器
同时提供Messaging Layer和CRM功能
提供CRM功能的组件是haresource,heartbeat v1自带的管理器
2、heartbeat v2,自带资源管理器
haresource
crm
3、heartbeat v3:资源管理器crm发展为独立的项目pacemaker
pacemaker
4、rgmanager
为cman提供CRM管理功能
高可用集群共享存储
磁盘接口类型:
IDE: 133M/s
SATA3:6G/s
Ultra SCSI: 320M/s
SAS:6G/s
USB 3.0: 400M/s
机械硬盘
随机读写
顺序读写
固态硬盘
IDE,SCSI:并行
SATA,SAS,USB:串行
存储类型:
DAS
Direct Attached Storage
直接接到主板总线,BUS
NAS
Network Attached Storage
文件服务器,文件级别
SAN
Storage Area Network
存储区域网络
IP SAN: iSCSI
FC SAN
SCSI:Small Computer System Interface
宽带
16 target
窄带
8 target
配置高可用集群注意事项 :
1、节点名称必须与uname -a命令看到的名称一致
2、配置基于密钥进行SSH通信
3、各集群节点时间必须同步
4、在/etc/hosts文件中配置各节点的主机名与IP地址解析条目
案例:HA WEB
系统:rhel 6.3 x32
IP1:10.1.1.1 server1.bj.com
IP2:10.1.1.2 server2.bj.com
VIP:10.1.1.254
1、配置两台机器的IP地址及计算机名称
2、编辑两台机器的/etc/hosts文件,确保两台机器可以通过主机名称通信
3、配置两台计算机基于密钥的SSH远程
1)在10.1.1.1上生成key
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘
Generating public/private rsa key pair.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
52:58:3c:04:3a:58:8d:f0:0c:92:58:be:f0:ac:a8:e4 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|oo+..o.+o |
|oo *...oo |
|. o = . .. |
| + . . . |
| + . S |
|.. . |
|o. |
|+ |
|.E |
+-----------------+
2)将公钥传递给10.1.1.2
# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
3)测试ssh远程,可以看到server2.bj.com上的IP
# ssh server2.bj.com ‘ifconfig‘
eth0 Link encap:Ethernet HWaddr 00:0C:29:22:89:6F
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe22:896f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1498 errors:0 dropped:0 overruns:0 frame:0
TX packets:1354 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:146902 (143.4 KiB) TX bytes:185101 (180.7 KiB)
Interrupt:18 Base address:0x2024
同样的方法在10.1.1.2上配置基于密钥的SSH远程
4、配置两台计算机时间同步
# service ntpd stop
# chkconfig ntpd off
# ntpdate 10.1.1.2
# crontab -e
*/5 * * * * /usr/sbin/ntpdate 10.1.1.2 &> /dev/null
同样的方法配置10.1.1.2与10.1.1.1同步
在两台机器上分别安装httpd,并建立测试首页
# yum install -y httpd
启动httpd服务,测试网页访问是否正常;测试完成后,将httpd关闭,并调整为开机自动关闭
# service httpd stop
停止 httpd: [确定]
# chkconfig httpd off
5、在两台计算机上安装heartbeat软件
软件下载地址:https://dl.fedoraproject.org
# yum localinstall -y --nogpgcheck libnet-1.1.6-7.el5.i386.rpm perl-MailTools-1.77-1.el5.noarch.rpm
# yum localinstall --nogpgcheck heartbeat-2.1.4-11.el5.i386.rpm heartbeat-devel-2.1.4-11.el5.i386.rpm heartbeat-gui-2.1.4-11.el5.i386.rpm heartbeat-stonith-2.1.4-11.el5.i386.rpm heartbeat-pils-2.1.4-11.el5.i386.rpm
heartbeat软件包说明:
1、heartbeat - Heartbeat subsystem for High-Availability Linux
2、heartbeat-devel - Heartbeat development package
3、heartbeat-gui - Provides a gui interface to manage heartbeat clusters
4、heartbeat-ldirectord - Monitor daemon for maintaining high availability resources
为lvs的ipvs高可用提供规则自动生成及后端服务器状态检查的功能
5、heartbeat-pils - Provides a general plugin and interface loading library
装载库的插件及接口
6、heartbeat-stonith - Provides an interface to Shoot The Other Node In The Head
提供STONITH功能的接口
6、编辑heartbeat配置文件
三个配置文件:
1、密钥文件,600,authkeys
2、heartbeat服务的配置 ha.cf
3、资源管理配置文件
haresources
# cp /usr/share/doc/heartbeat-3.0.4/authkeys ha.cf haresources /etc/ha.d/
# chmod 600 /etc/ha.d/authkeys
编辑/etc/ha.d/authkeys文件
使用md5算法计算出随机数字作为密钥
# dd if=/dev/random bs=512 count=1 | md5sum
记录了0+1 的读入
记录了0+1 的写出
8字节(8 B)已复制,19.3129 秒,0.0 kB/秒
d0597a8d45f4ead4fced69ec99f96af5 -
# vim /etc/ha.d/authkeys
在文件最后添加如下内容:
auth 1
1 sha1 d0597a8d45f4ead4fced69ec99f96af5
编辑/etc/ha.d/ha.cf主配置文件
# vim /etc/ha.d/ha.cf
//指定集群节点的名称
node server1.bj.com
node server2.bj.com
//指定传递集群事务信息的方式为广播
bcast eth0 # Linux
编辑/etc/ha.d/haresources文件,定义集群资源
# vim /etc/ha.d/haresoures
在文件最后添加如下内容:
定义IP地址资源及服务资源
server1.bj.com IPaddr::10.1.1.254/24/eth0 httpd
由于server2上的heartbeat配置文件与server1相同 ,因此直接复制配置文件
# scp -p /etc/ha.d/haresources /etc/ha.d/ha.cf /etc/ha.d/authkeys server2:/etc/ha.d/
7、启动heartbeat服务
# service heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
# ssh server2 ‘service heartbeat start‘
Starting High-Availability services: 2015/08/27_15:36:59 INFO: Resource is stopped
Done.
查看日志/var/log/messgage
# tail -30 /var/log/messages
Aug 27 15:36:30 localhost heartbeat: [30438]: info: G_main_add_TriggerHandler: Added signal manual handler
Aug 27 15:36:30 localhost heartbeat: [30438]: info: G_main_add_SignalHandler: Added signal handler for signal 17
Aug 27 15:36:30 localhost heartbeat: [30438]: info: Local status now set to: ‘up‘
Aug 27 15:36:30 localhost heartbeat: [30438]: info: Link 10.1.1.100:10.1.1.100 up.
Aug 27 15:36:30 localhost heartbeat: [30438]: info: Status update for node 10.1.1.100: status ping
Aug 27 15:36:30 localhost heartbeat: [30438]: info: Link server1.bj.com:eth0 up.
Aug 27 15:37:00 localhost heartbeat: [30438]: info: Link server2.bj.com:eth0 up.
Aug 27 15:37:00 localhost heartbeat: [30438]: info: Status update for node server2.bj.com: status up
Aug 27 15:37:00 localhost harc(default)[30449]: info: Running /etc/ha.d//rc.d/status status
Aug 27 15:37:00 localhost heartbeat: [30438]: info: Comm_now_up(): updating status to active
Aug 27 15:37:00 localhost heartbeat: [30438]: info: Local status now set to: ‘active‘
Aug 27 15:37:00 localhost heartbeat: [30438]: info: Status update for node server2.bj.com: status active
Aug 27 15:37:00 localhost harc(default)[30467]: info: Running /etc/ha.d//rc.d/status status
Aug 27 15:37:10 localhost heartbeat: [30438]: info: local resource transition completed.
Aug 27 15:37:10 localhost heartbeat: [30438]: info: Initial resource acquisition complete (T_RESOURCES(us))
Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30522]: INFO: Resource is stopped
Aug 27 15:37:11 localhost heartbeat: [30486]: info: Local Resource acquisition completed.
Aug 27 15:37:11 localhost heartbeat: [30438]: info: remote resource transition completed.
Aug 27 15:37:11 localhost harc(default)[30565]: info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp
Aug 27 15:37:11 localhost ip-request-resp(default)[30565]: received ip-request-resp IPaddr::10.1.1.254/24/eth0 OK yes
Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Acquiring resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 httpd
Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30616]: INFO: Resource is stopped
Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 start
Aug 27 15:37:11 localhost IPaddr(IPaddr_10.1.1.254)[30701]: INFO: Using calculated netmask for 10.1.1.254: 255.255.255.0
Aug 27 15:37:11 localhost IPaddr(IPaddr_10.1.1.254)[30701]: INFO: eval ifconfig eth0:0 10.1.1.254 netmask 255.255.255.0 broadcast 10.1.1.255
Aug 27 15:37:11 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.
Aug 27 15:37:11 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.
Aug 27 15:37:11 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.
Aug 27 15:37:11 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30675]: INFO: Success
Aug 27 15:37:11 localhost ResourceManager(default)[30588]: info: Running /etc/init.d/httpd start
查看本地80端口启动
# netstat -antp | grep :80
tcp 0 0 :::80 :::* LISTEN 30816/httpd
查看本地在eth0网卡上配置了vip
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:6A:65:5F
inet addr:10.1.1.1 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe6a:655f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13236 errors:0 dropped:0 overruns:0 frame:0
TX packets:10156 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5251806 (5.0 MiB) TX bytes:1784036 (1.7 MiB)
Interrupt:18 Base address:0x2024
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:6A:65:5F
inet addr:10.1.1.254 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:18 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:168 (168.0 b) TX bytes:168 (168.0 b)
在客户端使用http://10.1.1.254可以查看到server1.bj.com网页
模拟资源转移
在server1上执行如下命令,将server1转移为standby备份节点
# cd /usr/share/heartbeat/
# ./hb_standby
Going standby [all].
查看日志可以看到其他节点已经接收了资源
# tail /var/log/messages
Aug 27 15:47:20 localhost ResourceManager(default)[30888]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 stop
Aug 27 15:47:20 localhost IPaddr(IPaddr_10.1.1.254)[30971]: INFO: ifconfig eth0:0 down
Aug 27 15:47:20 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.
Aug 27 15:47:20 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[30945]: INFO: Success
Aug 27 15:47:20 localhost heartbeat: [30875]: info: all HA resource release completed (standby).
Aug 27 15:47:20 localhost heartbeat: [30438]: info: Local standby process completed [all].
Aug 27 15:47:20 localhost heartbeat: [30438]: WARN: 1 lost packet(s) for [server2.bj.com] [633:635]
Aug 27 15:47:20 localhost heartbeat: [30438]: info: remote resource transition completed.
Aug 27 15:47:20 localhost heartbeat: [30438]: info: No pkts missing from server2.bj.com!
Aug 27 15:47:20 localhost heartbeat: [30438]: info: Other node completed standby takeover of all resources.
在server2上分别查看vip和80端口是否开启
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:22:89:6F
inet addr:10.1.1.2 Bcast:10.1.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe22:896f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6323 errors:0 dropped:0 overruns:0 frame:0
TX packets:5233 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1492002 (1.4 MiB) TX bytes:840576 (820.8 KiB)
Interrupt:18 Base address:0x2024
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:22:89:6F
inet addr:10.1.1.254 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:18 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1951 (1.9 KiB) TX bytes:1951 (1.9 KiB)
# netstat -antp | grep :80
tcp 0 0 :::80 :::* LISTEN 30585/httpd
在客户端浏览器中http://10.1.1.254会看到server2.bj.com网页
在10.1.1.3上搭建nfs服务器,nfs服务器中存储网页文件;两台网站分别将nfs共享目录自动挂载到/var/www/html目录中,并测试文件系统资源 切换
1、在10.1.1.3上搭建nfs服务
# cat /webdata/index.html
<h1> nfs web page </h1>
# cat /etc/exports
/webdata 10.1.1.0/24(ro)
# service nfs start
# showmount -e 10.1.1.3
Export list for 10.1.1.3:
/webdata 10.1.1.0/24
2、在主节点上停止备份节点的heartbeat服务及自身的heartbeat服务
# ssh server2 ‘service heartbeat stop‘
# service heartbeat stop
3、编辑/etc/ha.d/haresources配置文件,添加Filesystem资源
# vim /etc/ha.d/haresouces
server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd
将/etc/ha.d/haresources配置文件复制到节点server2.bj.com
# scp /etc/ha.d/haresources server2:/etc/ha.d/
4、启动本地的heartbeat服务,启用备份节点的heartbeat服务
# service heartbeat start
# ssh server2 ‘service heartbeat start‘
在客户端浏览器中输入 http://10.1.1.254可以查看到nfs服务器网页
在主节点运行/usr/share/heartbeat/hb_standby脚本,转换为备份节点,客户端浏览同样是nfs服务器页面
在server2节点上分别查看vip/filesystem/servcice资源转换成功
查看日志可以看到资源转换过程
# tail -40 /var/log/messages
Aug 27 16:28:52 localhost heartbeat: [31714]: info: server2.bj.com wants to go standby [all]
Aug 27 16:28:53 localhost heartbeat: [31714]: info: standby: acquire [all] resources from server2.bj.com
Aug 27 16:28:53 localhost heartbeat: [1566]: info: acquire all HA resources (standby).
Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Acquiring resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd
Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[1608]: INFO: Resource is stopped
Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 start
Aug 27 16:28:53 localhost IPaddr(IPaddr_10.1.1.254)[1698]: INFO: Using calculated netmask for 10.1.1.254: 255.255.255.0
Aug 27 16:28:53 localhost IPaddr(IPaddr_10.1.1.254)[1698]: INFO: eval ifconfig eth0:0 10.1.1.254 netmask 255.255.255.0 broadcast 10.1.1.255
Aug 27 16:28:53 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.
Aug 27 16:28:53 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.
Aug 27 16:28:53 localhost avahi-daemon[1740]: Registering new address record for 10.1.1.254 on eth0.IPv4.
Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[1667]: INFO: Success
Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[1804]: INFO: Resource is stopped
Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/ha.d/resource.d/Filesystem 10.1.1.3:/webdata /var/www/html nfs start
Aug 27 16:28:53 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[1887]: INFO: Running start for 10.1.1.3:/webdata on /var/www/html
Aug 27 16:28:53 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[1879]: INFO: Success
Aug 27 16:28:53 localhost ResourceManager(default)[1579]: info: Running /etc/init.d/httpd start
Aug 27 16:28:53 localhost heartbeat: [1566]: info: all HA resource acquisition completed (standby).
Aug 27 16:28:53 localhost heartbeat: [31714]: info: Standby resource acquisition done [all].
Aug 27 16:28:54 localhost heartbeat: [31714]: info: remote resource transition completed.
Aug 27 16:40:22 localhost heartbeat: [31714]: info: server1.bj.com wants to go standby [all]
Aug 27 16:40:23 localhost heartbeat: [31714]: info: standby: server2.bj.com can take our all resources
Aug 27 16:40:23 localhost heartbeat: [2040]: info: give up all HA resources (standby).
Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Releasing resource group: server1.bj.com IPaddr::10.1.1.254/24/eth0 Filesystem::10.1.1.3:/webdata::/var/www/html::nfs httpd
Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/init.d/httpd stop
Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/ha.d/resource.d/Filesystem 10.1.1.3:/webdata /var/www/html nfs stop
Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: Running stop for 10.1.1.3:/webdata on /var/www/html
Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: Trying to unmount /var/www/html
Aug 27 16:40:23 localhost Filesystem(Filesystem_10.1.1.3:/webdata)[2119]: INFO: unmounted /var/www/html successfully
Aug 27 16:40:23 localhost /usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_10.1.1.3:/webdata)[2110]: INFO: Success
Aug 27 16:40:23 localhost ResourceManager(default)[2053]: info: Running /etc/ha.d/resource.d/IPaddr 10.1.1.254/24/eth0 stop
Aug 27 16:40:23 localhost IPaddr(IPaddr_10.1.1.254)[2263]: INFO: ifconfig eth0:0 down
Aug 27 16:40:23 localhost avahi-daemon[1740]: Withdrawing address record for 10.1.1.254 on eth0.
Aug 27 16:40:23 localhost /usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.1.254)[2235]: INFO: Success
Aug 27 16:40:23 localhost heartbeat: [2040]: info: all HA resource release completed (standby).
Aug 27 16:40:23 localhost heartbeat: [31714]: info: Local standby process completed [all].
Aug 27 16:40:24 localhost heartbeat: [31714]: WARN: 1 lost packet(s) for [server2.bj.com] [1856:1858]
Aug 27 16:40:24 localhost heartbeat: [31714]: info: remote resource transition completed.
Aug 27 16:40:24 localhost heartbeat: [31714]: info: No pkts missing from server2.bj.com!
Aug 27 16:40:24 localhost heartbeat: [31714]: info: Other node completed standby takeover of all resources.
CRM:Cluster Resource Manager
为那些本身不支持HA功能的应用程序提供调用的基础平台
haresource(heartbeat v1)
crm,haresource(heartbeat v2)
pacemaker(heartbeat v3)
rgmanager(RHCS)
crmd:提供管理集群资源的API (例如在heartbeat v1中haresource配置文件就是一个管理集群资源的接口)
GUI
CLI
Resource Type:
primitive(native)基本资源
group
clone
例如:
STONITH
Cluster Filesystem集群文件系统(gfs2/ocfs2)
dlm:Distributed Lock Manager分布式锁管理器
集群文件系统利用dlm机制通知各节点文件锁的状态
master/slave
drbd:distributed replaction block device分布式复制块设备
在一个集群服务中,如果定义了多个资源,默认情况下,资源是平均分配的;如果想让多个资源运行在同一个节点上,可以定义资源组或者通过排列约束完成
资源粘性:
资源是否倾向于留在当前节点
正数:倾向
负数:离开
资源约束:
location
colocation
order
使用crm进行集群资源管理时,由CIB保存集群资源的配置信息
CIB:Cluster Information Base集群信息库
xml格式
在ha.cf文件中启用crm后,haresource文件中定义的资源将会失效;如果想让crm读取haresource文件中定义的集群资源,可以执行/usr/lib/heartbeat中的haresource2cib.py脚本,该脚本会将haresource文件中定义的资源转换为crm可以读取的xml格式的文件保存到/var/lib/heartbeat/crm目录中
crmd进程默认监听在tcp 5560端口
配置基于crm的heartbeat
1、关闭server1和server2上的Heartbeat服务
# ssh server2 ‘service heartbeat stop‘
# service heartbeat stop
2、修改server1上的/etc/ha.d/ha.cf配置文件,并将其复制到server2上
在文件最后添加如下内容:
# vim /etc/ha.d/ha.cf
crm respawn
3、在server1和server2分别启动heartbeat服务
# service heartbeat start
# ssh server2 ‘service heartbeat start‘
查看机器的5560/tcp端口正常开启
# netstat -tnpl | grep :5560
tcp 0 0 0.0.0.0:5560 0.0.0.0:* LISTEN 23771/mgmtd
通过crm_mon监控命令可以查看到当前有两个集群节点,没有集群资源
# crm_mon
4、打开heartbeat gui界面,配置集群资源
在使用gui界面,需要输入hacluster用户名及密码,hacluster用户存在,需要手动设置密码
# echo "redhat" | passwd --stdin hacluster
# hb_gui &
输入要连接集群节点的IP地址及用户名、密码;
集群节点IP要写DC所在节点的IP,通过crm_mon命令可以查看到哪个节点是DC
连接成功后,界面如下所示:
定义vip和httpd服务资源,定义完毕后,可以看到两个资源是均衡分散在两个不同的节点上运行的
定义资源组webgroup,使vip和httpd资源同时运行在同一个节点上
删除httpd资源,在webgroup组中添加filesystem资源,自动挂载nfs的共享存储
定义排列约束将httpd与webstore资源放在一起
定义排列约束,将webip与webstore资源放在一起
定义顺序约束决定资源的启动顺序
当前资源运行在server2上,将server2转为standby后,资源会转移到server1上。当将server2转为active后,资源会自动转回到server2上,如果想让资源保留在server1上不转回,可以通过定义资源粘性完成
如果想让资源更倾向于运行在server2上,可以定义位置约束完成
配置基于heartbeat v2,crm实现MySQL高可用集群
/etc/my.cnf ---> /etc/mysql/mysql.cnf
--default-extra-file=
1、准备nfs服务器,建立逻辑卷/dev/myvg/mydata,并自动挂载到/mydata目录;在/mydata目录中建立数据目录data;并将data目录的属主、组分别设置为mysql用户 ,并/mysqldata目录通过nfs导出
建立mysql用户时,确保mysql用户的uid与gid一致
# lvscan
ACTIVE ‘/dev/myvg/mydata‘ [5.00 GiB] inherit
# groupadd -g 27 mysql
# useradd -u 27 -g 27 mysql
# chown -R myql.mysql /mydata/data
# cat /etc/exports
/webdata 172.16.100.0/24(ro)
/mydata 172.16.100.0/24(rw,no_root_squash)
# exportfs -rav
exporting 172.16.100.0/24:/mydata
exporting 172.16.100.0/24:/webdata
2、分别在server1和server2上挂载nfs目录,并测试本地mysql用户是否可以向data目录中创建文件
server1操作:
# groupadd -g 27 mysql
# useradd -g 27 -u 27 mysql
# mount -t nfs 172.16.100.253:/mydata /mydata
# su - mysql
# touch /mydata/data/a
测试创建文件没有问题后,卸载/mydata
# umount /mydata
使用同样的方法在server2上创建用户,并测试用户的写入权限
3、在server1和server2分别安装mysql
server1:
# yum install -y mysql-server
初始化mysql时,需要有数据目录,因此暂时先手动挂载nfs目录,初化化完毕后再次卸载
# mount -t nfs 172.16.100.253:/mydata /mydata
修改mysql配置文件,在配置文件中指定数据目录位置
# vim /etc/my.cnf
datadir= /mydata/data
# scp /etc/my.cnf server2:/etc/
# service mysqld start
# umount /mydata
# service mysqld stop
# chkconfig mysqld off
server2上同样安装mysql软件 ,不需要初始化;
4、配置集群资源
5、在nfs上安装mysql客户端工具,并测试连接mysql
# mysql -u root -p -h 172.16.100.252
连接成功后,任意创建测试数据库及表;切换集群节点,在nfs上同样可以正常连接mysql