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

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

前言

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yangkei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值