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: 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高可用相关推荐
- corosync+pacemaker高可用集群
简介 高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节 ...
- Corosync Pacemaker 高可用 Mariadb
1.安装前准备 高可用集群一般需要配置时间同步.基于主机名互相通信.ssh的互信通信,Corosync Pacemaker 仅需要配置时间同步.基于主机名互相通信即可: yum install ch ...
- Centos7之pacemaker高可用安装配置
目录 1.配置防火墙端口及关闭selinux. 3 2.配置hostname:... 3 3.时间同步(可忽略):... 4 4.双机互信(本次实验发现,不配置双机互信似乎也不会出现问题):... 4 ...
- Pacemaker+corosync实现高可用集群
一:Pacemaker和corosync概述: Pacemaker(心脏起搏器),是一个集群管理资源器.但是其不提供心跳信息.pacemaker是一个延续的CRM.Pacemaker到了V3的版本以后 ...
- HA(高可用)集群之AIS(corosync),高可用httpd+NFS
**高可用集群的定义** 高可用集群,High Availability Cluster,简称HA Cluster:集群就是一组计算机,它们作为一个整体向用户提供各种资源,集群里的host就是节点(n ...
- Pecemaker+Corosync+Haproxy高可用Openstack集群实战
一.DRBD简介 DRBD的全称为:Distributed Replicated Block Device (DRBD)分布式块设备复制,DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群. ...
- haproxy负载均衡+pcs高可用+fence
实验环境: 母盘为redhat7.6的操作系统,快照出四台虚拟机 给真机和虚拟机都加上地址解析,如上图所示 通过真机的httpd服务给虚拟机搭建7.6的网络软件仓库 关闭防火墙,selinux状态设为 ...
- linux的mysql的高可用配置_mysql高可用实现
说明:mysql高可用集群方案设计 server1 mysqld服务器 172.16.23.11 server2 mysqld服务器 172.16.23.12 数据存放 nfs 服务器 ...
- Haproxy + Pacemaker 实现高可用负载均衡(一)
pacemaker+corosync+haproxy > 高可用架构由两个核心部分组成,一个是心跳检测,判断服务器是否正常运行:一个是资源转移,用来将公共资源在正常服务器和故障服务器之间搬动.两 ...
最新文章
- nginx css 304 导致图片丢失_Nginx 从入门到实战
- linux shell 宏定义_Linux系统和Shell命令行简介,走上数据分析之路
- redis命令_Redis 命令执行过程(下)
- 大数运算(5)——大数除法(取模、取余)
- (转)NAT与NAT穿透 原理
- xp查看计算机mac地址查询,mac地址查询,教你用dos命令查看mac地址的方法
- 多长的企业视频最受欢迎?小于60秒
- css--左右visibility建立 “collapse”值问题
- MAC 设置$PATH 关闭terminal后就失效 解决方案
- [转]关于内存泄露测试工具
- 30-40岁的程序员们,请把一些账算清楚,为过冬做准备(一)
- sssp-springmvc+spring+spring-data-jpa问题总结
- 2020年容器应用的新思考
- 高频功率放大器的设计实现
- wgc84 笛卡尔_WGS84椭球下的UTM坐标与Clarke80椭球下的兰勃特坐标转换方法研究
- 三级联动的数据库(贼多)
- 动能方案|RFID动物耳标解决方案
- 关于OpenCV中cv2.imwrite保存的图片是全黑色的解决方案
- 反恐精英java_使用java查询反恐精英1.6服务器信息
- 我的世界服务器控制台发消息,我的世界控制台指令大全 使用起来超方便