当前位置: 首页 > news >正文

Linux入门攻坚——49、高可用HA之corosync/pacemaker(2)

搭建HA集群

    使用corosync+pacemaker搭建HA集群,有两种安装方式,一种是手动单独安装corosync和pacemaker,一种是借助外在的工具,这个工具可以完成HA的全生命周期管理,即从安装到配置到管理。

    在CentOS7上,使用corosync v2 + pacemaker组合搭建高可用集群,corosync v2版本已经带有vote system(投票系统),pacemaker作为独立服务运行。

集群的全生命周期管理工具:
    pcs:红帽出品的工具
    crmsh:suse作品

配置集群的前提:
1)时间同步;
2)基于当前正在使用的主机名可以互相访问;
3)是否会用到仲裁设备;

基本环境:node1:192.168.61.129,node2:192.168.61.130,CentOS7.9

pcs工具及集群配置管理

1、安装pcs:
yum install pcs

从依赖关系看,安装pcs,会同时安装其依赖的包,corosync和pacemaker都会安装

2、两个节点安装完pcs后,要确保时间同步

3、查看节点的主机名:uname -n

    建议使用短名称格式

4、确保节点之间通信正常:
ping node1  
ping node2

5、启动pcsd服务
systemctl start pcsd.service
systemctl enable pcsd.service
通过rpm -ql pcs,可以看到服务脚本为:/usr/lib/systemd/system/pcsd.service
其程序:/usr/sbin/pcs
要确保在每一个节点上都启动pcsd服务。要对每一节点操作,可以使用前面学过的ansible
编辑/etc/ansible/hosts,增加一个组:
[ha]
192.168.61.129
192.168.61.130

运行:ansible ha -m service -a 'name=pcsd state=started enabled=yes'

校验一下,是否运行正常:

pcsd已经运行,然后看一下其监听的端口:

在tcp的2224端口。

6、给特定用户hacluster设置密码
echo 'password' | passwd --stdin hacluster
ansible ha -m shell -a 'echo "12345678" | passwd --stdin hacluster'

7、pcs集群节点密码认证。
pcsd是每个节点都运行的守护进程,pcs是一个客户端,通过pcs连接pcsd进而来管理各个节点的集群。pcsd不是说随意一个pcs连接都接受,pcs需要对各个集群节点进行认证。
pcs cluster auth node1 node2

想通过哪台节点管理,就需要在那一台上运行一下认证。

8、配置集群,将node1,node2配置成集群,集群名为mycluster
pcs cluster setup --name mycluster node1 node2

命令会先销毁两个节点上的集群,即停止pacemaker,然后发送了pacemaker_remote authkey,即pacemaker的远程秘钥,然后发送集群配置文件,然后同步各节点的证书,重启各节点pcsd进程,重新加载证书。命令执行完毕,会在各节点生成配置文件,如下:/etc/corosync/corosync.conf

配置文件中配置了totem,即集群的特征标志,如集群名等,在心跳信息中会携带,节点列表,即集群中包含的各节点信息,quorum,法定票数,即仲裁,这里的仲裁者是corosync_votequorum,即corosync自己的仲裁程序。logging,配置日志信息,日志信息可以同时保存到系统日志,即to_syslog,也可同时保存到指定文件。

9、启动集群
pcs cluster start --all

查看是否启动成功:ps aux

10、检查集群启动状态
检查节点通信状态(显示为no faults即为OK):corosync-cfgtool -s

检查集群成员关系及Quorum API:corosync-cmapctl | grep members

查看集群的状态:pcs status

这里看到一条WARNINGS,警告,配置中启用了stonith但是没有stonith设备,这个可以通过命令关闭stonith功能。pcs property set stonith-enabled=false
实际就是集群全局属性的配置,可使用pcs property list --all查看全部可配置属性

这里的DC很重要,DC——Dedicated Coordinating node,协调节点,负责维护主配置信息的核心节点,完成主配置维护、同步与协调、高可用性保障。

crm_verify -L -V,查看集群配置是否有问题:

pcs具有很多子命令,可以查看帮助:

对子命令也可以继续查看帮助,如:
pcs cluster -h,  pcs property -h等

对于集群的管理接口,除了pcs,还有一个crmsh比较好用,但是需要单独下载安装。

crmsh的安装:
下载,需要下载:
crmsh-3.0.0-6.2.noarch.rpm
crmsh-scripts-3.0.0-6.2.noarch.rpm
pssh-2.3.1-7.3.noarch.rpm
python-parallax-1.0.1-29.1.noarch.rpm
python-pssh-2.3.1-7.3.noarch.rpm
安装:yum install *.rpm

很是尴尬的一件事是,这些个较老版本的软件在网上很难下载到。
crmsh3离线安装包-for CentOS7

crmsh的使用
crmsh类似于ansible,是借助于ssh来完成命令的执行,而pcs是需要代理的,即需要每个节点运行pcsd。

1、crm help,查看crm的帮助,crm有众多的子命令,子命令下还有子命令。
2、crm status,查看集群状态:

crm有交互状态,运行crm,进入交互界面,在交互界面输入子命令等,类似shell

配置一个高可用web服务集群
web service:
    vip:192.168.61.100
    httpd

这里需要两个资源,一个是vip,即对外表现的ip,访问的入口,一个是httpd服务进程,提供web服务。

1、在node1和node2上安装并配置完成httpd服务,确保运行正常:
node1:192.168.61.129,node2:192.168.61.130

服务正常后,需要停止服务,集群自己确定启动哪个节点的服务。
在CentOS6上,必须确保服务不能开机自启动,即chkconfig httpd off
而在CentOS7上,必须保证设置了开机自启动,即systemctl enable httpd.service(CentOS7使用了systemd,即使配置了开机自启动,也不代表开机后服务一定启动,首次访问运行)

2、配置集群服务资源
任何一个资源要配置到集群服务上使用,只能通过资源代理来实现。
查看当前可用的资源代理,可以使用crm ra classes
也可以进入交互模式查看:

代理的类别有lsb、ocf、service和systemd,ocf又按照提供者,即provider分为heartbeat、pacemaker等子类别。
使用list <classes> [<provider>]查看具体类别的资源:

对于lsb,对应的是/etc/rc.d/init.d/目录下的脚本文件

ocf下的子类,对应的是/usr/lib/ocf/resource.d/目录下的子目录,而对应的子类资源,则是对应子目录下的脚本,如下

systemd类别的资源对应/usr/lib/systemd/system/下的unit(或是/etc/systemd/system/下的unit),service感觉与systemd一样,通用服务类型。
llist service和list systemd显示的资源中都有httpd。

查看具体资源的详细信息,使用info子命令:
info [<class>:[<provider>:]]<type>
如:info ocf:heartbeat:IPaddr

配置资源,需要在configure界面完成:

IP地址是主资源(也叫原始资源),需要使用primitive进行配置,用法:

配置web服务的虚拟IP地址:

使用status,可以查看集群的状态:

可以看到,webvip资源运行在node1上,可以使用ip addr show查看:

ifconfig命令看不到。
可以手工进行资源切换,进入node命令,执行standby,将节点转为备用:

将node1重新上线,上面standby叫做旁路状态或软下线状态更合适,node1重新上线,使用online命令:

配置第二个主资源:httpd

可以看到集群有两个资源了,但是这两个资源分别处于不同的节点上,这不是期望的,期望的是这个资源总是在一个节点上。要使它们总在一起,可以定义成组资源:

因为此时组资源是在node2上,这时访问web服务:即vip:192.168.61.100

将node2进行standby操作:

可以看到,资源切换到node1上了,访问192.168.61.100:

配置资源的粘性,即对节点的倾向性,使用configure下的property的default-resource-stickiness属性,设置资源的默认粘性:

如果直接关闭node1电源,查看状态:

对于两节点系统,因为在全局设置中,即/etc/corosync/corosync.conf中,quorum中two_node: 1,即设置为双节点系统,所以即使一个节点掉电,只剩一个节点,其依然是with quorum。将two_node设为0,再次停止node1节点:

集群服务停了,虽然还有一个节点正常。
这种情况还是可以通过configure的property的no-quorum-policy=来设置,

没有配置时,即默认是stop,所以上面测试,只剩下一个节点,处于WITOUT Quorum时,服务是stoped。

http://www.lryc.cn/news/576082.html

相关文章:

  • Linux命令行操作基础
  • 关于css的height:100%
  • JAVA-泛型通配符的上界和下界
  • UUDS—常见NRC及其含义
  • 中国双非高校经费TOP榜数据分析
  • ROS:录制相机、IMU、GNSS等设备数据
  • gRPC技术解析与python示例
  • 楼宇自控系统以智能化管控,全方位满足建筑节约、安全与可靠运行需求
  • 像素之外的智慧:Adobe AI在动态影像与云端协作中的进阶应用
  • 如何设置 Java 的环境变量
  • 23种设计模式——单例模式的暗黑面
  • LLaMA-Factory 对 omnisql 进行 ppo dpo grpo nl2sql任务 实现难度 时间 全面对比
  • 【.net core】【sqlsugar】在where条件查询时使用原生SQL
  • spring-ai 1.0.0 学习(十八)——MCP Server
  • 修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题
  • 【C语言】知识总结·指针篇
  • linux dts overlay
  • Spearman检验组间相关性及SCI风格绘图
  • 基于社区电商场景的Redis缓存架构实战01-redis内核知识
  • 航拍图像中的“生命线”:基于YOLOv5的7类应急目标检测实践
  • 打造无障碍网页应用的利器:Base UI
  • Python爬虫实战:如何优雅地处理超时和延迟加载问题
  • 安全运营中的漏洞管理和相关KPI
  • 车载以太网-ARP 动态 静态
  • html配置rem实现页面自适应
  • Day57打卡 @浙大疏锦行
  • Go和Elixir极简HTTP服务对比
  • Linux 挂载从入门到精通:mount 命令详解与实战指南
  • 创建一个简单入门SpringBoot3项目
  • Spring Boot项目开发实战销售管理系统——系统设计!