corosync+pacemaker高可用

简介

  说到高可用,我们可能会用heartbeat和keepalived,也可能会用corosync+pacemaker,但他们之间有什么区别呢?我们在此主要谈下heartbeat和corosync+pacemaker之间的渊源。
  Heartbeat到了v3版本后,拆分为多个子项目,其中pacemaker就是拆分出来的资源管理器。Heartbeat 3.0拆分之后的组成部分:为:
1.Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它们之前通信,被称为基础组件;(注意与corosync区别)
2.cluster-glue相当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
3.Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。
4.Pacemaker也就是Cluster Resource Manager (简称CRM),用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层(新拆分的heartbeat或corosync)的心跳传递服务,将信息通告给对方。
另,pacemaker管理资源的工具由命令行界面的crmsh、pcs和图形化界面pygui、hawk等进行管理,我们使用pcs链进行资源管理。
  通过以上,我们了解了pacemaker的由来,下面我们再来看下集群底层新拆分的heartbeat和corosync之间的区别:
1.配置文件的版本管理:Heartbeat只能为所有的资源配置一个主服务,而corosync则允许为不同的资源组配置不同的主服务
2.管理资源的灵活性:在corosync中,其会自行处理配置文件的同步问题,heartbeat则无此功能
3.分组管理:Heartbeat只支持2个节点,而corosync则支持多个节点的集群,支持把资源进行分组,按照组进行资源的管理,设置主服务,自行进行启停
4.配置复杂度:Heartbeat非常容易进行配置,第一次配置可能只需要几分钟,而Corosync由于有一定的复杂度则需要一点耐心
  因此,一般来说都是选择corosync来进行心跳的检测,搭配pacemaker的资源管理系统来构建高可用的系统,下面我们就来介绍下corosync+pacemaker构建高可用系统。

环境说明

IP hostname 系统 VIP
10.10.10.60 pcmk-1 Centos7.2 10.10.10.62
10.10.10.61 pcmk-2 Centos7.2 10.10.10.62

注:为方便测试,两台服务器上都关闭防火墙及selinux

安装配置

1.配置双机信任

#配置双机信任
#pcmk-1
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub root@10.10.10.61:/root/.ssh/authorized_keys
#pcmk-2
ssh-keygen -t rsa
scp /root/.ssh/id_rsa.pub root@10.10.10.60:/root/.ssh/authorized_keys

2.安装集群组件

#pcmk-1,pcmk-2
yum install -y pacemaker pcs psmisc policycoreutils-python

安装完毕后,会生成一个hacluster用户,供集群使用。

3.启动pcs并设为开机启动
pcs是pacemaker的命令行管理工具,用来管理同步各个节点的corosync的配置文件

#pcmk-1,pcmk-2
systemctl start pcsd.service
systemctl enable pcsd.service
ln -s '/usr/lib/systemd/system/pcsd.service' '/etc/systemd/system/multi-user.target.wants/pcsd.service'

4.为hacluster设置密码
安装组件生成的hacluster用户,用来本地启动pcs进程,因此我们需要设定密码,每个节点的密码相同。

#pcmk-1,pcmk-2
passwd hacluster
Changing password for user hacluster.
New password: 
Retype new password: 
Sorry, passwords do not match.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

5.验证节点(在其中一个节点即可)

#pcmk-1或pcmk-2
[root@pcmk-1 ~]# pcs cluster auth pcmk-1 pcmk-2
Username: hacluster
Password: 
pcmk-2: Authorized
pcmk-1: Authorized

6.生成corosync配置文件(在其中一个节点即可)

#pcmk-1或pcmk-2
[root@pcmk-1 ~]# pcs cluster setup --name mycluster pcmk-1 pcmk-2
Shutting down pacemaker/corosync services...
Redirecting to /bin/systemctl stop  pacemaker.service
Redirecting to /bin/systemctl stop  corosync.service
Killing any remaining services...
Removing all cluster configuration files...
pcmk-1: Succeeded
pcmk-2: Succeeded
Synchronizing pcsd certificates on nodes pcmk-1, pcmk-2...
pcmk-2: Success
pcmk-1: Success

Restaring pcsd on the nodes in order to reload the certificates...
pcmk-2: Success
pcmk-1: Success

以上建立一个名为mycluster集群,生成并同步corosync配置文件,生成的文件为/etc/corosync/corosync.conf
注意:若在另一个节点生成需要重新验证节点。

7.启动集群并设为自启动(在其中一个节点即可)

#all参数会使每个节点都启动,若没有all则只在本地生效
[root@pcmk-1 ~]# pcs cluster start --all
pcmk-1: Starting Cluster...
pcmk-2: Starting Cluster...

[root@pcmk-1 ~]# pcs cluster enable --all
pcmk-1: Cluster Enabled
pcmk-2: Cluster Enabled

8.查看集群状态

[root@pcmk-1 ~]# pcs cluster status
Cluster Status:
 Last updated: Fri Jan 15 10:05:43 2016     Last change: Fri Jan 15 09:56:15 2016 by hacluster via crmd on pcmk-2
 Stack: corosync
 Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
 2 nodes and 0 resources configured
 Online: [ pcmk-1 pcmk-2 ]

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

其中Online表示pcmk-1,pcmk-2节点的两个主机存活,pcsd status表示两个节点上的pcsd进程存活。

9.查看corosync相关状态

[root@pcmk-1 ~]# corosync-cfgtool -s
Printing ring status.
Local node ID 1
RING ID 0
    id  = 10.10.10.60
    status  = ring 0 active with no faults
#检验corosync成员
[root@pcmk-1 ~]# corosync-cmapctl | grep members
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(10.10.10.60) 
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(10.10.10.61) 
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined
#检查corosync状态
[root@pcmk-1 ~]# pcs status corosync

Membership information
----------------------
    Nodeid      Votes Name
         1          1 pcmk-1 (local)
         2          1 pcmk-2

10.查看pacemaker进程

[root@pcmk-1 ~]# ps axf |grep pacemaker
22445 pts/0    S+     0:00          \_ grep --color=auto pacemaker
22105 ?        Ss     0:00 /usr/sbin/pacemakerd -f
22106 ?        Ss     0:00  \_ /usr/libexec/pacemaker/cib
22107 ?        Ss     0:00  \_ /usr/libexec/pacemaker/stonithd
22108 ?        Ss     0:00  \_ /usr/libexec/pacemaker/lrmd
22109 ?        Ss     0:00  \_ /usr/libexec/pacemaker/attrd
22110 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pengine
22111 ?        Ss     0:00  \_ /usr/libexec/pacemaker/crmd

11.查看整个集群所有组件的状态

[root@pcmk-1 ~]# pcs status
Cluster name: mycluster
WARNING: no stonith devices and stonith-enabled is not false
Last updated: Fri Jan 15 10:10:59 2016      Last change: Fri Jan 15 09:56:15 2016 by hacluster via crmd on pcmk-2
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 0 resources configured

Online: [ pcmk-1 pcmk-2 ]

Full list of resources:


PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

12.检查配置文件是否正确

[root@pcmk-1 ~]# 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

为保证数据安全性,pacemaker默认启动stonith,但是我们没有配置stonith,因此报错。我们先暂时禁用stonith,等会再配置stonith

#禁用stonith,再次检查配置文件正常
[root@pcmk-1 ~]# pcs property set stonith-enabled=false
[root@pcmk-1 ~]# crm_verify -L

13.添加虚拟ip资源–vip(漂移ip)

[root@pcmk-1 heartbeat]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=10.10.10.62 cidr_netmask=32 op monitor interval=30s

在这里我们以10.10.10.62作为浮动IP,名字为ClusterIP 并且告诉集群每30秒检查它一次。
其中ocf: heartbeat:IPaddr2。这告诉Pacemaker三件事情,第一个部分ocf,指明了这个资源采用的标准(类型)以及在哪能找到它。第二个部分标明这个资源脚本的在ocf中的名字空间,在这个例子中是heartbeat。最后一个部分指明了资源脚本的名称。

#运行下面的命令来获得可用的资源
[root@pcmk-1 resource.d]# pcs resource standards
ocf
lsb
service
systemd
stonith
#运行下面的命令来获得可用的ocf资源提供者
[root@pcmk-1 ~]# pcs resource providers
heartbeat
openstack
pacemaker
#如果你想看特定一个ocf资源提供者的所有可用资源代理
[root@pcmk-1 resource.d]# pcs resource agents ocf:heartbeat
CTDB
Delay
Dummy
Filesystem
IPaddr
IPaddr2
IPsrcaddr
LVM
MailTo
........

14.查看IP资源状态

[root@pcmk-1 heartbeat]# pcs status
Cluster name: mycluster
Last updated: Fri Jan 15 10:38:04 2016      Last change: Fri Jan 15 10:37:58 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 1 resource configured

Online: [ pcmk-1 pcmk-2 ]

Full list of resources:

 ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-1

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

ok,我们的IP资源已经可用,我们可以通过VIP进行访问某些应用了。
下面我们来模拟下故障迁移。

故障迁移

1.停掉pcmk-1节点

[root@pcmk-1 heartbeat]# pcs cluster stop pcmk-1
pcmk-1: Stopping Cluster (pacemaker)...
pcmk-1: Stopping Cluster (corosync)...
[root@pcmk-1 heartbeat]# pcs status
Error: cluster is not currently running on this node

2.查看VIP是否漂移到pcmk-2节点

[root@pcmk-2 ~]# pcs status
Cluster name: mycluster
Last updated: Fri Jan 15 10:42:41 2016      Last change: Fri Jan 15 10:37:59 2016 by root via cibadmin on pcmk-1
Stack: corosync
Current DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum
2 nodes and 1 resource configured

Online: [ pcmk-2 ]
OFFLINE: [ pcmk-1 ]

Full list of resources:

 ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-2

PCSD Status:
  pcmk-1: Online
  pcmk-2: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

其中pcmk-1节点已经offline,但是pcmk-1的pcsd进程还活着,因此为online,此时VIP已经漂移到pcmk-2

注意:当pcmk-1重新启动后,会自动加入集群中,但是vip不会再次漂移到pcmk-1;但是pacemaker老版本中,vip会重新漂移到恢复后的节点。

3.防止资源在节点恢复后迁移
资源在节点恢复后再迁移到原节点往往需要一点时间,此时会无法对外提供服务;当在数据库间迁移时,会需要更长的时间。但是我们可以通过stickiness来解决,pacemaker默认所有节点的stickiness都为0,我们最通常更改默认情况下的stickiness就足够了

[root@pcmk-1 ~]# pcs resource defaults resource-stickiness=100
[root@pcmk-1 ~]# pcs resource defaults
resource-stickiness: 100

总结

  从cososync+pacemaker与未拆分heartbeat比,配置的确比较麻烦,但是从管理、扩展、应用等方面来说,前者还是非常方便的,没有那么多局限性;从长远来看cososync+pacemaker是趋势。

你可能感兴趣的:(HA高可用)