简介

  说到高可用,我们可能会用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: SuccessRestaring 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-2Stack: corosyncCurrent DC: pcmk-2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum2 nodes and 0 resources configuredOnline: [ pcmk-1 pcmk-2 ]PCSD Status:pcmk-1: Onlinepcmk-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 0id  = 10.10.10.60status  = 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 corosyncMembership information
----------------------Nodeid      Votes Name1          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 configuredOnline: [ pcmk-1 pcmk-2 ]Full list of resources:PCSD Status:pcmk-1: Onlinepcmk-2: OnlineDaemon Status:corosync: active/enabledpacemaker: active/enabledpcsd: active/enabled

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

[root@pcmk-1 ~]# crm_verify -L -Verror: unpack_resources: Resource start-up disabled since no STONITH resources have been definederror: unpack_resources: Either configure some or disable STONITH with the stonith-enabled optionerror: 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 configuredOnline: [ pcmk-1 pcmk-2 ]Full list of resources:ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-1PCSD Status:pcmk-1: Onlinepcmk-2: OnlineDaemon Status:corosync: active/enabledpacemaker: active/enabledpcsd: 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 configuredOnline: [ pcmk-2 ]
OFFLINE: [ pcmk-1 ]Full list of resources:ClusterIP  (ocf::heartbeat:IPaddr2):   Started pcmk-2PCSD Status:pcmk-1: Onlinepcmk-2: OnlineDaemon Status:corosync: active/enabledpacemaker: active/enabledpcsd: 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是趋势。

corosync+pacemaker高可用相关推荐

  1. corosync+pacemaker高可用集群

    简介 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节 ...

  2. Corosync Pacemaker 高可用 Mariadb

    1.安装前准备  高可用集群一般需要配置时间同步.基于主机名互相通信.ssh的互信通信,Corosync Pacemaker 仅需要配置时间同步.基于主机名互相通信即可: yum install ch ...

  3. Centos7之pacemaker高可用安装配置

    目录 1.配置防火墙端口及关闭selinux. 3 2.配置hostname:... 3 3.时间同步(可忽略):... 4 4.双机互信(本次实验发现,不配置双机互信似乎也不会出现问题):... 4 ...

  4. Pacemaker+corosync实现高可用集群

    一:Pacemaker和corosync概述: Pacemaker(心脏起搏器),是一个集群管理资源器.但是其不提供心跳信息.pacemaker是一个延续的CRM.Pacemaker到了V3的版本以后 ...

  5. HA(高可用)集群之AIS(corosync),高可用httpd+NFS

    **高可用集群的定义** 高可用集群,High Availability Cluster,简称HA Cluster:集群就是一组计算机,它们作为一个整体向用户提供各种资源,集群里的host就是节点(n ...

  6. Pecemaker+Corosync+Haproxy高可用Openstack集群实战

    一.DRBD简介 DRBD的全称为:Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群. ...

  7. haproxy负载均衡+pcs高可用+fence

    实验环境: 母盘为redhat7.6的操作系统,快照出四台虚拟机 给真机和虚拟机都加上地址解析,如上图所示 通过真机的httpd服务给虚拟机搭建7.6的网络软件仓库 关闭防火墙,selinux状态设为 ...

  8. linux的mysql的高可用配置_mysql高可用实现

    说明:mysql高可用集群方案设计 server1 mysqld服务器    172.16.23.11 server2 mysqld服务器    172.16.23.12 数据存放 nfs 服务器   ...

  9. Haproxy + Pacemaker 实现高可用负载均衡(一)

    pacemaker+corosync+haproxy > 高可用架构由两个核心部分组成,一个是心跳检测,判断服务器是否正常运行:一个是资源转移,用来将公共资源在正常服务器和故障服务器之间搬动.两 ...

最新文章

  1. nginx css 304 导致图片丢失_Nginx 从入门到实战
  2. linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路
  3. redis命令_Redis 命令执行过程(下)
  4. 大数运算(5)——大数除法(取模、取余)
  5. (转)NAT与NAT穿透 原理
  6. xp查看计算机mac地址查询,mac地址查询,教你用dos命令查看mac地址的方法
  7. 多长的企业视频最受欢迎?小于60秒
  8. css--左右visibility建立 “collapse”值问题
  9. MAC 设置$PATH 关闭terminal后就失效 解决方案
  10. [转]关于内存泄露测试工具
  11. 30-40岁的程序员们,请把一些账算清楚,为过冬做准备(一)
  12. sssp-springmvc+spring+spring-data-jpa问题总结
  13. 2020年容器应用的新思考
  14. 高频功率放大器的设计实现
  15. wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
  16. 三级联动的数据库(贼多)
  17. 动能方案|RFID动物耳标解决方案
  18. 关于OpenCV中cv2.imwrite保存的图片是全黑色的解决方案
  19. 反恐精英java_使用java查询反恐精英1.6服务器信息
  20. 我的世界服务器控制台发消息,我的世界控制台指令大全 使用起来超方便

热门文章

  1. Android12 Launcher3 的一些修改记录
  2. SourceTree安装跳过注册
  3. 19年读100本书之第一本--《人生效率手册》
  4. 20154327 Exp9 Web安全基础
  5. 图像恢复(加噪与去噪)
  6. ubuntu安装更新命令
  7. 汉语中的词频及笔画数分布规律探析
  8. shell一键部署mysql
  9. 【统计学习方法】朴素贝叶斯
  10. EXCEL表格-复杂场景的数据提取(函数法)