前言
最近在搭建RDQM的集群时用到了Pacemaker,出于对此的兴趣,自己来验证一下Pacemaker下Nginx的高可用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、概述
本文记录了通过Pacemaker,Corosync和Pcsd创建高可用性群集Nginx Web服务器。我们将在Red Hat Enterprise Linux Server release 7.5 (Maipo)系统上使用Pacemaker创建主动-被动群集或故障转移群集Nginx Web服务器。
Pacemaker是一个开源集群管理器软件,可实现您的服务的最大高可用性。它是由ClusterLabs分发的高级且可扩展的HA群集管理器。
Corosync集群引擎是在新的BSD许可下源自OpenAIS项目的开源项目,它是集群管理套件的一部分,通常会与其他资源管理器一起组合使用。它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它用于在应用程序中实现高可用性。
Pacemaker界面有一些应用程序。Pcsd是Pacemaker命令行界面和用于管理Pacemaker的GUI之一。我们可以使用pcsd命令pcs创建,配置或向集群添加新节点。
二、实验步骤
1.先决条件
3台服务器
node1 192.168.88.6
node2 192.168.88.7
node3 192.168.88.8
浮动IP地址192.168.88.10
roo用户
准备工作:
关闭防火墙(如果是生产环境可以通过设置防火墙规则达到类似的效果):
systemctl stop firewalld
systemctl disable firewalld
关闭setlinux:
vi /etc/sysconfig/selinux
SELINUX=disabled
reboot the OS
[root@node1 pcsd]# sestatus
SELinux status: disabled
2. 我们要做什么?
安装Nginx
安装和配置Pacemaker,Corosync和Pcsd
创建和配置集群
禁用STONITH并忽略仲裁策略
添加浮动IP和资源
向集群添加规则
配置防火墙
测试设置
3. 具体步骤
3.1 修改映射主机文件
vim /etc/hosts
192.168.88.6 node1
192.168.88.7 node2
192.168.88.8 node3
测试主机的映射配置
ping -c 3 node1
ping -c 3 node2
ping -c 3 node3
3.2 Nginx安装
配置nginx yum 源
vi /etc/yum.repos.d/yum.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
安装软件包
yum install nginx
用新页面更改每个服务器上的默认index.html页面
#Run Command on 'node1'
echo '<h1>node1 - goya-labs</h1>' > /usr/share/nginx/html/index.html
#Run Command on 'node2'
echo '<h1>node2 - goya-labs</h1>' > /usr/share/nginx/html/index.html
#Run Command on 'node3'
echo '<h1>node3 - goya-labs</h1>' > /usr/share/nginx/html/index.html
3.3 安装和配置Pacemaker,Corosync和Pcsd
Pacemaker,Corosync和Pcsd在默认系统存储库中可用。因此,可以使用以下yum命令从CentOS存储库中安装它们。
yum -y install corosync pacemaker pcs
安装完成后,使用以下systemctl命令启用所有服务以在系统引导时自动启动。
systemctl enable pcsd
systemctl enable corosync
systemctl enable pacemaker
现在,在所有服务器上启动pcsd Pacemaker命令行界面。
systemctl start pcsd
接下来,为“ hacluster”用户创建一个新密码,并对所有服务器使用相同的密码。该用户已在软件安装过程中自动创建。
这是您为“ hacluster ”用户配置密码的方式。
passwd hacluster
Enter new password:hacluster
3.4 创建和配置集群
注意:仅在“node1”上运行步骤3.4--3.7
在此步骤中,我们将创建一个包含3个Redhat服务器的新集群。然后配置浮动IP地址并添加新的Nginx资源。
要创建集群,我们需要使用pcs命令和hacluster用户授权所有服务器。
使用pcs命令授权所有服务器,并提供用户名和密码。
[root@node1 ~]# pcs cluster auth node1 node2 node3
Username: hacluster
Password:hacluster
node1: Authorized
node3: Authorized
node2: Authorized
定义集群名称以及将成为集群一部分的所有服务器。
[root@node1 ~]# pcs cluster setup --name goya_cluster node1 node2 node3
Error: node1: node is already in a cluster
Error: node2: node is already in a cluster
Error: node3: node is already in a cluster
Error: nodes availability check failed, use --force to override. WARNING: This will destroy existing cluster on the nodes. You should remove the nodes from their clusters instead to keep the clustersworking properly.
[root@node1 ~]# pcs cluster setup --name goya_cluster node1 node2 node3 --force
Destroying cluster on nodes: node1, node2, node3...
node2: Stopping Cluster (pacemaker)...
node1: Stopping Cluster (pacemaker)...
node3: Stopping Cluster (pacemaker)...
node2: Successfully destroyed cluster
node3: Successfully destroyed cluster
node1: Successfully destroyed cluster
Sending 'pacemaker_remote authkey' to 'node1', 'node2', 'node3'
node1: successful distribution of the file 'pacemaker_remote authkey'
node2: successful distribution of the file 'pacemaker_remote authkey'
node3: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
node1: Succeeded
node2: Succeeded
node3: Succeeded
Synchronizing pcsd certificates on nodes node1, node2, node3...
node1: Success
node3: Success
node2: Success
Restarting pcsd on the nodes in order to reload the certificates...
node1: Success
node3: Success
node2: Success
现在启动所有群集服务并启用它们。
pcs cluster start --all
pcs cluster enable --all
[root@node1 ~]# pcs cluster start --all
node1: Starting Cluster (corosync)...
node2: Starting Cluster (corosync)...
node3: Starting Cluster (corosync)...
node2: Starting Cluster (pacemaker)...
node1: Starting Cluster (pacemaker)...
node3: Starting Cluster (pacemaker)...
[root@node1 ~]# pcs cluster enable --all
node1: Cluster Enabled
node2: Cluster Enabled
node3: Cluster Enabled
[root@node1 ~]# pcs cluster status
Cluster Status:
Stack: corosync
Current DC: node2 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Fri Oct 30 17:08:43 2020
Last change: Fri Oct 30 17:08:12 2020 by hacluster via crmd on node2
3 nodes configured
0 resources configured
PCSD Status:
node2: Online
node3: Online
node1: Online
3.5 禁用STONITH并忽略仲裁策略
由于我们正在运行三个节点群集,因此没有隔离设备。因此,我们必须禁用STONITH设置,但不建议在生产环境中使用它。
使用以下命令禁用STONITH并忽略Quorum策略。
[root@node1 ~]# pcs property set stonith-enabled=false
[root@node1 ~]# pcs property set no-quorum-policy=ignore
[root@node1 ~]# pcs property / pcs property list
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: goya_cluster
dc-version: 1.1.21-4.el7-f14e36fd43
have-watchdog: false
no-quorum-policy: ignore
stonith-enabled: false
3.6 添加浮动IP和资源
浮动IP是将自动从一台服务器迁移/移动到另一台服务器的IP地址。我们的浮动IP地址将为192.168.88.10,然后我们将添加两个资源,即名称为“ virtual_ip”的浮动IP地址资源,以及名为“ webserver”的Nginx Web服务器的新资源。
运行以下命令以添加浮动IP地址'virtual_ip'
[root@node1 ~]# pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.88.10 cidr_netmask=32 op monitor interval=30s
运行以下命令为Nginx'webserver'添加新资源
pcs resource create webserver ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf op monitor timeout="5s" interval="5s"
查看
[root@node1 ~]# pcs resource
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
webserver (ocf::heartbeat:nginx): Started node2
[root@node1 ~]# pcs status resources
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
webserver (ocf::heartbeat:nginx): Started node2
3.7 将约束规则添加到集群
现在将配置高可用性规则和资源约束。
使用以下命令为得分为“ INFINITY”的Web服务器和virtual_ip资源设置排序规则约束。
pcs constraint colocation add webserver virtual_ip INFINITY
现在,使用以下命令始终在同一节点服务器上设置“ virtual_ip”和“ webserver”资源。
[root@node1 ~]# pcs constraint order virtual_ip then webserver
Adding virtual_ip webserver (kind: Mandatory) (Options: first-action=start then-action=start)
接下来,停止并启动集群
[root@node1 ~]# pcs cluster stop --all
node2: Stopping Cluster (pacemaker)...
node3: Stopping Cluster (pacemaker)...
node1: Stopping Cluster (pacemaker)...
node3: Stopping Cluster (corosync)...
node2: Stopping Cluster (corosync)...
node1: Stopping Cluster (corosync)...
[root@node1 ~]# pcs cluster start --all
node1: Starting Cluster (corosync)...
node2: Starting Cluster (corosync)...
node3: Starting Cluster (corosync)...
node3: Starting Cluster (pacemaker)...
node2: Starting Cluster (pacemaker)...
node1: Starting Cluster (pacemaker)...
现在再次验证资源状态。您可以选择在同一服务器/节点“ node1”上启动virtual_ip和Web服务器资源
[root@node1 ~]# pcs status resources
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
webserver (ocf::heartbeat:nginx): Started node1
3.8 测试
在此步骤中,我们将测试节点状态,corosync成员和状态,然后通过访问浮动IP地址来测试Nginx Web服务器的高可用性。
使用以下命令测试节点状态corosync成员和corosync状态。
pcs status nodes
corosync-cmapctl | grep members
pcs status corosync
输出:
[root@node1 ~]# pcs status nodes
Pacemaker Nodes:
Online: node1 node2 node3
Standby:
Standby with resource(s) running:
Maintenance:
Offline:
Pacemaker Remote Nodes:
Online:
Standby:
Standby with resource(s) running:
Maintenance:
Offline:
[root@node1 ~]# corosync-cmapctl | grep members
runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(192.168.88.6)
runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.1.status (str) = joined
runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(192.168.88.7)
runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.2.status (str) = joined
runtime.totem.pg.mrp.srp.members.3.config_version (u64) = 0
runtime.totem.pg.mrp.srp.members.3.ip (str) = r(0) ip(192.168.88.8)
runtime.totem.pg.mrp.srp.members.3.join_count (u32) = 1
runtime.totem.pg.mrp.srp.members.3.status (str) = joined
[root@node1 ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 node1 (local)
2 1 node2
3 1 node3
最后,检查Web服务器的高可用性。打开Web浏览器,然后输入浮动IP地址192.168.88.10
您将在“ host1”服务器上看到该网页。

现在,使用以下命令在“ host1”服务器上停止集群。
[root@node1 ~]# pcs cluster stop node1 --force
node1: Stopping Cluster (pacemaker)...
node1: Stopping Cluster (corosync)...
在节点1上检查:
[root@node1 ~]# pcs status nodes
Error: error running crm_mon, is pacemaker running?
[root@node1 ~]# pcs status corosync
Error: corosync not running
[root@node1 ~]# corosync-cmapctl | grep members
Failed to initialize the cmap API. Error CS_ERR_LIBRARY
在节点2上检查:
[root@node2 pcsd]# pcs status nodes
Pacemaker Nodes:
Online: node2 node3
Standby:
Standby with resource(s) running:
Maintenance:
Offline: node1
Pacemaker Remote Nodes:
Online:
Standby:
Standby with resource(s) running:
Maintenance:
Offline:
然后再次检查该页面,这一次,您将看到来自“ host2”服务器的页面,如下所示。

至此,您已在redhat 7服务器上成功安装了带有Pacemaker,Corosync和Pcsd的Nginx Web服务器高可用性。
本文详细介绍了如何在Red Hat Enterprise Linux Server 7.5上利用Pacemaker、Corosync和Pcsd创建Nginx的高可用性群集。首先,介绍了Pacemaker和Corosync的作用和功能,接着阐述了实验所需的先决条件和步骤,包括安装Nginx、配置Pacemaker、Corosync和Pcsd,创建和配置集群,设置浮动IP和资源,以及测试集群的高可用性。整个过程覆盖了从环境准备到集群的搭建和验证,旨在实现Nginx服务的故障转移和高可靠性。
299

被折叠的 条评论
为什么被折叠?



