前言:heartbeat虽然为Linux-HA开源项目发布的高可靠应用环境集群服务的核心软件,但是corosync作为后期之秀越来越受到人们的青睐,越来越多的人在构建新的HA应用选择使用corosync。下面我就就个人对它的理解简单的介绍一下关于corosync的应用。
一、corosync、pacemaker各自是什么?
corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层,扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;
pacemaker是一个开源的高可用资源管理器,位于HA集群架构中资源管理、资源代理这么个层次,它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。通常它与corosync的结合方式有两种:
1、pacemaker作为corosync的插件运行;
2、pacemaker作为独立的守护进程运行;
二、用corosync+pacemaker实现一个web高可用的测试实例
A、安装配置corosync服务:
1、准备工作:
同步各node的时间;
建立双机互信,实现互信登陆;
规划资源:webip:192.168.1.100 webserver:nginx (web服务默认不要开机启动)
2、安装corosync+pacemaker:
# sudo apt-get install corosync pacemaker
# sudo vim /etc/default/corosync
# START=yes 改成yes
3、配置corosync:
totem {
version: 2 #版本号
secauth: on #是否开启安全认证
threads: 0 #多少个线程,0 为无限制
interface {
ringnumber: 0 #循环传递次数
bindnetaddr: 192.168.1.0 #绑定的网卡地址(在那个网卡上传递心跳信息)
mcastaddr: 226.94.14.12 #组播地址
mcastport: 5405 #组播端口
ttl: 1
}
}
logging {
fileline: off
to_stderr: no #是否发送标准错误输出(建议关闭)
to_logfile: yes #是否开启日志
to_syslog: no #是否开启系统日志,to_logfile开启了就没必要多记录一份
logfile: /var/log/cluster/corosync.log #日志存放路径,须手动创建目录
debug: off
timestamp: on #日志中是否记录时间戳(可以关闭,如果两台机器时间是同步的,记录日志的时候需要向内核询问时间,增加了系统调用)
logger_subsys {
subsys: AMF
debug: off
}
}
service { #添加支持使用Pacemaker
ver: 0
name: pacemaker
}
aisexec { #是否使用openais,有时可能会用到
user: root
group: root
}
4、生成authkey,并复制文件至另一个节点
# sudo corosync-keygen
# sudo scp -p /etc/corosync/authkey corosync.conf <user>@<cluster-node-ip>:/home/<user>
注意复制的时候保持文件权限(用户名、用户组)
5、检测NetworkManager是否开机启动,如果是关闭
# sudo chkconfig --list network-manager
# sudo chkconfig network-manager off
# sudo service network-manager stop
查看开启启动项管理工具
# sudo apt-get install sysv-rc-conf
# sudo sysv-rc-conf
B、启动检查corosync服务情况:
1、启动corosync
# sudo mkdir /var/log/cluster 在/var/log/创建cluster文件夹用来存放log
# sudo service corosync start
# sudo tail /var/log/cluster/corosync.log 日志
查看corosync引擎是否正常启动:
# sudo grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
查看初始化成员节点通知是否正常发出:
# sudo grep TOTEM /var/log/cluster/corosync.log
检查启动过程中是否有错误产生。下面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务;此处可安全忽略。
# sudo grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
查看pacemaker是否正常启动:
# sudo grep pcmk_startup /var/log/cluster/corosync.log
# ps auxf
# sudo netstat -tunlp
# sudo netstat -tunlp | grep corosync
C、配置资源(crm):
1、
# sudo crm configure show 查看配置
# sudo crm resource status 查看所有资源状态
# sudo crm resource status webip 查看某一资源
# sudo crm resource stop webip 停止某一资源
# sudo crm resource start webip 启动某一资源
由于双节点,没有配置stonith设备,所以关闭stonith及忽略quorum,否则资源无法转移
# sudo crm configure property stonith-enabled=false
# sudo crm configure property no-quorum-policy=ignore
2、定义资源
# sudo crm
# configure
# help 查看定义帮助
# 定义一个IP
# primitive webip ocf:heartbeat:IPaddr params ip = 192.168.1.100
# show
# verify 检查语法
# commit 提交(可以定义多个资源一起提交)
# sudo crm configure primitive webserver lsb:nginx
3、定义组资源
# sudo crm configre
# help group
# group <组名> <资源...>
# group webservice webip webserver
4、定义资源位置约束
# sudo crm
# configure
# location <名> <资源> {倾向运行的节点node_pref|rules}
# location webservice_prefer_node2 webservice 500: ubuntu-002
5、定义资源顺序约束
# sudo crm
# configure
# help order
# order <id名> score-type: <rsc>[:<action>] <rsc>[:<action>]
# order webserver_after_webip mandatory: webserver webip
# delete webserver_after_webip 删除
# order webip_before_webserver mandatory: webip webserver
# show xml
6、定义资源排列约束
# sudo crm
# configure
#
# colocation webip_with_webserver inf: webip webserver
7、定义资源监控
# sudo crm
# resource stop webip #停用资源
# configure
# delete webip #删除资源重新定义
# primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.100 op monitor intrtval=20 timeout=20 on-fail=restart #监控时间跟超时间不要小于默认时间否则会报警
# verify
# commit
# primitive webserver lsb:nginx op monitor interval=20 timeout=20 on-fail=restart
三、测试
web服务运行在node1上,切换服务在node1上执行 sudo crm node standby,效果如下图: