在本教程中,我将逐步介绍如何使用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
- 根特权
我们将要做什么?
- 映射主机文件。
- 安装和配置Nginx。
- 安装Pacemaker,Corosync和Crmsh。
- 配置Corosync密钥。
- 开始所有服务。
- 创建和配置群集。
- 测试。
第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
第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的安装和配置已经完成。
第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提供高可用性的软件已经安装。
第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/
接下来,转到'/ 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/
全部完成后,转到“web02”和“web03”服务器,然后检查文件。
ssh root@web02
cd /etc/corosync/
ls -lah
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地址。
第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
您将看到以下结果。
接下来,我们需要为集群创建一些新的资源。 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
最后,我们需要为故障转移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 。 在此处使用您为服务器选择的名称。
所有资源都在“web01”节点上。
测试主动 - 被动群集或故障转移
通过在'web01'节点上执行下面的命令,在'web01'服务器上停止集群。
crm cluster stop
您会得到结果' INFO:集群服务停止 '。
现在登录到'web02'节点并检查集群状态。
crm status
现在,您得到“web01”节点为“离线”的结果,并将virtual_ip和webserver的资源切换到节点“web02”。
当您再次访问浮动IP“ ha-web.co ”时,您将获得web02页面。
Ubuntu 16.04上的Nginx高可用性与Pacemaker,Corosync和Crmsh已经成功安装和测试。