上一篇博客我们聊了下高可用集群corosync+pacemaker的相关概念以及corosync的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13585921.html;今天我们来说一下corosync+pacemaker高可用集群的配置工具crmsh安装和使用;在centos7上默认base参考没有crmsh这个工具,红帽默认在base仓库中只留了pcs这个配置工具,所以我们要想在centos7上使用crmsh这个工具来管理corosync+pacemaker高可用集群,需要去找对应的包进行安装;好在opensuse给centos7提供了一个仓库,我们可以使用opensuse的参考去安装这个工具;

  1、配置opensuse仓库

[root@node01 ~]# cd /etc/yum.repos.d/
[root@node01 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo epel.repo
CentOS-Base.repo.bak CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo docker-ce.repo
[root@node01 yum.repos.d]# rz
rz waiting to receive.
zmodem trl+C ȡ 100% 350 bytes 350 bytes/s 00:00:01 0 Errors [root@node01 yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo docker-ce.repo
CentOS-Base.repo.bak CentOS-fasttrack.repo CentOS-Vault.repo epel.repo
CentOS-CR.repo CentOS-Media.repo crmsh.repo
[root@node01 yum.repos.d]# cat 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
[root@node01 yum.repos.d]#

  提示:crmsh这个工具是一个集群管理工具,只需要在某一台server安装即可,如果有需要在其他节点管理集群,也可以在其他节点配置yum仓库,安装即可;

  2、安装crmsh

[root@node01 ~]# cd /etc/yum.repos.d/
[root@node01 yum.repos.d]#
[root@node01 yum.repos.d]# cd
[root@node01 ~]# yum install crmsh -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 crmsh.noarch.0.3.0.0-6.2 将被 安装
--> 正在处理依赖关系 crmsh-scripts >= 3.0.0-6.2,它被软件包 crmsh-3.0.0-6.2.noarch 需要
--> 正在处理依赖关系 python-parallax,它被软件包 crmsh-3.0.0-6.2.noarch 需要
--> 正在检查事务
---> 软件包 crmsh-scripts.noarch.0.3.0.0-6.2 将被 安装
---> 软件包 python-parallax.noarch.0.1.0.1-29.1 将被 安装
--> 解决依赖关系完成 依赖关系解决 ====================================================================================================
Package 架构 版本 源 大小
====================================================================================================
正在安装:
crmsh noarch 3.0.0-6.2 network_ha-clustering_Stable 746 k
为依赖而安装:
crmsh-scripts noarch 3.0.0-6.2 network_ha-clustering_Stable 93 k
python-parallax noarch 1.0.1-29.1 network_ha-clustering_Stable 36 k 事务概要
====================================================================================================
安装 1 软件包 (+2 依赖软件包) 总计:875 k
总下载量:782 k
安装大小:2.9 M
……省略部分内容……
Running transaction
正在安装 : crmsh-scripts-3.0.0-6.2.noarch 1/3
正在安装 : python-parallax-1.0.1-29.1.noarch 2/3
正在安装 : crmsh-3.0.0-6.2.noarch 3/3
验证中 : python-parallax-1.0.1-29.1.noarch 1/3
验证中 : crmsh-3.0.0-6.2.noarch 2/3
验证中 : crmsh-scripts-3.0.0-6.2.noarch 3/3 已安装:
crmsh.noarch 0:3.0.0-6.2 作为依赖被安装:
crmsh-scripts.noarch 0:3.0.0-6.2 python-parallax.noarch 0:1.0.1-29.1 完毕!
[root@node01 ~]#

  3、crmsh的使用

[root@node01 ~]# crm
crm(live)# ls
cibstatus help site
cd cluster quit
end script verify
exit ra maintenance
bye ? ls
node configure back
report cib resource
up status corosync
options history
crm(live)# status
Stack: corosync
Current DC: node02.test.org (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Mon Aug 31 22:08:50 2020
Last change: Mon Aug 31 19:41:56 2020 by root via crm_attribute on node01.test.org 2 nodes configured
0 resources configured Online: [ node01.test.org node02.test.org ] No resources crm(live)# bye
bye
[root@node01 ~]# crm ls
cibstatus help site
cd cluster quit
end script verify
exit ra maintenance
bye ? ls
node configure back
report cib resource
up status corosync
options history
[root@node01 ~]# crm status
Stack: corosync
Current DC: node02.test.org (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Mon Aug 31 22:09:08 2020
Last change: Mon Aug 31 19:41:56 2020 by root via crm_attribute on node01.test.org 2 nodes configured
0 resources configured Online: [ node01.test.org node02.test.org ] No resources [root@node01 ~]#

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

  4、crmsh的帮助信息

  提示:进入交互式shell使用ls可以查看当前所在位置支持使用那些命令;crmsh它类似Linux中的文件系统,它可以使用ls查看当前位置可以使用的命令,也可以使用cd命令进入到下一个配置;比如要进入configure配置,我们可以使用cd configure 也可以直接敲configure进入configure配置;查看帮助可以使用help ,默认是现实当前界面的所有命令的简要帮助,如果要查看某个命令的详细使用格式,可以help 某个命令,如下所示;

  5、常用命令使用

  status:查看集群状态信息同crm_mon作用一样;

  verify:验证配置信息是否正确

  提示:以上校验配置信息反馈给我们说我们配置了STONITH 但是并没有发现STONITH设备;解决办法关闭STONITH选项

  提示:我们的所有配置相关的操作都要进入到configure界面操作;property这个命令是用来设置集群相关属性的;crmsh支持命令补全,如果不知道一个命令有那些参数可设置可以连续敲两次tab键,它会列出支持的参数;

  验证配置,提交配置

  提示:只要verify没有报任何错误信息都表示当前配置界面的配置信息正确;没有任何错误,我们就可以使用commit命令来提交配置,让其生效;

  ra相关命令

  classes:类出资源类别

  info :查看指定资源代理的元数据信息,简单讲就是查看一个资源代理的详细帮助信息;

  提示:以上截图表示查看ocf类别下的heartbeat下的IPaddr这个资源的详细帮助信息,其中带星号的参数是比选项;

  list:类出指定类别资源代理列表,就是查看指定类别的资源代理中有那些资源可以代理;

  providers:查看指定资源是那个类别的资源代理;

  configure相关命令

  primitive:定义一个基本资源;

  命令使用语法

  提示:在configure配置界面,可以使用primitive命令来定义一个资源,其中rsc表示给资源其一个名称,然后指定资源的类别,和资源代理,然后加上指定资源代理需要的参数,以及选项就可以定义好一个资源;

  示例:在configure配置界面定义一个ip资源

  提示:可以看到当我们验证配置界面的配置没有问题以后,commit配置,对应的资源就生效了,并且在node01上生效了;

  验证:在node01上查看对应的ip地址是否配置上去了?

  提示:可以看到对应ip地址的确在node01上给配置好了;

  验证:把node01下线,看看对应ip地址是否会转移呢?

  提示:我们把node01设置为standby以后,在查看集群状态信息,可以看到对应的webip 这个资源已经停止了,并且给我们报了一个错误,说在node02.test.org上没有配置;其实原因是在node02上并没有br0这块网卡,所以它转移过去配置不成功;

  在node02上添加一个br0网桥并把ens33桥接到br0上,把ens33的地址配置到br0上,然后重启网络服务,看看对应webip是否会迁移上来呢?

[root@node02 ~]# cd /etc/sysconfig/network-scripts/
[root@node02 network-scripts]# cat ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.0.42
PREFIX=24
GATEWAY=192.168.0.1
DNS1=192.168.0.1
[root@node02 network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0
[root@node02 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:91:99:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.42/24 brd 192.168.0.255 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe91:9930/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:fe:1b:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:fe:1b:15 brd ff:ff:ff:ff:ff:ff
[root@node02 network-scripts]# systemctl restart network
[root@node02 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
link/ether 00:0c:29:91:99:30 brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:fe:1b:15 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:fe:1b:15 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 00:0c:29:91:99:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.42/24 brd 192.168.0.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::b41a:aeff:fe2e:ca6e/64 scope link
valid_lft forever preferred_lft forever
[root@node02 network-scripts]#

  提示:可以看到node02上已经有br0,但是我们配置的ip地址并没有迁移过来;

  重新将node01上线,然后在下线,看看webip是否能够迁移到node02上?

  提示:重新将node01上线以后,再次查看集群状态发现node02离线了,对应webip也停止了;这可能是因为我们刚才在node02上把地址迁移到br0上的原因;对于webip不能工作的原因是我们的集群式两个节点的特殊集群,但其中一台server处于离线,就发生了集群网络分区,在线的一方并没有大于一般的选票,所以对应资源也就停止了;

  重启node02上的corosync pacemaker,然后再次使用查看集群状态

  提示:重启node02的corosync和pacemaker后,集群状态恢复正常;

  现在将node01设置成standby模式,看看是否将webip迁移到node02上?

  提示:可以看到把node01设置为standby模式以后,webip就自动迁移到node02上了;

  验证:在node02上查看对应的webip是否真的迁移过来了呢?

  提示:在node02上也能看到对应webip资源迁移过来了;

  monitor:定义资源的监控选项

  命令使用语法

  示例:给刚才的webip定义监控选项

  提示:从上面的截图可以看到,我们给资源添加监控选项,不外乎在资源的后面用OP参数指定了OP参数类型是monitor,interval=# timeout=#;其实我们给资源添加监控选项在创建资源的时候就可以在其后使用OP monitor interval=时间 timeout=时间;这里在校验配置信息时提示我们设置的超时时间过短;为了不让它警告我们,我们可以修改对应资源的timeout的值即可,如下

  edit:用im编辑器打开配置文件,进行编辑

  提示:使用edit命令即可打开当前configure界面的配置文件,我们可以修改自己需要修改的地方,然后保存退出即可

  提示:可以看到当我们修改配置文件以后,再次使用show可以看到对应选项的值已经发生变化,校验都没有任何警告;

  验证:把node02上的br0:1上down掉看看,它会不会自动启动起来?

  提示:刚开始把br0:br0:1down掉以后,在查看集群状态对应webip是处于正常启动状态的,这是因为监控探测到时间没有到;等上一会我们再次查看集群状态就会发现报错了;

  提示:我们定义的资源监控选项监控到对应资源故障以后,它会把故障写进CIB中,然后把对应的资源进行重启,一边方便为门查看对应资源是否发生故障,提醒管理员排查相关故障;

  示例2:定义web服务httpd托管在corosync+pacemaker高可用集群上

  1、在集群节点上安装httpd

[root@node01 ~]# yum install httpd -y

  提示:在需要转移到所有主机上都要安装;

  2、查看httpd资源代理需要用到的参数信息

  提示:从上面的截图看,托管httpd不需要任何参数指定;

  3、定义托管httpd

  查看集群状态

  提示:这里提示我们webserver在node01上启动发生了未知错误,所以它在node02上启动了;默认情况托管的服务会负载均衡的在集群节点上运行着;

  在node01上排查错误

  提示:在node01上查看端口信息,发现node01的80端口被占用了,这也就导致httpd在node01上无法正常启动;

  停止掉node01的nginx服务,看看对应webserver是否会迁回node01?

  提示:可以看到把node01上的nginx服务停掉以后,webserver也没有从node02迁回node01,这是因为webserver对node02的倾向性和对node01的倾向性是一样的,所以它不会迁移会node01;

  利用nfs共享存储为httpd提供网页文件

  配置node03为nfs服务器

[root@node03 ~]# mkdir -p /data/htdocs/
[root@node03 ~]# cd /data/htdocs/
[root@node03 htdocs]# ls
[root@node03 htdocs]# echo "<h1> This page on nfs server</h1>" > index.html
[root@node03 htdocs]# cat index.html
<h1> This page on nfs server</h1>
[root@node03 htdocs]# cat /etc/exports
/data/htdocs/ 192.168.0.0/24(rw)
[root@node03 htdocs]# groupadd -g 48 apache
[root@node03 htdocs]# useradd -u 48 -g 48 -s /sbin/nologin apache
[root@node03 htdocs]# id apache
uid=48(apache) gid=48(apache) groups=48(apache)
[root@node03 htdocs]# setfacl -m u:apache:rwx /data/htdocs/
[root@node03 htdocs]# systemctl start nfs
[root@node03 htdocs]# systemctl enable nfs-server.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@node03 htdocs]#

  提示:我们共享的目录必须要让apache用户对其有读权限,其次httpd服务来访问nfs是通过在httpd服务器上的apache用户身份来访问nfs,在nfs这边它会识别其UID,所以我们在nfs上要新建一个同httpd服务器上的apache同id的用户;并且设置该用户对nfs共享出来的目录有读权限,如果业务需要上传文件,我们还需要对共享目录设置写和执行权限;

  配置托管nfs服务

  验证:查看集群状态,看看nfs服务是否运行到集群节点?

  提示:可以看到westore已经在node01启动了;

  验证:在node01上看看对应nfs是否真的挂载上了?

  提示:可以看到node01上的确把nfs挂载到我们指定的目录上了;

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

  提示:这里设置多个资源为一个组,默认它会按照先后顺序启动,停止是相反的顺序,所以这里的资源的前后决定了资源启动顺序和停止顺序;

  再次查看集群状态信息

  提示:可以看到webstore已经从node01迁移到node02上了;至此一个完整的web服务就托管在corosync+pacemaker高可用集群上了;

  测试:用浏览器访问webip看看是否能够访问到对应的网页?

  测试:把node02设置为standby模式,看看对应网页是否能够继续访问?

  提示:可以看到把node02设置成standby模式以后,上面的资源都会迁移到node01上,对于服务来说只是短暂的影响,通常这种影响在用户层面上无所感知的;

  到此一个完整的web服务就托管到高可用集群corosync+pacemaker之上了;对于其他服务都是相同的逻辑;

高可用集群corosync+pacemaker之crmsh使用(一)的更多相关文章

  1. 高可用集群corosync+pacemaker之crmsh使用(二)

    上一篇博客我们聊到了crmsh的安装以及配置一个资源到corosync+pacemaker高可用集群上的相关命令的用法,回顾请参考https://www.cnblogs.com/qiuhom-1874 ...

  2. 高可用集群corosync+pacemaker之pcs安装使用

    前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crms ...

  3. Corosync+Pacemaker+crmsh构建Web高可用集群

    一.概述: 1.1 AIS和OpenAIS简介 AIS应用接口规范,是用来定义应用程序接口(API)的开放性规范的集合,这些应用程序作为中间件为应用服务提供一种开放.高移植性的程序接口.是在实现高可用 ...

  4. corosync+pacemaker and drbd实现mysql高可用集群

    DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...

  5. corosync+pacemaker高可用集群

    高可用集群,是指以减少服务中断(如因服务器宕机等引起的服务中断)时间为目的的服务器集群技术.简单的说,集群就是一组计算机,它们作为一个整体向用户提供一组网络资源.这些单个的计算机系统就是集群的节点. ...

  6. [ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  7. CentOS7/RHEL7 pacemaker+corosync高可用集群搭建

     TOC \o "1-3" \h \z \u 一.集群信息... PAGEREF _Toc502099174 \h 4 08D0C9EA79F9BACE118C8200AA004B ...

  8. 高可用集群之corosync+pacemaker

    1.概念 在传统Linux集群种类,主要分了三类,一类是LB集群,这类集群主要作用是对用户的流量做负载均衡,让其后端每个server都能均衡的处理一部分请求:这类集群有一个特点就是前端调度器通常是单点 ...

  9. 配置高可用集群(实验) corosyne+pacemaker

    环境准备: 一准备三个虚拟机,把/etc/hosts/文件配置好                              192.168.43.9 node0                     ...

随机推荐

  1. luogu P2252 威佐夫博弈 模板 博弈

    LINK:威佐夫博弈 四大博弈 我都没有好好整理 不过大致可以了解一下. 在这个博弈中 存在一些局面 先手遇到必胜. 不过由于后手必胜的局面更具规律性这里研究先手遇到的局面后手必胜的情况. 这些局面分 ...

  2. AT5200 [AGC038C] LCMs 莫比乌斯反演

    LINK:LCMs 随便找了道题练习了一下莫比乌斯反演 式子有两个地方化简错误 导致查了1h的错. 讲一下大致思路 容易发现直接做事\(n^2logn\)的. 观察得到数字集合大小为1e6. 可以设\ ...

  3. AtCoder Grand Contest 044 A Pay to Win 贪心

    LINK:Pay to Win 自闭了 比赛的时候推出来正解了 以为复杂度不对 写完扔了 没拿map存状态就扔了23333... 一个T点:在更新map的时候 >不要写成>= 不然会徒劳的 ...

  4. luogu P3264 [JLOI2015]管道连接

    LINK:管道连接 一张无向图 有P个关键点 其中有K个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...

  5. Python安装2 —— Pycharm2019.3.3的安装

    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12378617.html 一:什么是Pycharm PyCharm是一种Pytho ...

  6. c++日志工具spdLog

    c++日志工具spdLog简单使用示例代码 spdlog直接引用头文件就可以使用,这一点还是比较方便的,也是刚入门使用,下面是在源码的示例代码基础上修改测试的代码: #include <cstd ...

  7. 005_go语言中的for循环

    代码演示 package main import "fmt" func main() { i := 1 for i <= 3 { fmt.Println(i) i = i + ...

  8. C语言学习笔记之switch有无break差别

    今天复习到了switch语句,我们正常的写法中,是经常把switch和break搭配在一起的 当我们把break去掉呢 可以看到,我们选择2时,的确会到case 2里面执行语句,可是没有break还是 ...

  9. 关于import android.support.v4.app.ContextCompat;找不到contextcompat的解决方法

    android迁移到了androidx,那么相关库的import就有问题了,需要转变为androidx的,这里比如 import android.support.v4.app.ContextCompa ...

  10. 你真的理解索引吗?从数据结构层面解析mysql索引原理

    从<mysql存储引擎InnoDB详解,从底层看清InnoDB数据结构>中,我们已经知道了数据页内各个记录是按主键正序排列并组成了一个单向链表的,并且各个数据页之间形成了双向链表.在数据页 ...