如何在Ubuntu 16.04上使用起​​搏器,Corosync和Crmsh设置Nginx高可用性

在本教程中,我将逐步介绍如何使用Pacemaker,Corosync和Crmsh创建高可用性群集Nginx Web服务器。我们...

在本教程中,我将逐步介绍如何使用Pacemaker,Corosync和Crmsh创建高可用性群集Nginx Web服务器。 我们将在Ubuntu 16.04上使用Pacemaker创建一个主动 - 被动群集或故障转移群集Nginx Web服务器。

Pacemaker是开源的集群管理器软件,可以实现您的服务的最大可用性。 自2007年以来,它是由ClusterLabs开发的高级可扩展HA集群管理器。

Corosync群集引擎是一个从2008年开放源代码开放源代码项目,并根据BSD许可证发布的开源项目。 这是一个具有附加功能的组通信系统,用于在应用程序中实现高可用性。

Pacemaker接口有几个应用程序, Crmsh是其中之一。 它是一个Pacemaker命令行界面来管理Pacemaker高可用性。 Crmsh是用python写的。 我们可以使用Crmsh命令行工具创建,配置和解决Pacemaker HA问题。

先决条件

  • 三个Ubuntu 16.04服务器
    • web01 10.0.15.11
    • web02 10.0.15.12
    • web03 10.0.15.13
  • 浮动IP地址10.0.15.15
  • 根特权

我们将要做什么?

  1. 映射主机文件。
  2. 安装和配置Nginx。
  3. 安装Pacemaker,Corosync和Crmsh。
  4. 配置Corosync密钥。
  5. 开始所有服务。
  6. 创建和配置群集。
  7. 测试。

第1步 - 映射主机文件

注意:
在所有三个服务器的web01','web02','web03'上运行第1步 - 3。

在本教程中,我将使用3个Ubuntu 16.04服务器,每个服务器都有一个唯一的主机名:'web01','web02'和'web03'。 每个服务器可以使用服务器的主机名连接到其他服务器。

要实现这一点,使用vim编辑所有服务器上的'/ etc / hosts'文件。

vim /etc/hosts

粘贴/ etc / hosts配置下面。

10.0.15.11      web01
10.0.15.12      web02
10.0.15.13      web03
10.0.15.15      ha-web.co

保存文件并退出vim。

接下来,通过每个主机名ping其他服务器来测试所有服务器。

ping -c 3 web01
ping -c 3 web02
ping -c 3 web03

Ping所有服务器

第2步 - 安装和配置Nginx

现在,我们开始通过使用Pacemaker创建故障转移群集来创建Nginx Web服务器的高可用性设置。 我们需要首先在每个服务器节点上安装Nginx。

使用apt命令安装Nginx。

apt install -y nginx

安装完成后,通过运行下面的命令,将每个服务器上的唯一页面替换为nginx的默认页面,以便以后识别发送页面的服务器。

#Run Command on 'web01'
echo '<h1>web01 - hakase-labs</h1>' > /var/www/html/index.html

#Run Command on 'web02'
echo '<h1>web02 - hakase-labs</h1>' > /var/www/html/index.html

#Run Command on 'web03'
echo '<h1>web03 - hakase-labs</h1>' > /var/www/html/index.html

现在停止Web服务器。

systemctl stop nginx

Nginx的安装和配置已经完成。

在Ubuntu 16.04上安装和配置Nginx

第3步 - 安装Pacemaker,Corosync和Crmsh

Pacemaker是一个开源的集群管理器应用程序。 Corosync是Pacemaker的Cluster Engine,而Crmsh是一个基于python的工具,用于启动Pacemaker集群。 所有这些应用程序都可以在Uubuntu存储库中使用。

使用apt命令安装Pacemaker,Corosync和crmsh。

apt install -y pacemaker corosync crmsh

安装后,所有这些服务都将在系统上自动运行。 使用下面的systemctl命令停止它们。

systemctl stop corosync
systemctl stop pacemaker

为Nginx提供高可用性的软件已经安装。

在Ubuntu 16.04上安装Pacemaker,Corosync和Crmsh

第4步 - 配置Corosync

注意:
仅在'web01'服务器上运行第4步。

由于我们没有使用pcsd进行Ubuntu,因此我们需要手动配置Corosync。 我们将为集群认证生成Corosync密钥,并在'web01'服务器上创建一个新的Corosync配置文件,然后将密钥和配置复制到其他服务器的web02'和'web03'。

在生成Corosync密钥之前,我们需要安装新的“hasged”包。 它用于为Corosync密钥生成获得更好的随机数。

使用apt命令从存储库中进行安装。

apt install -y haveged

现在使用以下命令生成一个新的Corosync密钥。

corosync-keygen

当密钥生成完成后,您可以在'/ etc / corosync /'目录中看到新密钥'authkey'。

ls -lah /etc/corosync/

生成Corosync键

接下来,转到'/ etc / corosync'目录并备份默认的配置文件'corosync.conf'。

cd /etc/corosync/
mv corosync.conf corosync.conf.bekup

然后用vim创建一个新的'corosync.conf'配置文件。

vim corosync.conf

将下面的配置粘贴到该文件中。

# Totem Protocol Configuration
totem {
  version: 2
  cluster_name: hakase-cluster
  transport: udpu

# Interface configuration for Corosync
  interface {
    ringnumber: 0
    bindnetaddr: 10.0.15.0
    broadcast: yes
    mcastport: 5407
  }
}

# Nodelist - Server List
nodelist {
  node {
    ring0_addr: web01
  }
  node {
    ring0_addr: web02
  }
  node {
    ring0_addr: web03
  }
}

# Quorum configuration
quorum {
  provider: corosync_votequorum
}

# Corosync Log configuration
logging {
  to_logfile: yes
  logfile: /var/log/corosync/corosync.log
  to_syslog: yes
  timestamp: on
}

service {
  name: pacemaker
  ver: 0
}

保存文件并退出编辑器。

接下来,将认证密钥和配置文件从“web01”服务器复制到“web02”和“web03”服务器。

scp /etc/corosync/* root@web02:/etc/corosync/
scp /etc/corosync/* root@web03:/etc/corosync/

将Corosync配置从web01节点复制到其他节点

全部完成后,转到“web02”和“web03”服务器,然后检查文件。

ssh root@web02
cd /etc/corosync/
ls -lah

web02节点上的Corosync配置

Corosync配置已经完成。

第5步 - 启动所有群集服务

注意:
在所有服务器上运行第5步。

在所有服务器上启动HA集群软件,Pacemaker和corosync。 然后启动它在启动时自动启动。

启动Corosync并将其添加到启动时自动启动。

systemctl start corosync
systemctl enable corosync

现在启动Pacemaker并启动它启动。

systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemaker

所有服务已经启动,检查所有节点,并确保所有服务器状态都为“在线”。

crm status

集群节点状态

或者您可以通过以下corosync-cmapctl命令检查Corosync成员来检查状态。

corosync-cmapctl | grep members

您将看到所有服务器IP地址。

Corosync会员列表

第6步 - 创建和配置群集

注意:
仅在web01服务器上运行第6步

在此步骤中,我们将使用crmsh命令行工具配置Active-Passive Nginx群集。 由于我们没有使用STONITH设备,因此我们要禁用STONITH并忽略集群上的Quorum策略。

运行下面的crm命令以禁用“STONITH”,并忽略Quorum策略。

crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore

现在使用下面的crm命令检查STONITH状态和法定人数策略。

crm configure show

您将看到以下结果。

禁用STONITH并忽略Quorum策略

接下来,我们需要为集群创建一些新的资源。 Pacemaker支持以下类型的资源代理(RA)。

  • LSB(基于Linux标准) - 由Linux发行版提供。 例如:'/etc/init.d/service'脚本。
  • OCF(开放群集框架) - 集群计算工具集。 该项目是Linux基金会的一部分。

对于我们的Nginx HA Web服务器,我们需要创建两个OCF资源:用于浮动IP的“virtual_ip”和nginx服务的“webserver”。

使用下面的crm命令为浮动IP配置创建一个新的“virtual_ip”资源。

sudo crm configure primitive virtual_ip \
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \
cidr_netmask="32" op monitor interval="10s" \
meta migration-threshold="10"

而对于nginx的“webserver”,使用下面的命令创建资源。

sudo crm configure primitive webserver \
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \
op start timeout="40s" interval="0" \
op stop timeout="60s" interval="0" \
op monitor interval="10s" timeout="60s" \
meta migration-threshold="10"

完成后,使用以下命令检查新资源“virtual_ip”和“webserver”。 确保所有资源的状态为“开始”。

crm resource status

将新的Virtual_ip和Web服务器资源添加到群集

最后,我们需要为故障转移IP服务的新配置添加一个组。 我们要在'virtual_ip'资源上使用浮动IP迁移“web服务器”资源上的“Nginx”服务。

我们已经创建了浮动IP和服务,现在使用以下命令将这些资源添加到名为“hakase_balancing”的新组。 您可以在这里选择自己的组名,只需确保替换名称,然后使用它。

sudo crm configure group hakase_balancing virtual_ip webserver

已经定义了一组名为“hakase_balancing”的新资源。 您可以使用以下命令检查它。

crm resource show

您将获得一个名为hakase_balancing的组与成员的“virtual_ip”和“webserver”资源。

为集群添加新的组资源

集群配置已完成。

第7步 - 测试

测试节点状态和集群状态。

crm status

群集节点状态和资源状态

我们有3个状态为“Online”的节点。

我们有一个名为“hakase_balancing”的资源组,它现在在'web01'节点上运行。

从网络浏览器测试Nginx Web服务器。 访问浮动IP地址,我的测试服务器的名称是 - ha-web.co 。 在此处使用您为服务器选择的名称。

Nginx高可用性与Pacemaker,Corosync和Crmsh在Ubuntu 16.04

所有资源都在“web01”节点上。

测试主动 - 被动群集或故障转移

通过在'web01'节点上执行下面的命令,在'web01'服务器上停止集群。

crm cluster stop

您会得到结果' INFO:集群服务停止 '。

现在登录到'web02'节点并检查集群状态。

crm status

Ubuntu 16.04上的Nginx高可用性集群


现在,您得到“web01”节点为“离线”的结果,并将virtual_ip和webserver的资源切换到节点“web02”。

当您再次访问浮动IP“ ha-web.co ”时,您将获得web02页面。

Ubuntu 16.04上的Nginx高可用性集群 - 资源从web01自动移动到web02服务器

Ubuntu 16.04上的Nginx高可用性与Pacemaker,Corosync和Crmsh已经成功安装和测试。

参考