个人名片:
因为云计算成为了监控工程师‍
个人博客:念舒_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. MySQL 不同隔离级别,都使用了什么锁?

    大家好,我是树哥. 在上篇文章,我们聊了「MySQL 啥时候会用表锁,啥时候用行锁」这个问题.在文章中,我们还留了一个问题,即:如果查询或更新时的数据特别多,是否从行锁会升级为表锁?此外,还有朋友留言 ...

  2. LFS(Linux From Scratch)构建过程全记录(四):最后的准备

    写在前面 本章将进行一系列的环境配置 目录创建 在LFS中创建文件目录 我们可以用以下的指令来创建一些基础的目录,并进行连接 mkdir -pv $LFS/{etc,var} $LFS/usr/{bi ...

  3. winfrom程序只启动一个exe进程

    private static void KillProcess() { Process process1 = Process.GetCurrentProcess(); //获得当前计算机系统内某个进程 ...

  4. CentOS7.x安装VNC

    VNC需要系统安装的有桌面,如果是生产环境服务器,安装时使用的最小化安装,那么进行下面操作安装GNOME 桌面. # 列出的组列表里有GNOME Desktop. yum grouplist #安装 ...

  5. 第一章:模型层 - 9:查询集API

    本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = ...

  6. Elasticsearch:理解 mapping 中的 null_value

    转载自:https://elasticstack.blog.csdn.net/article/details/114266732 null 不能被索引或搜索. 当字段设置为 null(或空数组或 所有 ...

  7. 企业微信报警中关于markdown的用法

    官方文档地址:https://open.work.weixin.qq.com/api/doc/90002/90151/90853#markdown消息 请求方式:POST(HTTPS) 请求地址: h ...

  8. JS 模块化- 04 CMD 规范与 Sea JS

    1 CMD 规范介绍 CMD: Common Module Definition, 通用模块定义.与 AMD 规范类似,也是用于浏览器端,异步加载模块,一个文件就是一个模块,当模块使用时才会加载执行. ...

  9. 老杜MySql——34道作业题

    老杜MySql链接:https://www.bilibili.com/video/BV1Vy4y1z7EX?p=132 本次随笔主要来源于老杜MySql讲解视频后面的作业题,加上个人的一些理解,以及整 ...

  10. VScode开发STM32/GD32单片机-MakeFile工程JlinkRTT配置

    本次使用开发板为STM32F401CCU6,使用CubeMX配置一个Makefile工程 配置时候为内部时钟 工程选择makefile工程类型 只生成需要的文件 用VSCode打开后显示很多波浪线 选 ...