1.Pacemaker介绍
pacemaker(直译:心脏起搏器),是一个群集资源管理器。它实现最大可用性群集服务(亦称资源管理)的节点和资源级故障检测和恢复使用您的首选集群基础设施(OpenAIS的或Heaerbeat)提供的消息和成员能力。
它可以做乎任何规模的集群,并配备了一个强大的依赖模型,使管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。几乎任何可以编写脚本,可以管理作为心脏起搏器集群的一部分。
注意:pacemaker是个资源管理器,不是提供心跳信息的,因为它似乎是一个普遍的误解,也是值得的。pacemaker是一个延续的CRM(亦称Heartbeat V2资源管理器),最初是为心跳,但已经成为独立的项目。
2.pacemaker 特点
(1)主机和应用程序级别的故障检测和恢复
(2)几乎支持任何冗余配置
(3)同时支持多种集群配置模式
(4)配置策略处理法定人数损失(多台机器失败时)
(5)支持应用启动/关机顺序
(6)支持,必须/必须在同一台机器上运行的应用程序
(7)支持多种模式的应用程序(如主/从)
(8)可以测试任何故障或群集的群集状态
3.实现
使用corosync监控心跳,pacemaker时先资源转移,crmsh实现集群资源配置
使用fence检查节点健康状况,实行跳电保护
4.安装
yum install -y corosync pacemaker crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
5.配置
corosync 配置文件在 /etc/corosync/ 目录下:
mv corosync.conf.example corosync.conf ##有一个模板,直接拿来修改
.....
#totem定义集群内各节点间是如何通信的,totem本是一种协议,专用于corosync专用于各节点间的协议,totem协议是有版本的;
totem {
version: 2 #totme的版本,不可更改
secauth: off #安全认证,开启时很耗cpu
threads: 0 #安全认证开启后并行线程数
interface {
ringnumber: 0 #回环号码,若主机有多块网卡,避免心跳汇流
bindnetaddr: 172.25.12.0 #心跳网段,corosync会自动判断本地网卡上配置的哪个IP地址是属于这个网络的,并把这个接口作为多播心跳信息传递的接口
mcastaddr: 226.94.1.1 #心跳信息组播地址(所有节点必须一致)
mcastport: 5405 #组播端口
ttl: 1 #只条一跳,避免组播报文环路
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
#让pacemaker在corosync中以插件方式启动:
service{
ver:0 #版本号
name:pacemaker #模块名,启动corosync同时启动pacemaker
}
#运行身份
aisxec{
user:root
group:root
}
.....
6.生成多播信息密钥
corosync-keygen 生成传递心跳信息时的预共享密钥,生成密钥时需要用到 /dev/random 一共需要1024位的长度
# 生成后的密钥文件会在配置文件目录下自行生成一个authkey文件
注意:
/dev/random是 Linux系统下的随机数生成器,它会从当前系统的内存中一个叫熵池的地址空间中根据系统中断来生成随机数,加密程序或密钥生成程序会用到大量的随机数,就会出现随机数不够用的情况,random 的特性就是一旦熵池中的随机数被取空,会阻塞当前系统进程等待产生中断会继续生成随机数;
由于此处会用到1024位长度的密钥,可能会存在熵池中的随机数不够用的情况,就会一直阻塞在生成密钥的阶段,所以我们用 /dev/urandom 来代替它,/dev/urandom不依赖系统的中断,也就不会造成进程忙等待,但是数据的随机性也不高
mv /dev/{
random,random.bak}
ln -s /dev/urandom /dev/random
corosync-keygen #就不会卡住了
chmod 400 authkey # 密钥文件权限必须为 400 或 600
scp -p authkey corosync.conf server7:/etc/corosync/
scp -p authkey corosync.conf server8:/etc/corosync/
# 将刚生成的密钥与配置文件复制到第其他节点上,并保存权限;
7.service corosync start #所有节点启动服务
8.crm_mon #查看集群信息
Last updated: Fri May 26 20:27:03 2017
Last change: Fri May 26 19:19:16 2017 via cibadmin on server6
Stack: classic openais (with plugin)
Current DC: server8 - partition with quorum
Version: 1.1.10-14.el6-368c726
3 Nodes configured, 3 expected votes #三个节点,三票
0 Resources configured #资源数
Online: [ server6 server7 server8 ] #在线节点
9.日志文件
/var/log/cluster/corosync.log
启动完成后要在各个节点上进行一系列的确认,看各组件工作是否正常:
grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
#确保 Cluster Engine 工作是否正常
grep "TOTEM" /var/log/cluster/corosync.log
# 查看初始化成员节点通知是否正常发出
grep pcmk_startup /var/log/cluster/corosync.log
# 查看 pcmk(pacemaker简写) 插件工作是否正常
grep ERROR /var/log/cluster/corosync.log
# 检查启动过程中是否有错误产生
# 日志出现了哪些错误,如果出现提示pacemaker不应该以插件方式运行直接忽略即可;
# 可能会提示我们PE工作不正常;让我们用 crm_verify -L -V 来查看
10.crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
# corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用
# 即没有 STONITH 设备,此处实验性目的可以忽略;
11.crm
(1)在crm管理接口所做的配置会同步到各个节点上
(2)任何操作都