个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_C.ying
CSDN主页️:念舒_C.ying

Pacemaker 通过资源代理程序(默认提供了 70 多种)和应用程序进行交互,在 Pacemaker集群中应用第三方资源代理程序也非常容易。OpenStack 高可用配置中使用了 Pacemaker 自带的资源代理程序(如 MySQL 数据库服务、虚拟 IP 地址等)、已有的第三方资源代理程序(如 RabbitMQ 服务)以及 OpenStack 资源代理程序(如 OpenStack 身份认证服务、磁盘镜

像服务)。

1.1 安装软件包

Pacemaker 中的节点服务器之间必须通过 Corosync 建立集群通信,需要安装以下软件包(以及它们的依赖软件包,通常软件包管理器将自动所有依赖软件包):

  • pacemaker (说明:crm 命令行工具需要另外单独下载。)
  • crmsh
  • corosync
  • cluster-glue
  • fence-agents (说明:只针对 Fedora 发行版;其它 Linux 发行版都使用 cluster-glue 软 件包中的fence 资源代理)
  • resource-agents

1.2 Corosync 基本配置

corosync 软件包安装之后,首先创建它的配置文件:/etc/corosync/corosync.conf 。大多数 Linux 发行版都会附带一份配置示例:corosync.conf.example,大致内容如下:
Corosync 配置文件(corosync.conf).

totem {
version: 2
# Time (in ms) to wait for a token
token: 10000
# How many token retransmits before forming a new
# configuration
token_retransmits_before_loss_const: 10
# Turn off the virtual synchrony filter
vsftype: none
# Enable encryption
secauth: on
# How many threads to use for encryption/decryption
threads: 0
# This specifies the redundant ring protocol, which may be
# none, active, or passive.
rrp_mode: active
# The following is a two-ring multicast configuration.
interface {
ringnumber: 0
bindnetaddr: 192.168.42.0
mcastaddr: 239.255.42.1
mcastport: 5405
}
interface {
ringnumber: 1
bindnetaddr: 10.0.42.0
mcastaddr: 239.255.42.2
mcastport: 5405
}
}
amf {
mode: disabled
}
service {
# Load the Pacemaker Cluster Resource Manager
ver: 1
name: pacemaker
}
aisexec {
user: root
group: root
}
logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}}
  1. token 是时间,单位为毫秒,在该配置项指定的时间内, Corosync 令牌应该完成在回环网络中的传输。如果令牌传输超时就会被丢弃,而一台节点服务 器连续出现token_retransmits_before_loss_const 令牌失效,将会被认为是无效节点。也就是说,一台节点服务器最长的无响应时间不能超对 token ×token_retransmits_before_loss_const 的乘积(单位毫秒),否则会被认为是无效节 点。token的默认值是 1000 (即 1 秒),同时默认的重试次数为 4 。默认配置的目标 是尽量缩短故障恢复时间,但是可能出现较多的“false alarm” 提醒,发生短期的网 络故障时也有可能导致失效切换。本处示例中的配置参数更安全一些,但是失效切换的时间会长一些。
  2. 当启用 secauth 时,Corosync 节点之间通信时会使用一个 128 位的密钥进行双向认 证。密钥存放在 /etc/corosync/authkey 文件中,可以通过 corosync-keygen 命令生 成。启用 secauth 后,集群通信数据也会进行加密。
  3. Cororsync 可以使用冗余的心跳网络(即多个 interface 配置),但是必须同时将 RRP 模式设置为除 none之外的其它值,建议使用 active 模式。
  4. 在推荐的网络接口配置中有几件事需要注意:
  • 所有心跳网络的 ringnumber 配置不能重复,最小值为 0 。
  • bindnetaddr 是心跳网卡 IP 地址对应的网络地址。示例中使用了两个子网掩码为 /24的 IPv4 网段。
  • Multicast groups (mcastaddr) must not be reused across cluster boundaries. In other words, no two distinct clusters should ever use the same multicast group. Be sure to select multicast addresses compliant with RFC 2365, “Administratively Scoped IP Multicast”.
  • Corosync 通信使用 UDP 协议,端口为 mcastport (接收数据)和 mcastport - 1 (发送数据)。配置防火墙时需要打开这两个端口。
  1. pacemaker 对应的 service 配置段,可以放在 corosync.conf ,也可以单独作为一个配置文件 /etc/corosync/service.d/pacemaker 。

注意
如果是在 Ubuntu 14.04 系统中运行 Corosync 2,那么应该将 stanza 对应的
service 配置段删除或者全部注释,以确保 Pacemaker 可以启动。

1.3 启动Corosync

Corosync 启动方法和普通的系统服务没有区别,根据 Linux 发行版的不同,可能是 LSB init脚本、upstart 任务、systemd 服务。不过习惯上,都会统一使用 corosync 这一名称:

  • /etc/init.d/corosync start (LSB)
  • service corosync start (LSB,另一种方法)
  • start corosync (upstart)
  • systemctl start corosync (systemd)
    使用以下两个工具检查 Corosync 连接状态。
    corosync-cfgtool ,执行时加上 -s 参数,可以获取整个集群通信的健康情况:
# corosync-cfgtool -s
Printing ring status.
Local node ID 435324542
RING ID 0
id = 192.168.42.82
status = ring 0 active with no faults
RING ID 1
id = 10.0.42.100
status = ring 1 active with no faults

corosync-objctl 命令可以列出 Corosync 集群的成员节点列表:

# corosync-objctl runtime.totem.pg.mrp.srp.members
runtime.totem.pg.mrp.srp.435324542.ip=r(0) ip(192.168.42.82) r(1) ip(10.0.42.100)
runtime.totem.pg.mrp.srp.435324542.join_count=1
runtime.totem.pg.mrp.srp.435324542.status=joined
runtime.totem.pg.mrp.srp.983895584.ip=r(0) ip(192.168.42.87) r(1) ip(10.0.42.254)
runtime.totem.pg.mrp.srp.983895584.join_count=1
runtime.totem.pg.mrp.srp.983895584.status=joined

status=joined标示着每一个集群节点成员。

1.4 启动 Pacemaker

Corosync 服务启动之后,一旦各节点正常建立集群通信,就可启动 pacemakerd( Pacemaker 主进程):

  • /etc/init.d/pacemaker start (LSB)
  • service pacemaker start (LSB,另一种方法)
  • start pacemaker (upstart)
  • systemctl start pacemaker (systemd)

Pacemaker 服务启动之后,会自动建立一份空白的集群配置,不包含任何资源。可以通过crm_mon 工具查看 Packemaker 集群的状态:

============
Last updated: Sun Oct 7 21:07:52 2012
Last change: Sun Oct 7 20:46:00 2012 via cibadmin on node2
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.1.6-9971ebba4494012a93c03b40a2c58ec0eb60f50c
2 Nodes configured, 2 expected votes
0 Resources configured.
============
Online: [ node2 node1 ]

1.5 设置集群基本属性

Pacemaker 启动之后,建议首先对集群基本属性进行配置。配置时,首先执行 crm 命令,然后输入 configure 进入配置菜单。也可以执行 crm configure 命令直接进入 Pacemaker 配置菜单。
然后,设置下列属性:

 property no-quorum-policy="ignore"
pe-warn-series-max="1000"
pe-input-series-max="1000"
pe-error-series-max="1000"
cluster-recheck-interval="5min"
  1. 对于 2 个节点的 Pacemaker 集群,集群属性 no-quorupolicy="ignore"是必须配置的,因为:如果强制集群满足合法节点数要求,当其中一个节点失效时,剩下的一个节点无法达到集群多数节点在线的要求,从而不能接管原来运行在失效节点上的集群资源。这种情况下,解决方法只能是忽略集群合法节点数要求。但是这一属性只能用于2 个节点的集群,对于 3 个节点及以上的集群来说,是不应该配置该属性的。需要注意的是,2 个节点的集群配置该属性之后,会出现脑裂( split-brain)的风险,这是因为当 2 个节点都在线但是互相无法通信时,2个节点都认为对方出现故障,从而尝试接管对方的集群资源。因此建议布署 3 个节点及以上的集群。
  2. 将 pe-warn-series-max、 pe-input-series-max 以及 pe-error-series-max 设置为 1000, 是为了让
    Pacemaker 保存更多 Policy Engine 的处理输入、错误以及警告信息。这些历 史记录对排除集群故障会有很大帮忙。
  3. Pacemaker 处理集群状况时使用事件驱动机制。但是某些 Pacemaker 操作只会在固定的时间间隔触发。该时间间隔可以配置,cluster-recheck-interval,默认值是 15 分钟。针对特定的集群,可以适当缩短这一间隔,如 5 分钟或者 3 分钟。

作完这些改变后,可以提交更新配置。

期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~

附专栏链接
【云原生 · Kubernetes】部署 kube-proxy 组件
【云原生 · Kubernetes】部署高可用kube-scheduler集群
【云原生 · Kubernetes】部署高可用 kube-controller-manager 集群
【云原生 · Kubernetes】runtime组件
【云原生 · Kubernetes】apiserver高可用

【OpenStack云平台】Packmaker 集群的更多相关文章

  1. 使用 Velero 跨云平台迁移集群资源到 TKE

    概述 Velero 是一个非常强大的开源工具,可以安全地备份和还原,执行灾难恢复以及迁移Kubernetes群集资源和持久卷,可以在 TKE 平台上使用 Velero 备份.还原和迁移集群资源,关于如 ...

  2. OpenStack云平台网络模式及其工作机制

    转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...

  3. 如何使用Rancher在OpenStack上创建K8S集群

    不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...

  4. 干货|带你体验一次原生OpenStack云平台发放云主机的过程

    一个执着于技术的公众号 1 前言 上一章节我们完成了OpenStack云平台的搭建工作,今天就带大家一起学习下如何发放一台云主机 点击查看:如何搭建一套OpenStack云平台 2 发放OpenSta ...

  5. 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置

    本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...

  6. 云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator

    使用 PGO 在 Kubernetes 上运行 Cloud Native PostgreSQL:来自 Crunchy Data 的 Postgres Operator! Cloud Native Po ...

  7. 朝花夕拾之--大数据平台CDH集群离线搭建

    body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...

  8. Centos7下ELK+Redis日志分析平台的集群环境部署记录

    之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...

  9. 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)

    这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...

  10. CDH构建大数据平台-配置集群的Kerberos认证安全

     CDH构建大数据平台-配置集群的Kerberos认证安全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当平台用户使用量少的时候我们可能不会在一集群安全功能的缺失,因为用户少,团 ...

随机推荐

  1. bean的作用域解析

    说明 意义 1.在Spring中,Bean的作用域可以通过scope属性来指定.    2.指定作用域的目的是 存储在此类单例bean的高速缓存中,并且对该命名bean的所有后续请求和引用都返回该高速 ...

  2. 多版本并发控制 MVCC

    介绍多版本并发控制 多版本并发控制技术(Multiversion Concurrency Control,MVCC) 技术是为了解决问题而生的,通过 MVCC 我们可以解决以下几个问题: 读写之间阻塞 ...

  3. JS 模块化 - 03 AMD 规范与 Require JS

    1 AMD 规范介绍 AMD 规范,全称 Asynchronous Module Definition,异步模块定义,模块之间的依赖可以被异步加载. AMD 规范由 Common JS 规范演进而来, ...

  4. MinIO分布式集群部署方式

    文章转载自:https://blog.51cto.com/u_10950710/4843738 关于分布式集群MinIo 单机Minio服务存在单点故障,如果是一个有N块硬盘的分布式Minio,只要有 ...

  5. kube-scheduler 调度调优

    文章转载自:https://www.kuboard.cn/learning/k8s-advanced/schedule/tuning.html kube-scheduler 是 Kubernetes ...

  6. 迁移一个仓库到新的Gitlab

    一般这种迁移,要注意旧仓库的提交历史等信息也要同步到新的仓库. 先使用如下命令克隆老的: git clone --bare git@gitlab.test1.com:f2e/test.git 新仓库创 ...

  7. python及第三方库交叉编译

    一.前言: 网上关于python的交叉编译的文章很多,但是关于python第三库的交叉编译的文章就比较少了,而且很多标题是第三方库的交叉编译,但是实际上用到的都是不需要交叉编译就能用的库,可参考性不强 ...

  8. 努力一周,开源一个超好用的接口Mock工具——Msw-Tools

    作为一名前端开发,是不是总有这样的体验:基础功能逻辑和页面UI开发很快速,本来可以提前完成,但是接口数据联调很费劲,耗时又耗力,有时为了保证进度还不得不加加班. 为了摆脱这种痛苦,经过一周的努力,从零 ...

  9. Docker容器获取宿主机信息

    最近在做产品授权的东西,开始宿主机为Window,程序获取机器硬件信息相对简单些,后来部署时发现各种各样的的环境问题,所有后来改用dokcer部署,docker方式获取宿主机信息时花了些时间,特此记录 ...

  10. 洛谷P6033 [NOIP2004 提高组] 合并果子 加强版 (单调队列)

    数据加强了,原来nlogn的复杂度就不行了...... 首先对原来的n个数排序(注意不能用快排),因为值域是1e5,所以可以开桶排序,开两个队列,一个存原来的n个数(已经满足单增),另一队列存两两合并 ...