corosync+ pacemaker + crmsh 实现高可用集群

Corosync + pacemaker + crmsh 配置高可用集群:

HA:高可用集群是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。高可用集群的应用系统有多样化发展趋势,用途也越来越多样化,同时带来了配置及可操作性方面的复杂性,因此选择好的高可用软件至关重要
高可用集群,英文原文为High Availability Cluster,简称HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。高可用性集群(HA cluster)是指如单系统一样地运行并支持(计算机)持续正常运行的一个主机群

主机:

172.25.64.1 server1
   172.25.64.2 server2

主机环境:

rhel6.5,corosync pacemaker crmsh
两台主机时间同步 可以进行ssh通信

Corosync简介:

  Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件。

Pacemaker:

 pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。

两台主机分别安装corosync pacemaker

配置yum源:
[rhel-source]
name=Red Hat Enterprise Linux releasever basearch - Source
baseurl=http://172.25.64.250/rhel6.5/Server
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.64.250/rhel6.5/LoadBalancer
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.64.250/rhel6.5/ScalableFileSystem
gpgcheck=0
31,1 Bot

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.64.250/rhel6.5/HighAvailability
gpgcheck=0

  
yum install corosync pacemaker -y

然后修改配置文件:

compatibility: whitetank

totem { ##totem定义集群内节点之间是如何通信的
version: 2
secauth: off ##关闭安全认证
threads: 0 ##安全认证开启并行线程数
interface {
ringnumber: 0
bindnetaddr: 172.25.64.0 ##绑定心跳网段
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
}

service{
ver:0
name:pacemaker ##pacemaker模块名 让pacemaker在corosync中以插件的方式启动,启动coroysnc的同时启动pacemaker
}

生成密钥

[root@server2 corosync]# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey. ##密钥所放位置

同时把密钥传给另外一个节点 scp suthkey [email protected]:/etc/corosync

然后两个节点同时启动corosync服务

/etc/init.d/corosync start

查看各个节点的状态:

用crm_mon命令查看

Last updated: Fri May 26 23:37:13 2017
Last change: Fri May 26 23:21:13 2017 via crm_attribute on server1
Stack: classic openais (with plugin)
Current DC: server1 - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
2 Resources configured

Online: [ server1 server2 ]

Crmsh:

  pacemaker本身只是一个资源管理器,我们需要一个接口才能对pacemker上的资源进行定义与管理,而crmsh即是pacemaker的配置接口,从pacemaker 1.1.8开始,crmsh 发展成一个独立项目,pacemaker中不再提供。crmsh提供了一个命令行的交互接口来对Pacemaker集群进行管理,它具有更强大的管理功能,同样也更加易用,在更多的集群上都得到了广泛的应用

从rpm.pbone.net 上面下载 crmsh 因为要解决软件依赖性,所以还需要下载一个pssh包

然后yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm -y ##安装对pacemaker进行管理的配置接口软件包

将其中一个节点停止,资源就会消失而不是转移到另一个节点上,因为当前是两节点的集群,任何一个节点损坏,其它节点就没办法进行投票,status 中就会变成 WITHOUT quorum,而此时要解决这个问题如下:

[root@server1 corosync]# crm
crm(live)# configure
pcrm(live)configure# property no-quorum-policy=ignore ##配置仲裁节点,不具备法定票数的时候忽略
crm(live)configure# commit
crm(live)configure# cd ..
crm(live)# status
Last updated: Fri May 26 23:05:28 2017
Last change: Fri May 26 23:05:21 2017 via cibadmin on server1
Stack: classic openais (with plugin)
Current DC: server1 - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
1 Resources configured

Online: [ server1 ]
OFFLINE: [ server2 ] ##即便有一个节点不在线,资源也会生效

定义vip:

crm(live)configure# primitive webip IPaddr params ip=172.25.64.100 op monitor interval=10s timeout=20s ##多场时间监控一次,监控超时时长是20s
crm(live)configure# verify
crm(live)configure# commit

Online: [ server1 ]
OFFLINE: [ server2 ]

webip (ocf::heartbeat:IPaddr): Started server1 ##定义的webip资源 在server1上面运行
然后分别在两台主机上面安装httpd服务,发布不同的发布文件:

定义httpd资源:

crm(live)# configure
crm(live)configure# pr
primitive property
crm(live)configure# primitive webserver lsb:httpd on monitor interval=30s timeout=15s
ERROR: syntax in primitive: on monitor interval=30s timeout=15s
crm(live)configure# primitive webserver lsb:httpd op monitor interval=30s timeout=15s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# cd
crm(live)# status
Last updated: Fri May 26 23:15:51 2017
Last change: Fri May 26 23:15:47 2017 via cibadmin on server1
Stack: classic openais (with plugin)
Current DC: server1 - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
2 Resources configured

Online: [ server1 server2 ]

webip (ocf::heartbeat:IPaddr): Started server1 ##webip在server1上面运行
webserver (lsb:httpd): Started server2 ##webserver资源在server2上面运行

我们需要把两个资源绑定在一起 所以我们采用colocation 定义协同约束

crm(live)configure# colocation webserver_with_webip inf: webserver webip ##定义约束,两个资源必须在一起
crm(live)configure# show
node server1 \
attributes standby=”off”
node server2 \
attributes standby=”off”
primitive webip ocf:heartbeat:IPaddr \
params ip=”172.25.64.100” \
op monitor interval=”10s” timeout=”20s”
primitive webserver lsb:httpd \
op monitor interval=”30s” timeout=”15s”
colocation webserver_with_webip inf: webserver webip
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# order webip_before_webserver mandatory: webip webserver

测试:在浏览器里面输入172.25.64.100进行测试,这个时候会出现server1主机的发布文件,如果我们把server1节点设置为standby 再重新测试,就会跳转到server2的发布文件页面了

                                               运维:康阿敏
                                               [email protected]

你可能感兴趣的:(corosync+ pacemaker + crmsh 实现高可用集群)