【OpenStack云平台】Packmaker 集群
Packmaker 集群
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
}}
- token 是时间,单位为毫秒,在该配置项指定的时间内, Corosync 令牌应该完成在回环网络中的传输。如果令牌传输超时就会被丢弃,而一台节点服务 器连续出现token_retransmits_before_loss_const 令牌失效,将会被认为是无效节点。也就是说,一台节点服务器最长的无响应时间不能超对 token ×token_retransmits_before_loss_const 的乘积(单位毫秒),否则会被认为是无效节 点。token的默认值是 1000 (即 1 秒),同时默认的重试次数为 4 。默认配置的目标 是尽量缩短故障恢复时间,但是可能出现较多的“false alarm” 提醒,发生短期的网 络故障时也有可能导致失效切换。本处示例中的配置参数更安全一些,但是失效切换的时间会长一些。
- 当启用 secauth 时,Corosync 节点之间通信时会使用一个 128 位的密钥进行双向认 证。密钥存放在 /etc/corosync/authkey 文件中,可以通过 corosync-keygen 命令生 成。启用 secauth 后,集群通信数据也会进行加密。
- Cororsync 可以使用冗余的心跳网络(即多个 interface 配置),但是必须同时将 RRP 模式设置为除 none之外的其它值,建议使用 active 模式。
- 在推荐的网络接口配置中有几件事需要注意:
- 所有心跳网络的 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 (发送数据)。配置防火墙时需要打开这两个端口。
- 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"
- 对于 2 个节点的 Pacemaker 集群,集群属性 no-quorupolicy="ignore"是必须配置的,因为:如果强制集群满足合法节点数要求,当其中一个节点失效时,剩下的一个节点无法达到集群多数节点在线的要求,从而不能接管原来运行在失效节点上的集群资源。这种情况下,解决方法只能是忽略集群合法节点数要求。但是这一属性只能用于2 个节点的集群,对于 3 个节点及以上的集群来说,是不应该配置该属性的。需要注意的是,2 个节点的集群配置该属性之后,会出现脑裂( split-brain)的风险,这是因为当 2 个节点都在线但是互相无法通信时,2个节点都认为对方出现故障,从而尝试接管对方的集群资源。因此建议布署 3 个节点及以上的集群。
- 将 pe-warn-series-max、 pe-input-series-max 以及 pe-error-series-max 设置为 1000, 是为了让
Pacemaker 保存更多 Policy Engine 的处理输入、错误以及警告信息。这些历 史记录对排除集群故障会有很大帮忙。 - 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 集群的更多相关文章
- 使用 Velero 跨云平台迁移集群资源到 TKE
概述 Velero 是一个非常强大的开源工具,可以安全地备份和还原,执行灾难恢复以及迁移Kubernetes群集资源和持久卷,可以在 TKE 平台上使用 Velero 备份.还原和迁移集群资源,关于如 ...
- OpenStack云平台网络模式及其工作机制
转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...
- 如何使用Rancher在OpenStack上创建K8S集群
不可否认的是,OpenStack仍然是可行的云操作系统,并且被全世界许多互联服务提供商使用.而Rancher是业界最为广泛使用的Kubernetes管理平台,通过简洁直观的GUI集中管理企业IT中的多 ...
- 干货|带你体验一次原生OpenStack云平台发放云主机的过程
一个执着于技术的公众号 1 前言 上一章节我们完成了OpenStack云平台的搭建工作,今天就带大家一起学习下如何发放一台云主机 点击查看:如何搭建一套OpenStack云平台 2 发放OpenSta ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 云原生 PostgreSQL 集群 - PGO:来自 Crunchy Data 的 Postgres Operator
使用 PGO 在 Kubernetes 上运行 Cloud Native PostgreSQL:来自 Crunchy Data 的 Postgres Operator! Cloud Native Po ...
- 朝花夕拾之--大数据平台CDH集群离线搭建
body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...
- Centos7下ELK+Redis日志分析平台的集群环境部署记录
之前的文档介绍了ELK架构的基础知识,日志集中分析系统的实施方案:- ELK+Redis- ELK+Filebeat - ELK+Filebeat+Redis- ELK+Filebeat+Kafka+ ...
- 阿里云搭建hadoop集群服务器,内网、外网访问问题(详解。。。)
这个问题花费了我将近两天的时间,经过多次试错和尝试,现在想分享给大家来解决此问题避免大家入坑,以前都是在局域网上搭建的hadoop集群,并且是局域网访问的,没遇见此问题. 因为阿里云上搭建的hadoo ...
- CDH构建大数据平台-配置集群的Kerberos认证安全
CDH构建大数据平台-配置集群的Kerberos认证安全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当平台用户使用量少的时候我们可能不会在一集群安全功能的缺失,因为用户少,团 ...
随机推荐
- KingbaseES rownum 与 limit 的 执行计划区别
数据准备 --创建基础数据表100W行 create table test07 as select * from (select generate_series(1, 1000000) id, (ra ...
- [BJDCTF2020]Easy MD5 WP
老样子 打开看看 你会发现 啥也没有 有一个输入框,随便输入看看 抓包发现跳转leveldo4.php 同时看到 hint 里面有select * from 'admin' where passwor ...
- 使用Watchtower实现Docker容器自动更新
前言:通常情况下我们手动更新容器的步骤比较繁琐,需要四个步骤: 1.停止容器 2.删除容器 3.检查镜像更新情况,更新镜像 4.重新启动容器 容器少还无所谓,但要是需要更新大量的容器就会工作量巨大. ...
- 彻底掌握Makefile(二)
彻底掌握Makefile(二) 前言 在前面的文章彻底掌握Makefile(一)当中,我们简要的介绍了一些常见的makefile使用方法,在本篇文章当中我们将继续介绍一些makefile当中的常见用法 ...
- 认识RocketMQ4.x架构设计
消息模型 单体的消息模型 RocketMQ消息模型跟其他的消息队列一样 都是 producer - > topic->consumer producer 生产消息 也就是发送者 topic ...
- 第二章:视图层 - 10:动态生成PDF文件
可以通过开源的Python PDF库ReportLab来实现PDF文件的动态生成. 一.安装ReportLab ReportLab库在PyPI上提供,可以使用pip来安装: $ pip install ...
- 对list集合中元素按照某个属性进行排序
test 为集合中的元素类型(其中包含i属性) Collections.sort(list,(test o1, test o2) -> { if (o1.getI() != o2.getI()) ...
- 整理一些Windows桌面运维常用的命令,并且整合成脚本
github地址:alittlemc/toy: 编写些脚本将运维经常所用到小玩意所集成在一起 (github.com) 持续更新! 前言 做过桌面运维的大佬们应该可以很明显感受到这份工作所需要的技能不 ...
- Spring笔记三
Spring-03 1. AOP 1.1 概念 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程.他是一种可以在不修改原来的核心代码的情况下给程序动态统一进 ...
- 洛谷P2341 [USACO03FALL / HAOI2006] 受欢迎的牛 G (tarjan缩点)
在本题中很明显,给你一个有向图,要用tarjan缩点. 缩点后,一头牛要受到所有牛的欢迎,那么该点的出度要为0,这是容易证明的:如果该点还有出度,比如a连向b,那么a不受到b的欢迎.所以我们要找出度为 ...