Redhat7.5上使用Pacemaker和Corosync搭建Nginx高可用系统

it2026-02-14  8


前言

最近在搭建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服务器高可用性。

最新回复(0)