corosync+pacemaker实现web集群高可用
pacemaker:心脏起搏器,是一个集群资源管理器。它实现最大可用性群集服务的节点和资源级别故障检测和恢复使用首选集群基础设施提供的消息和成员能力。pacemaker是个资源管理器,不提供心跳信息。
heartbeat3.0拆分后的组成部分:
heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及他们之前通信。
cluster-glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即LRM和STONITH。
resource-agent:用来控制服务启停,监控服务器状态的脚本集合
pacemaker:也就是cluster resource manager(CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。
pacemaker特点
主机和应用程序级别的故障检测和恢复
几乎支持任何冗余配置
同时支持多种集群配置模式
配置策略处理法定人数损失
支持应用启动/关机顺序
支持多种模式的应用程序
可以测试任何故障或集群的群集状态
pacemaker内部结构
群集组件说明
stonithd:心跳系统
lrmd:本地资源管理守护进程。它提供了一个通用的接口支持的资源类型,直接调用资源代理。
pengine:策略引擎。
cib:群集信息库。
crmd:群集资源管理守护进程。主要消息代理的PEnine和LRM,还选举一个领导者DC统筹活动的集群
openais:OpenAIS的消息和成员层
heartbeat:心跳消息层,OpenAIS的一种替代
ccm:共识群集成员,心跳成员层
功能
CIB使用XML表示集群中所有资源的配置和当前状态,CIB的内容会被自动同步整个集群中,使用PEngine计算集群的理想状态,生成指令列表,然后输送给DC。
pacemaker集群中所有节点选举的DC节点作为主决策节点。如果当选DC的节点宕机,它会在所有的节点上迅速建立一个新的DC。DC将PEngine生成的策略传递给其他节点上的LRMD或CRMD通过集群消息传递基础结构。
当集群中有节点宕机PEngine重新计算理想策略。在某些情况下,可能有必要关闭节点,以保护共享数据或完成的资源回收,因为,pacemaker配置了stonithd设备。STONITH可以将其它节点爆头,通常是实现与远程电源断开。pacemaker会将STONITH设备配置为资源保存在CIB中,使他们可以更容易地监测资源失败或宕机。
实验操作centos6.X
拓扑图
安装配置
yum install corosync pacemaker -y
cd /etc/corosync/
cp corosync.conf.example corosync.conf
#修改配置文件
vim corosync.conf
compatibility: whitetank
totem { #指定心跳信息传递的参数
version: 2
secauth: off #是否开启安全认证
threads: 0 #开启线程的个数
interface {
ringnumber: 0 #标识一个通信接口
bindnetaddr: 10.10.0.0#指定心跳报文传输的网段
mcastaddr: 226.94.1.1 #指定心跳报文发送的组播地址
mcastport: 5405 #指定端口
ttl: 1 #生命周期,跨3层的话需要加大一点,不然对方接收不到,最大255
}
}
logging {
fileline: off
to_stderr: no #是否发送标准错误输出
to_logfile: yes#是否记录到日志文件中
to_syslog: no #是否记录到syslog,二者选其一即可
logfile: /var/log/cluster/corosync.log #日志文件的路径
debug: off #是否开启调试信息
timestamp: on #日志中是否协商时间戳
logger_subsys {
subsys: AMF #是否记录AMF
debug: off #是否开启AMF的调试信息
}
}
amf {
mode: disabled #AMF的状态
}
service { #corosync启动时也将pacemaker启动
ver:0
name: pacemaker
}
aisexec { #指定ais的用户和组的身份
user:root
group:root
}
#生成密钥
corosync-keygen
ll /etc/corosync/ #保证authkey的权限为400
#拷贝到node2
scp -p authkey corosync.conf node2:/etc/corosync/
#自从RH6之后就不再提供pacemaker的命令行工具,我们需要单独安装crmsh,它依赖pssh,另外可以使用pcs代替crmsh,下面会单独讲pcs使用。
rpm -ivh crmsh-2.1-1.6.i686.rpm pssh-2.3.1-4.1.i686.rpm
#两个节点都需要启动corosync
service corosync start
#查看corosync引擎是否正常启动 grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log #查看初始化成员节点通知是否正常发出 grepTOTEM /var/log/cluster/corosync.log#查看pacemaker是否正常启动grep pcmk_startup /var/log/cluster/corosync.log
#检查启动过程中是否有错误产生 grep ERROR: /var/log/cluster/corosync.log#在node2上启动服务并查看日志信息ssh node2 'service corosync start'crm_mon#查看集群状态crm start #查看集群状态
接下来要给两个节点定一下资源配置,所有的操作都是在crm命令下进行的。
#crm
crm(live)# 进入crm模式并且按两下Tab键补全
? cd configure exit history options ra site up
bye cib end help node quit resource status
crm(live)# help查看每个命令的意思
This is crm shell, a Pacemaker command line interface.
Available commands:
cib manage shadow CIBs
resource resources management
configure CRM cluster configuration
node nodes management
options user preferences
history CRM cluster history
site Geo-cluster support
ra resource agents information center
status show cluster status
help,? show help (help topics for list of topics)
end,cd,up go back one level
quit,bye,exit exit the program
crm(live)# configure
crm(live)configure#
? colocation exit load op_defaults refresh save user
bye commit fencing_topology location order rename schema verify
cd default-timeouts filter master primitive role show xml
cib delete graph modgroup property rsc_defaults simulate
cibstatus edit group monitor ptest rsc_template template
clone end help ms quit rsc_ticket up
collocation erase history node ra rsctest upgrade
crm(live)configure# order help 还可以用这种方式查看命令使用格式
usage: order <id> {kind|<score>}: <rsc>[:<action>] <rsc>[:<action>] ...
定义全局配置并提交
crm(live)#configure property stonith-enabled=false 禁止stonith设备正常情况下不应该禁止但是我们这里不考虑stonith设备
crm(live)#configure property no-quorum-policy=ignore 忽略法定投票因为节点就两个不可能超过半数票
crm(live)#
crm(live)# configure必须在configure目录下执行
crm(live)configure# verify
crm(live)configure# commit
INFO: apparently there is nothing to commit
INFO: try changing something firstcrm(live)configure#
资源类型:
添加资源之前必须要知道当前集群所支持的RA类型,corosync支持heartbeatLSB和ocf等类型的资源代理。目前较为常用的类型为LSB和OCF两类,STONITH类专为stonith设备而用。
查看当前集群所支持的RA类型列表
crm(live)# ra 在资源列表目录下
crm(live)ra# classes 查看资源的类型
lsb
ocf / heartbeat pacemaker
service
stonithcrm(live)ra#
查看OCF类型下的资源代理
crm(live)ra# list ocf
CTDB ClusterMon Dummy Filesystem HealthCPU HealthSMART IPaddr IPaddr2 IPsrcaddr LVM MailTo
Route SendArp Squid Stateful SysInfo SystemHealth VirtualDomainXinetd apache conntrackd controld
dhcpd ethmonitor exportfs mysql mysql-proxy named nfsserver nginx pgsql ping pingd
postfix remote rsyncd rsyslog slapd symlink tomcat crm(live)ra# list ocf heartbeat
CTDB Dummy Filesystem IPaddr IPaddr2 IPsrcaddr LVM MailTo Route SendArp Squid
VirtualDomainXinetd apache conntrackd dhcpd ethmonitor exportfs mysql mysql-proxy named nfsserver
nginx pgsql postfix rsyncd rsyslog slapd symlink tomcat
crm(live)ra#
为集群添加资源
IP资源名:node1,IP类型:ocfheartbeat,IPaddr IP:10.10.0.224,启动监控程序,检测到失败后的方式为重启服务。
crm(live)# configure
crm(live)configure# primitive node1ip ocf:heartbeat:IPaddr params ip=10.10.0.224 op monitor interval=30s timeout=20s on-fail=restart
crm(live)configure# verify #校验
crm(live)configure# commit
查看IP是否生效
ifconfig
用浏览器查看服务是否正常
停掉node1,看是否node2能够正常提供服务,这是实现高可用最重要的一步。
crm(live)# node standby 让当前节点自动成为备用节点
crm(live)# node standby
crm(live)# status
资源约束1、位置约束Location 定义资源更倾向运行在哪一个节点上:数值越大倾向性超高
inf无穷大 n -n -inf负无穷但凡有可能就不会运行在这个节点上2、排列约束Order 资源运行在同一节点的倾向性
inf -inf就代表那种老死不相往来的状态
3、顺序约束Colocation 定义资源的启动与关闭次序就如我们定义的三个资源他们的启动顺序应该是webip,webstore,webserver那就给它们定义一个顺序约束吧crm(live)configure# order webip_webstore_webserver mandatory: webip webstore webserver
crm(live)configure# verify
crm(live)configure# commit
页:
[1]