#######pacemaker+corosync实现高可用集群#####
1 Pacemaker 只做资源管理器(CRM),底下的消息系统采用 corosync。
pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。(作为通信层和提供关系管理服务,心跳引擎,检测心跳信息)
Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。
1 corosync pacemaker
41 yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server1 ~]# cd /etc/corosync/
[root@server1 corosync]# ls
corosync.conf corosync.conf.example.udpu uidgid.d
corosync.conf.example service.d
[root@server1 corosync]# cp corosync.conf.example corosync.conf
[root@server1 corosync]# vim corosync.conf ##corosync的配置文件
##如果想让pacemaker在corosync中以插件方式启动,需要 在corosync.conf文件中加上如下内容:
49 /etc/init.d/corosync start
54 scp corosync.conf 172.25.79.4:/etc/corosync/
root@server1corosync]# tail -f /var/log/cluster/corosync.log ##开启服务后查看日志,确定服务配置没有错误
关于crm shell的使用
---crm可以显示并修改配置文件
---直接执行crm命令进行交互式修改配置文件,交互式输入的内容被记 录在配置文件中
---show 显示配置文件
---commit提交
---如果添加资源时出错,首先进入resource,将添加的资源stop,然后进 入cofigure,delete添加错误的资源
crmsh常用的子命令:
status:查看集群的状态信息
configure:配置集群的命令
node:管理节点状态
ra:配置资源代理
resource:管理资源的子命令,比如关闭一个资源,清除资源的当前状态(比如一些出错信息)
root@server2 ~]# crm ##crm命令进入交互式shell
crm(live)# configure ##进入configure,执行show我们就可以看到配置文件的内容
crm(live)configure# show
node server2
node server3
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2"
root@server2 ~]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=false
##因为在这里我们还没有对fence进行配置,先将stonith-enabled 设置为 false,表示资源不会迁移
crm(live)configure# commit
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.79.100 cidr_netmask=32 op monitor interval=30s
##添加vip资源,params 指定参数 op monitor 监控配置,interval指定执行操作的频率,单位:秒
crm(live)configure# commit ##提交
crm(live)configure# bye
查看;
[root@server1 corosync]# ip addd
Object "addd" is unknown, try "ip help".
[root@server1 corosync]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:ab:b0:2b brd ff:ff:ff:ff:ff:ff
inet 172.25.79.1/24 brd 172.25.79.255 scope global eth0
inet 172.25.79.100/24 brd 172.25.79.255 scope global secondary eth0
inet6 fe80::5054:ff:feab:b02b/64 scope link
valid_lft forever preferred_lft forever
当我们把节点1 给down掉,vip资源给4
crm(live)node# standby
但是当我们把节点一给恢复:
crm(live)node# online
发现资源不会回切:
这样避免了因资源接管导致的资源丢失
设置环境no-quorum-policy为ignore:
由于我们的corosync默认是启用stonith功能的,但是我们这里没有stonith设备,如果我们直接去配置资源的话,由于没有stonith功能,所以资源的切换并不会完成,所以要禁用stonith功能,现在我们的环境no-quorum-policy没有设置为ignore,在这种情况下,如果一个节点down掉,这个集群就无法正常工作,(如vip资源都不存在)因为默认对集群有健康检查,如果节点数小于2,便认为无法组成集群,该集群也就无法工作了。
所以为了避免两个节点中的一个节点down掉导掉导致整个集群无法正常提供资源(vip haproxy)
所以我们设置no-quorum-policy=ignore
测试查看:
我们在1上设置:
[root@server1 corosync]# crm
crm(live)# configure
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# show
node server1 \
attributes standby="off"
node server4
primitive vip ocf:heartbeat:IPaddr2 \
params ip="172.25.79.100" cidr_netmask="24" \
op monitor interval="30s"
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"
crm(live)configure# commit
crm(live)configure# quit
bye
然后把1down‘掉
[root@server1 corosync]# /etc/init.d/corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [ OK ]
Waiting for corosync services to unload:. [ OK ]
在 server4上查看集群的资源状态,发现vip依然可以使用
我们接下来做fence实验:
首先虚拟机上的fence是设备都需要真机来提供,所以得确保真机上有libvirtd服务,fence-virtd服务
安装软件:
参考文档:
http://blog.51cto.com/wjl19940429/1831431