Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用
一、介绍
高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别。
Heartbeat到了v3版本后,拆分为多个子项目:Heartbeat、cluster-glue、Resource Agent、Pacemaker。
Heartbeat:只负责维护集群各节点的信息以及它们之前通信。
Cluster-glue:当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
Resource Agent :用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。
pacemaker:原Heartbeat 拆分出来的资源管理器,用来管理整个HA的控制中心,客户端通过pacemaker来配置管理监控整个集群。它不能提供底层心跳信息传递的功能,它要想与对方节点通信需要借助底层(新拆分的heartbeat或corosync)的心跳传递服务,将信息通告给对方。
Pacemaker 配置文件比较不太容易修改,可以使用命令行界面的crmsh、pcs和图形化界面pygui、hawk等进行管理,看个人喜好。
Heartbeat 和 Corosync 的区别:
1、经过安装heartbeat 体验,Heartbeat 配置比较简单,主要修改三个文件即可: ha.cf、 haresources、 authkeys ,但是在支持多节点的时候不知道个人配置问题,还是其他,脑裂严重(查看很多博客说只支持2个节点),并且自带的服务脚本较少,很多服务监控脚本需要自己编写。
2、Heartbeat只能为所有的资源配置一个主服务,而corosync则允许为不同的资源组配置不同的主服务 ,corosync支持多个节点的集群,支持把资源进行分组,按照组进行资源的管理,设置主服务,自行进行启停 。
3、管理资源的灵活性:在corosync中,其会自行处理配置文件的同步问题,heartbeat则无此功能
二、环境
1、系统:CentOS Linux release 7.4.1708 (Core) 三台
2、hosts (三个节点修改):
10.6.32.20 ceph1
10.6.32.21 ceph2
10.6.32.22 ceph3
3、时间同步 chrony
4、关闭防火墙 firewalld 和 Selinux。
5、配置节点ssh信任(controller1 节点操作)。
# ssh-keygen (生成默认证书即可)
# ssh-copy-id 127.0.0.1
# 将 .ssh 文件拷贝覆盖到其他节点。
# scp -r .ssh/ root@ceph2:/root/
# scp -r .ssh/ root@ceph3:/root/
三、配置安装
1、安装(all-node)
# yum install -y pacemaker pcs psmisc policycoreutils-python
2、查看服务是否已安装
# rpm -qa | grep corosync
# rpm -qa | grep pacemaker
# rpm -qa | grep pcs
# rpm -qa | grep psmisc
# rpm -qa | grep policycoreutils-python

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

3、启动 pcs 服务,并设置开机自启动(all-node)
# systemctl start pcsd.service
# systemctl enable pcsd.service

创建了一个软连接。
4、设置 hacluster密码
安装组件生成的hacluster用户,用来本地启动pcs进程,因此我们需要设定密码,每个节点的密码相同。

5、验证集群节点(其中一个节点测试)
# pcs cluster auth ceph1 ceph2 ceph3

6、生成corosync 配置文件 (其中一个节点操作)
# pcs cluster setup --name openstack_cluster ceph{1,2,3}

建立集群:openstack_cluster,生成corosync文件 /etc/corosync/corosync.conf
7、启动集群并设置开机自启动 (其中一个节点操作)
# pcs cluster start --all (# all 参数标识所有节点生效,不加all 本地生效,也可以指定某节点:pcs cluster start ceph2)
# pcs cluster enable --all

8、查看集群
1、查看 集群状态
# pcs status

Online: ceph1 ceph2 ceph3 存活, 0 resources configured:还没有配置资源 ,有一个 WARNING 报错。
2、查看corosync
# corosync-cfgtool -s

# corosync-cmapctl | grep members #查看成员信息

# pcs status corosync #查看状态

3、查看 pacemaker
# ps axf |grep pacemaker

9、检查配置文件
# crm_verify -L -V

为保证集群数据安全,pacemaker默认启动STONITH 。因没有配置,先禁用
# pcs property set stonith-enabled=false # 禁用 STONITH
# crm_verify -L -V

10、添加虚拟IP(VIP)
# pcs resource create VIP ocf:heartbeat:IPaddr2 ip=10.6.32.254 cidr_netmask=32 op monitor interval=30s

添加成功,目前虚拟IP在 ceph1 节点上,通过 ip add list 可查看。(虚拟ip:10.6.32.254 资源名称:VIP,检测时间:30s/次)
# ip add list

11、httpd 高可用
1、开启 apache status url 监控页
# vim /etc/httpd/conf.d/status.conf
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from all
</Location>
2、关闭 httpd 服务,添加httpd 资源时会重新启动http服务,如果不关闭,会报错。
# systemctl stop httpd
3、添加 httpd 资源 到集群。
# pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=30s

创建了一个httpd 的集群资源 WebSite,主节点在 ceph2 上。检测页:http://localhost/server-status, 检测时间:30s/次。 但是有一个新的问题,虚拟IP在ceph1 上, httpd资源在 ceph2 上,会导致客户端无法访问。如果VIP在任何节点都不存在,那么WebSite也不能运行。
4、设置 资源检测超时时间
# pcs resource op defaults timeout=120s
# pcs resource op defaults

5、绑定服务资源和 VIP 资源,始终保持在一个节点上
# pcs constraint colocation add WebSite with VIP INFINITY

12、浏览器访问测试

成功!!!!
OK,博客到此处,已经搞定需求。
五、后期维护+知识扩展
1、上节提到创建 服务资源, ocf:heartbeat:apache 这是是用来告诉pacemaker,第一个部分ocf,指明了这个资源采用的标准(类型)以及在哪能找到它。第二个部分标明这个资源脚本的在ocf中的名字空间,在这个例子中是heartbeat。最后一个部分指明了资源脚本的名称。
2、查看 pacemaker 默认支持的资源
1、查看资源采用的标准类型
# pcs resource standards

2、查看可用的ocf资源提供者
# pcs resource providers

3、查看特定标准下所支持的脚本,例:ofc:heartbeat 下的脚本
# pcs resource agents ocf:heartbeat

3、手动切换某节点到 standby 状态及取消standby 状态
# pcs cluster standby ceph1

# pcs cluster unstandby ceph1
4、防止资源在节点恢复后立即迁移
# pacemaker默认所有节点的stickiness都为0
# pcs resource defaults resource-stickiness=100
# pcs resource defaults #查看

5、重启资源
# pcs resource restart resource_name
6、查看帮助
# pcs resource --help
7、清理集群错误日志
# pcs resource cleanup
8、在集群节点小于2个,无法仲裁时,忽略仲裁,保证业务提供(集群所有节点均正常时配置)
# pcs property set no-quorum-policy=ignore
Centos 7 下 Corosync + Pacemaker + psc 实现 httpd 服务高可用的更多相关文章
- Centos 7 下 Corosync + Pacemaker + psc + HA-proxy 实现业务高可用
一.介绍: 1.本博客Corosync + Pacemaker + psc + HA-proxy 实现业务高可用,以httpd 服务实现高可用为例. 2.架构思路 a.三台web 节点,功能:全部安装 ...
- Centos 7 下 Corosync + Pacemaker + DRBD + psc + crmsh 实现 mysql 服务高可用
一.介绍 高可用,大家可能会想到比较简单的Keepalived,或者更早一点的 heartbeat,也可能会用到 Corosync+Pacemaker,那么他们之间有什么区别. Heartbeat到了 ...
- corosync+pacemaker and drbd实现mysql高可用集群
DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...
- Corosync+pacemaker实现集群的高可用
一.Corosync和pacemaker的了解: Corosync是集群管理套件的一部分,他在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等.也就是说,corosync是Mess ...
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...
- 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】
CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2 ...
- CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡(转)
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...
- RHEL 5.4下部署LVS(DR)+keepalived实现高性能高可用负载均衡
原文地址:http://www.cnblogs.com/mchina/archive/2012/05/23/2514728.html 一.简介 LVS是Linux Virtual Server的简写, ...
随机推荐
- a标签自执行点击事件
//html <a href='http://www.baidu.com' ><button id='sss'>百度</button></a> //原生 ...
- Python基础2 列表 字典 集合
本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...
- Spring.net介绍及MVC中应用
Spring.net两大核心内容: IOC(控制反转) 传统的面相对象思维模式是对象A依赖对象B,对象B的实例化和调用都在对象A中发生,一旦对象B中发生变化,对象A也要随之变化,这样使得程序间行程了紧 ...
- Mysql索引,有哪几种索引,什么时候该(不该)建索引;SQL怎么进行优化以及SQL关键字的执行顺序
索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 1.按照索引列值的唯一性,索引可分为唯一索引和非唯一索引 非唯一索引:B树索引 crea ...
- 浅谈 String 的 hashCode() 方法
Java 中 hash 值的含义 hash 值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率,如HashMap.HashTable等: 如果两个对象相同,那么这两个对象的 hash ...
- 机器学习进阶-图像基本操作-边界补全操作 1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 进行边界的补零操作 2.cv2.BORDER_REPLICATE(边界补零复制操作)...
1.cv2.copyMakeBoder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE) 参数说明: i ...
- DLL 调试(C# 调用 C++ 的 DLL)
操作步骤: (1) C++ 的 DLL 项目中设置断点: (2) C# 工程右键[属性]->[调试]->[启动调试器]中选中[启动本机代码调试]. 注:要调试 DLL 必须有 DLL 的源 ...
- 各种Queue分析
Queue主要方法的区别: 抛出异常 返回特殊值 插入 add(e)插入成功则返回true,没有可用空间则IllegalStateException offer(e) 移除 remove(e)获取 ...
- jquery接触初级----jquery 对象和Dom对象
1. DOM 对象,每一份DOm对象(Document Object model)都可以表示成一棵树,一个基本的网页如下: <!DOCTYPE html> <html lang=&q ...
- unity 向量赋值 传引用?传值?
unity中,Vector2.Vector3之间的任意赋值都是传值 Vector2 v1; ,); v1=v2; v2.x=; Debug.Log(v1);//output: (2.0, 2.0) D ...