【转载】高可用(HA)集群之pacemaker+corosync

news/2024/9/17 3:41:28

转载地址:https://blog.51cto.com/liheng1815/5637598

高可用(HA)集群之pacemaker+corosync方案

 

0x00  概念

在传统Linux集群种类中,主要分了三类:

​ 一类是LB(负载均衡)集群,这类集群的作用是对用户流量做负载均衡,让其后端每个real-server都能均衡的处理一部分请求;

​ 其次就是HA(高可用)集群,所谓ha集群就是高可用集群,这类集群的作用是对集群中的单点做高可用,就是在发生故障时,能够及时的将故障转移,从而使故障修复时间最小;HA集群的特点是在众多台节点上,各个空闲节点会一直盯着工作节点,工作节点也会基于多播或广播的方式把自己的心跳信息发送给其他空闲节点,一旦工作节点的心跳信息在一定时间内空闲节点没有收到,那么此时就会触发资源抢占,先抢到资源的成为新的工作节点,而其他节点又会一直盯着新的工作节点,直到它挂掉,然后再次触发资源抢占;这类集群的特点就是一个节点工作,其他节点看着它工作,一旦工作节点挂了,立刻会有其他节点上来顶替它的工作;

​ 最后就是HP集群,HP集群主要用于在复杂计算中场景中,把多台server的算力综合一起,对复杂计算要求比较高的环境中使用;在生产环境中常见的LB和HA集群较多

​ 高可用架构由两个核心部分组成,一个是心跳检测,判断服务器是否正常运行;一个是资源转移,用来将公共资源在正常服务器和故障服务器之间搬动。两个结合起来使用,可以实现对高可用架构的自动管理。

CoroSync是运行于心跳层的开源软件; PaceMaker是运行于资源转移层的开源软件。 使用corosync监控心跳及投票,pacemaker实现资源转移,crmsh实现集群资源配置;同时使用fence检查节点健康状况,实行跳电保护,防止脑裂发生。

0x01 集群规划

VIP:192.168.91.230

主机名 安装软件 ip地址
Pacemaker-Mysql-01 pacemaker、corosync、mariadb-server、crmsh 192.168.91.168
Pacemaker-Mysql-02 pacemaker、corosync、mariadb-server 192.168.91.169
Pacemaker-Mysql-03 pacemaker、corosync、mariadb-server 192.168.91.167
nfs-datashare-server nfs、nfs-utils 192.168.91.170

 

 

 

 

 

mariadb与nfs-server安装忽略

0x02 corosync+pacemaker的安装配置

安装配置前操作(所有节点)

以其中一节点操作为例

1、时间同步

2、关闭selinux和系统防火墙

3、主机名解析

安装配置

# 安装
# yum install pacemaker -y
# 安装pacemaker时会依赖corosync
# 配置
# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
# cat /etc/corosync/corosync.conf | grep -Ev "#"
totem {version: 2crypto_cipher: aes256crypto_hash: sha1interface {ringnumber: 0bindnetaddr: 192.168.91.0mcastaddr: 239.255.1.1mcastport: 5405ttl: 1}
}logging {fileline: offto_stderr: noto_logfile: yeslogfile: /var/log/cluster/corosync.logto_syslog: yesdebug: offtimestamp: onlogger_subsys {subsys: QUORUMdebug: off}
}quorum {provider: corosync_votequorum
}nodelist {node {ring0_addr: Pacemaker-Mysql-01nodeid: 1}node {ring0_addr: Pacemaker-Mysql-02nodeid: 2}node {ring0_addr: Pacemaker-Mysql-03nodeid: 3}
}

对于totem这个配置段主要用于配置totem协议的相关属性,其中version表示使用的版本,默认是2这个不用更改,保持默认就好;下面的crypto_cipher和crypto_hash这两项用于配置是否启用加密,这里默认是none,这意味这只要是在相同多播域内,它都会识别成集群成员;所以为了安全建议启用集群事务消息通信加密;默认情况crypto_cipher支持aes256, aes192, aes128 and 3des这些加密算法,随便配置一个加密算法即可;crypto_hash支持md5, sha1, sha256, sha384,sha512这些加密算法,随便选一个即可;如果启用以上两项加密,我们需要在/etc/corosync/目录下创建一个密钥文件,且权限是600或着400的权限;并且集群各节点的密钥文件必须相同.

创建密钥文件

# corosync-keygen

同步配置及认证文件

# 复制/etc/corosync/corosync.conf 和authkey文件到其他节点

启动corosync和pacemaker

# systemctl start corosync && systemctl enable corosync && systemctl status corosync
# 使用corosync-cfgtool命令来查看当前节点的初始化信息
# systemctl start pacemaker && systemctl enable pacemaker && systemctl status pacemaker

pacemaker默认不需要怎么配置就可以启动,启动以后,我们可以通过管理接口来配置。

# crm_mon

至此corosync+pacemaker高可用集群就搭建好了,接下来我们在其上托管mysql数据库实现高可用。

0x03  corosync+pacemaker高可用集群的配置工具crmsh安装和使用

配置yum源

[root@Pacemaker-Mysql-01 ~]# cat /etc/yum.repos.d/crmsh.repo 
[network_ha-clustering_Stable]
name=Stable High Availability/Clustering packages (CentOS_CentOS-7)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/repodata/repomd.xml.key
enabled=1

安装crmsh配置工具

# yum install crmsh -y

crmsh命令使用

crm有两种使用方式,一种是交互式,直接在命令行敲crm命令就可以进入交互式shell;另外一种是非交互式,在crm 命令后面直接加要执行的命令;

# 将db-vip资源从Pacemaker-Mysql-02节点迁出
# resource ban db-vip Pacemaker-Mysql-02# crm(live)# configure show type:location
location cli-prefer-mysql-cluster mysql-cluster role=Started -inf: Pacemaker-Mysql-02
# 可以看到我们把db-vip从Pacemaker-Mysql-02迁出以后,它会在配置文件中创建一条资源对节点倾向性的规则,并且指明db-vip对我们ban指定的节点的倾向性为负无穷,这意味着只要有其他节点可以运行,对应资源绝不运行在Pacemaker-Mysql-02上;由于db-vip同mariadb-server、db-store都同属mysql-cluster这个组,所以对应组内的资源也会跟着db-vip的迁移而迁移;# 清除资源迁移过程中出现的错误信息
crm(live)# resource cleanup db-vip
# 默认情况我们指定资源没有在组内,它默认只会清除我们指定资源相关的状态信息,从上面截图可以看到,我们指定资源在组内,所以它将组内所有资源的状态信息一并清除了;# 清除指定资源的约束关系
crm(live)# configure show type:location
location cli-ban-mariadb-server-on-Pacemaker-Mysql-01 mariadb-server role=Started -inf: Pacemaker-Mysql-01
crm(live)# resource clear mariadb-server
INFO: Removed migration constraints for mariadb-server
crm(live)# configure show type:location
crm(live)# 
# 可以看到我们指定资源的位置约束关系被清除掉了;其实我们在执行手动迁移资源时,它默认会在配置信息中给我们创建位置约束配置,clear相当于对迁移产生的约束配置做清除# 显示资源运行的位置
crm(live)# resource locate  mariadb-server# migrate/move:将指定资源手动迁移至指定节点
crm(live)# resource  migrate mariadb-server Pacemaker-Mysql-03
INFO: Move constraint created for mariadb-server to Pacemaker-Mysql-03
crm(live)# status
Stack: corosync
Current DC: Pacemaker-Mysql-01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Mon Aug 15 16:07:41 2022
Last change: Mon Aug 15 16:07:34 2022 by root via crm_resource on Pacemaker-Mysql-013 nodes configured
3 resource instances configuredOnline: [ Pacemaker-Mysql-01 Pacemaker-Mysql-02 Pacemaker-Mysql-03 ]Full list of resources:Resource Group: mysql-clusterdb-store    (ocf::heartbeat:Filesystem):    Started Pacemaker-Mysql-03mariadb-server    (systemd:mariadb):    Started Pacemaker-Mysql-03db-vip    (ocf::heartbeat:IPaddr2):    Started Pacemaker-Mysql-03
crm(live)# configure show type:location
location cli-prefer-mariadb-server mariadb-server role=Started inf: Pacemaker-Mysql-03
# 执行migrate/move操作它都会在配置文件中生成一条位置约束的配置;并且会配置对迁往的节点的倾向性为正无穷# 资源启停及状态
# resource stop/start/restart/status db-vip# 删除资源
crm(live)# status
Stack: corosync
Current DC: Pacemaker-Mysql-01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Mon Aug 15 16:16:18 2022
Last change: Mon Aug 15 16:15:49 2022 by root via crm_resource on Pacemaker-Mysql-013 nodes configured
3 resource instances configuredOnline: [ Pacemaker-Mysql-01 Pacemaker-Mysql-02 Pacemaker-Mysql-03 ]Full list of resources:Resource Group: mysql-clusterdb-store    (ocf::heartbeat:Filesystem):    Started Pacemaker-Mysql-03mariadb-server    (systemd:mariadb):    Started Pacemaker-Mysql-03db-vip    (ocf::heartbeat:IPaddr2):    Started Pacemaker-Mysql-03crm(live)# configure delete 
1                       3                       db-store                mariadb-server          
2                       cib-bootstrap-options   db-vip                  mysql-cluster           
crm(live)# configure delete mysql-cluster
crm(live)# status
Stack: corosync
Current DC: Pacemaker-Mysql-01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Mon Aug 15 16:16:36 2022
Last change: Mon Aug 15 16:16:33 2022 by root via cibadmin on Pacemaker-Mysql-013 nodes configured
3 resource instances configuredOnline: [ Pacemaker-Mysql-01 Pacemaker-Mysql-02 Pacemaker-Mysql-03 ]Full list of resources:db-store    (ocf::heartbeat:Filesystem):    Started Pacemaker-Mysql-03mariadb-server    (systemd:mariadb):    Starting Pacemaker-Mysql-01db-vip    (ocf::heartbeat:IPaddr2):    Started Pacemaker-Mysql-02# 删除了组资源以后,对应资源会重新分散的运行到各个节点,如果有位置约束的,会根据位置约束去运行,没有位置约束会负载均衡的方式分散在集群各节点# 设置指定资源对节点的倾向性设置db-store对Pacemaker-Mysql-01的倾向性为100分configure location db-store_01 db-store 100: Pacemaker-Mysql-01设置db-store对Pacemaker-Mysql-01的倾向性为正无穷configure location db-store_01 db-store inf: Pacemaker-Mysql-01

配置托管mysql服务

定义托管VIP

# 关闭STONITH选项
#  crm --> configure --> property stonith-enabled=false
# 如果只有两节点,需要关闭仲裁机制
#  crm --> configure --> property set no-quorum-policy=ignore

# 配置vip
crm(live)configure# primitive db-vip ocf:heartbeat:IPaddr params ip="192.168.91.230" cidr_netmask="24" broadcast="192.168.91.255" nic="ens32" iflabel="ens32:1"
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show

定义托管mariadb

crm(live)configure# primitive mysql-server systemd:mariadb op monitor interval=30s timeout=100s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show

定义托管nfs共享盘

crm(live)configure# primitive db-store ocf:heartbeat:Filesystem params device="nfs-datashare-server:/data" directory="/opt" fstype="nfs" op monitor timeout=40s interval=10s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show

定义组,把多个资源归并到一组

crm(live)configure# group mysql-cluster db-store mysql-server db-vip
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node 1: Pacemaker-Mysql-01 \attributes standby=off
node 2: Pacemaker-Mysql-02 \attributes standby=off
node 3: Pacemaker-Mysql-03 \attributes standby=off
primitive db-store Filesystem \params device="nfs-datashare-server:/data" directory="/opt" fstype=nfs \op monitor timeout=40s interval=10s
primitive db-vip IPaddr \params ip=192.168.91.230 cidr_netmask=24 broadcast=192.168.91.255 nic=ens32 iflabel="ens32:1" \op monitor interval=10s timeout=20s
primitive mysql-server systemd:mariadb \op monitor interval=30s timeout=100s
group mysql-cluster db-store mysql-server db-vip
property cib-bootstrap-options: \have-watchdog=false \dc-version=1.1.23-1.el7_9.1-9acf116022 \cluster-infrastructure=corosync \stonith-enabled=false \last-lrm-refresh=1660276927

可以看到db-store mysql-server db-vip三个资源全部迁移在了 Pacemaker-Mysql-01 节点上。查看在Pacemaker-Mysql-01节点是否绑定了VIP、mariadb运行状态及共享盘挂载。

故障测试

1、关闭节点Pacemaker-Mysql-01

关闭Pacemaker-Mysql-01节点或者设置为standby后,使用crm_mon命令实时监控资源迁移过程。

结论:被托管的资源会自动被迁移至其他任意一个节点(由corosync服务进行投票选举)

2、手动关闭mysql服务

手动关闭mariadb服务后,集群在设置的时间内检测到mariadb服务异常后,会自动尝试拉起mariadb服务。

以上通过pacemaker+corosync实现了mysql服务故障自动转移。

pacemaker+corosync之pcs安装使用

1、各集群节点安装程序包

# yum install pacemaker pcs psmisc policycoreutils-python -y

2、启动各节点pcsd并设置开启自启动

# systemctl enable pcsd --now

3、集群各节点设置hacluster用户密码

# echo "111111" | passwd --stdin hacluster

4、用户及密码认证

# pcs cluster auth Pacemaker-Mysql-01 Pacemaker-Mysql-02 Pacemaker-Mysql-03

5、创建集群

# pcs cluster setup --name my_cluster Pacemaker-Mysql-01 Pacemaker-Mysql-02 Pacemaker-Mysql-03

6、启动集群并设置开机自启动

# pcs cluster start --all
# pcs cluster enable --all
# pcs cluster status --all

7、查看集群状态

# pcs cluster status

8、关闭stonith

# pcs property set stonith-enabled=false# 集群如果为两台,需要再关闭仲裁机制
# pcs property set no-quorum-policy=ignore
# 验证集群配置信息,没有提示表示正常
# crm_verify -LV

9、配置vip资源

# pcs resource create db-vip ocf:heartbeat:IPaddr2 ip="192.168.91.230" nic="ens32" cidr_netmask="24" op monitor timeout=10s

10、设置共享文件存储资源

# pcs resource create db-store  ocf:heartbeat:Filesystem device="nfs-datashare-server:/data" directory="/opt" fstype="nfs" op monitor timeout=40s

11、设置mariadb资源

# pcs resource create mariadb-server systemd:mariadb op monitor timeout=5s

12、设置资源组

# pcs  resource group add mysql-cluster db-store mariadb-server db-vip

13、常用命令

# 查看已配置的资源
# pcs resource
# 查看可用资源
# pcs resource list
# 查看某个具体资源
# pcs resource describe ocf:heartbeat:IPaddr2
# 查看集群配置
# pcs config
# 将节点设置为standby状态
# pcs  node standby Pacemaker-Mysql-02
# 手动迁移资源至其他节点
提示:前边crmsh里执行手动迁移资源,它默认会在配置界面给我们添加一条位置约束,pcs也是一样的套路,它也会给配置界面添加一条位置约束,可以使用pcs config或者pcs constraint查看到相关约束信息
# pcs resource move mysql-cluster Pacemaker-Mysql-01
# 创建位置约束
# pcs constraint location add cli-prefer-mysql-cluster mysql-cluster Pacemaker-Mysql-01 100
# pcs constraint location add mysql-cluster_with_Pacemaker-Mysql-03 mysql-cluster Pacemaker-Mysql-03 INFINITY
# 清除约束
# pcs constraint location remove mysql-cluster_with_Pacemaker-Mysql-03
# 显示资源对集群各节点的倾向性分数
# crm_simulate -sL

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/32003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Android系统启动流程

在Android中系统的启动流程是一个经常会被问到的问题,那么下面我们通过一张图来说明一下 从上面的图片中可以看到它的一个启动流程. 1.BootLoader首先,当我们点击电源开关后,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行,这时执行的就是…

Linux-文件特殊权限

day13今日安排默写昨日作业讲解文件权限篇综合知识脑图特殊权限(了解)linux提供的12个特殊权限 默认的9位权限 rwx rwx rwx还有三个隐藏的特殊权限,如下 suid 比如 /usr/bin/passwdsgidsbit 特殊权限对照表类别 suid sgid sticky字符表示 S S T出现位置 用户权限位x 用户组…

Golang初学:文件操作,标准库

go version go1.22.1 windows/amd64 Windows 11 + amd64 x86_64 x86_64 GNU/Linux ---序章 读取文件内容,写入新文件(可能存在、也可能不存在)。相关标准库io fs os path filepath Show Code func CopyFile() {// 测试文件拷贝var fsrc, fdst stringvar start time.Timefsr…

OpenPCDet训练自定义数据

官网也提供了步骤,这里详细介绍下训练自己数据的过程以及中间遇到的一些问题。训练模型这里采用PointRCNN,具体的介绍参考:https://www.cnblogs.com/xiaxuexiaoab/p/18033887 一、准备数据集 数据集这一块我们需要准备好原始点云数据、物体目标标注文件、以及训练和验证对应…

PPO-KL散度近端策略优化玩cartpole游戏

其实KL散度在这个游戏里的作用不大,游戏的action比较简单,不像LM里的action是一个很大的向量,可以直接用surr1,最大化surr1,实验测试确实是这样,而且KL的系数不能给太大,否则惩罚力度太大,action model 和ref model产生的action其实分布的差距并不太大import gym impor…

steam发行问题

非常重要,最新steam营销推广 https://store.steampowered.com/news/group/4145017/view/4191238396458987547

软件设计模式概念篇

创建型模式 1、创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。 2、为了使软件的结构更加清晰,外界对于这些对象只需要知道它们共同的接口,而不需要清楚其具体的实现细节,使整个系统的设计更加符合单一职责原则。…

mysql中explain命令详解

前言 我们可以使用 explain 命令来查看 SQL 语句的执行计划,从而帮助我们优化慢查询。 使用注意:使用的 mysql 版本为 8.0.28数据准备 CREATE TABLE `tb_product2` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 商品ID,`name` varchar(20) DEFAULT NULL COMMENT 商品名称,`…