个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_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. Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):5、Maven版本发布与后续版本更新(大结局)

    文章目录: Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1.JIRA账号注册 Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2.PGP ...

  2. 在Windows Server 2019中配置多元密码策略

    长久以来,微软活动目录中的账户只能配置同一个密码策略.上到管理员账户,下到普通用户的密码策略都是一样的.而且密码策略只能在域级别配置生效.OU级别的密码策略只会对该OU中计算机的本地账户生效.通常认为 ...

  3. Typora Markdown 安装包

    下载地址: 链接:https://pan.baidu.com/s/1wy0Ik95AjM5WjSC3nzOzqA 提取码:f26j 复制这段内容后打开百度网盘手机App,操作更方便哦 已更新至最新版0 ...

  4. 【疑难杂症】关于用pydotplus生成iris.pdf报错问题

    在使用刘建平老师博客中DecisionTreeClassifier实例时,遇到报错:InvocationException: GraphViz's executables not found 源代码如 ...

  5. vue3 的 ref、isRef、toRef、toRefs、toRaw 详细介绍

    ref.isRef.toRef.toRefs.toRaw 看着一堆类似的东西,一个头两个大,今天整理一篇文章详细介绍它们的功能及区别. 1.ref ref 属性除了能够获取元素外,也可以使用 ref ...

  6. Kubernetes里的Service是如何工作的

    Service是Kubernetes接入层的一种抽象资源,它为我们提供了一种固定的.统一的访问接口地址和负载均衡能力,这时可能会想到,当时使用docker-compose的时候,不存在Service概 ...

  7. Elastic Stack 8.0 再次创建enrollment token

    enrollment token 在第一个 Elasticsearch 启动后的有效时间为30分钟.超过30分钟的时间上述 token 将会无效. enrollment token分两个,一个是kib ...

  8. 24_Java8

    Java8 一. Java8概述 Java8(又称JDK1.8)是Java语言开发的一个主要版本. Oracle公司于2014年3月18日发布Java8 支持Lambda表达式 函数式接口 新的Str ...

  9. overflow 隐藏滚动条样式

    在使用overflow,属性值为auto或者scroll时,很多时候会有多余的滚动条在旁边,这时就非常影响观瞻,所以我们有时需要将滚动条隐藏掉. 今天就说两种我用到的隐藏滚动条的方法,如果有其他解决方 ...

  10. C语言下for循环的一点技巧总结

    for循环是普遍应用与各种计算机语言的一种循环方式. 一般情况下, for循环规则:for(条件一:条件二:条件三) 条件一为满足条件,也就是条件一为1时,进入这个for循环.条件二为循环条件,也就是 ...