Redhat7.5上使用Pacemaker和Corosync搭建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服务器高可用性。
Redhat7.5上使用Pacemaker和Corosync搭建Nginx高可用系统相关推荐
- Nginx配置——搭建 Nginx 高可用集群(双机热备)
Nginx配置--搭建 Nginx 高可用集群(双机热备) https://blog.csdn.net/zxd1435513775/article/details/102508573?utm_medi ...
- 搭建Nginx高可用集群(keepalived+双机热备)
一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...
- 利用两台虚拟机搭建Nginx高可用集群、宕机测试、宕机恢复
这里写目录标题 一.准备阶段: 二.安装阶段: 1.安装pcre及其依赖 2.安装ngnix 3.安装keepalived 三.配置阶段: 四.启动阶段: 1.集群测试 2. 宕机测试 一.准备阶段: ...
- 一次性搭建Hadoop高可用集群
前期准备: 1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 /etc/hosts 注意:如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/ho ...
- mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用
实验用主机: 提供iscsi磁盘:172.16.103.1,提供iscsi磁盘 高可用主机:172.16.103.2,172.16.103.3 实验拓扑: 实验步骤: 一.配置172.16.103.1 ...
- 搭建 mysql-mmm 高可用群集
搭建 mysql-mmm 高可用群集 MMM 简介 : MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序. ...
- 基于keepalived搭建MySQL高可用集群
MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...
- 搭建一个redis高可用系统
一.单个实例 当系统中只有一台redis运行时,一旦该redis挂了,会导致整个系统无法运行. 单个实例 二.备份 由于单台redis出现单点故障,就会导致整个系统不可用,所以想到的办法自然就是备份( ...
- 搭建一个高可用的镜像仓库,这是我见过最详细、最简单的教程
作者 | 小碗汤 来源 | 我的小碗汤 今天分享一篇搭建一个高可用镜像仓库的教程.详细中夹杂着简单~. Harbor 部署架构图 harbor 使用 helm 部署在 k8s 集群中,通过 ingre ...
最新文章
- “AS3.0高级动画编程”学习:第二章转向行为(上)
- 路由器中的管理间距和量度参数
- linux decode函数,Oracle 中 decode 函数用法
- mysql dba管理_Mysql DBA 高级运维学习之路-mysql数据库常用管理应用
- 前端常用 JavaScript 方法封装
- java linux获取实时cpu_用java取得linux系统cpu、内存的实时信息(参考别人代码)...
- The Greatest C++ project
- python优秀源码2019_SUCTF2019,python源码分析,漏洞原理
- (软考中级--信息安全工程师)三、密码学基本理论
- ttl接地是高电平还是低电平_数电练习题
- TDA4VM芯片手册阅读笔记
- python爬虫-字体反爬全流程(woft文件-转换字体-字体图片-图片识别全流程)
- win10 安装pytorch gpu 及 解决报错“OSError: [WinError 126] 找不到指定的模块
- 鹏业安装算量软件通风扣减功能
- 什么是根目录,网站根目录是哪个?
- OpenJudge 海贼王之伟大航路
- 类似易企秀的UI框架 整屏滑动
- APK签名机制原理详解
- 中国视频展台市场现状研究分析与发展前景预测报告(2022)
- html5显示文件后缀,如何显示文件后缀名称