[实验] Apache + Pacemaker 网站服务高可用的实现

纪念:站主于 2019 年 8 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程

注意:

在实现 Apache + Pacemaker 网站服务高可用之前要先安装 Pacemaker 集群

正文:

步骤一:Pacemaker 高可用网站服务的解析

1.1 集群本身需要的服务

需要额外一台服务器提供 NFS 远程目录服务

1.2 本 Pacemaker 高可用网站服务的特点

1) 使用其他服务器提供的 NFS 服务器作为网站的网页目录
2) 提供网站 服务
3) 提供虚拟 IP 地址服务
4) 以上三项服务器都实现高可用
5) 唯一的单点故障在于额外的那台服务器提供的 NFS 远程目录服务器

步骤二:前期准备

2.1 在所有集群服务器上安装 httpd

(在所有集群服务器上执行以下步骤)

# yum -y install httpd

2.2 确保 httpd 不会被 SELinux 限制

(在所有集群服务器上执行以下步骤)

# setsebool -P httpd_use_nfs 1

(补充:这里是要求 SELinux 的布尔值让 httpd 也可以使用 NFS 服务)

2.3 确保 httpd 没有启动

(在所有集群服务器上执行以下步骤)

# systemctl stop httpd
# systemctl disable httpd

步骤三:部署 Pacemaker 的网站高可用服务

3.1 在 网站资源组中创建名为 webip 的虚拟 IP 地址资源

(只在一台集群里的服务器上执行以下步骤)

# pcs resource create webip IPaddr2 ip=192.168.0.20 cidr_netmask=24 --group=web

3.2 在 网站资源组中创建名为 webnfs 挂载其他服务器的 NFS 服务的资源

(只在一台集群里的服务器上执行以下步骤)

# pcs resource create webnfs Filesystem device=192.168.8.21:/content directory=/var/www/html fstype=nfs options=ro --group web

(注意:这里的 Filesystem 指的是其他服务器搭建的 NFS 服务,这个服务需要提前搭建好,可以参考 https://eternalcenter.com/nfs/ 里的内容)

3.3 在网站资源组中创建名为 webserver 的网站资源

(只在 1 台集群里的服务器上执行以下步骤)

# pcs resource create webserver apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group web

[命令] Pacemaker 命令 pcs resource (管理资源)

注意:

在使用 Pacemaker 命令之前要先安装 Pacemaker 集群 ,并且需要 root 权限

正文:

内容一:pcs resource 命令

1.1 pcs resource 命令的常用选项

1) interval=value

定义资源监控的时间,如果不设置的话,就使用的是 resource agent ,每 60 秒检测一次

2) timeout=value

设置操作的等待时间,如果时间结束了某项操作还没有完成,则自动失败

3) on-fail=action

如果操作失败,则会执行以下动作

4) ignore

忽略所有失败的操作

5) block

当 fence 没有被配置时,停止执行操作

6) stop

停止处于激活状态的集群

7) restart

重启资源

8) fence

当 fence 有被配置时,当某个资源停止时隔离运行此资源的主机

9) standby

将所有资源从他正在运行的主机上移到另 1 台服务器

1.2 pcs resource 命令选项的使用案例

# pcs resourece create webserver apache \
> configfile="/etc/httpd/conf/http.conf" \
> statusurl="http:?/127.0.0.1/server-status" --group myweb \
> op monitor interval=20s timeout=30s


补充:这里以创建
1) 名为 webserver
2) 配置文件是 /etc/httpd/conf/http.conf
3) 状态链接是 http:?/127.0.0.1/server-status
4) 组名是 myweb
5) 监控间隔是 20 秒
6) 延迟时间是 30 秒
的 apache 资源为例

内容二:pcs resource 资源显示相关的命令

2.1 显示所有可用的资源列表

# pcs resource list

2.2 显示具体的某个可用资源的介绍

# pcs resource describe <resource>

2.3 显示所有的 pcs 资源

# pcs resource show

2.4 显示某个 pcs 资源

# pcs resource show <resource>

2.5 显示所有 pcs 资源被限制的情况

# pcs constraint list

内容三:pcs resource 资源增、删、改相关的命令

3.1 修改 pcs 资源

# pcs resource update <resource> <option>

3.2 删除 pcs 资源

# pcs resource delete <resource> 

3.3 在某个组里面添加某个资源

# pcs resource group add <group> <resource>

3.4 在某个组里面删除某个资源

# pcs resource group remove <group> <resource>

内容四:pcs resource 资源管理相关的命令

4.1 停用某个 pcs 资源

# pcs resource disable <resource>

4.2 启用某个 pcs 资源

# pcs resource enable <resource>

4.3 移动 pcs 资源到另 1 个主机

# pcs resource move <resource> <host>

4.4 指定某个 pcs 资源只能在某个主机上运行

# pcs resource ban <resource> <host>

4.5 清除某个 pcs 资源只能在某个主机上运行的限制

# pcs resource clear <resource> <host>

内容五:pcs resource 资源监控相关的命令

5.1 删除某个资源的监控

# pcs resource op remove <resource> monitor

5.2 添加某个资源的监控

# pcs resource op add <resource> monitor <fence parameter> onfail=fence

内容六:pcs resource 资源排错相关的命令

6.1 显示某个 pcs 资源失败的次数

# pcs resource failcount show <resource>

6.2 检查某个资源的情况

# pcs resource debug-start firstwebserver --full

[命令] Pacemaker 命令 pcs stonith (管理隔离)

注意:

在使用 Pacemaker 的 fence 之前要先安装 Pacemaker 集群 ,并且需要 root 权限

正文:

内容一:fence 介绍

fence 的作用是隔离不需要的主机,当一台主机和集群失去联系时,将其隔离,以防止脑裂

内容二:pcs stonith 命令的格式

# pcs stonith <option> name fencing_agent <parameter>

内容三:fence 管理

3.1 显示所有可用的 fence 的列表

# pcs stonith list

3.2 显示某种可用 fence 的详细信息

# pcs stonith describe fence_rhevm

3.3 显示所有已配置的 fence 状况

# pcs stonith fence show --full

3.4 删除 fence

3.4.1 删除某个 fence
# pcs stonith delete <fence>
3.4.2 删除当前所有的 fencing 资源
# for i in fence_node{a..d}; do
> pcs stonith delete &{I}
> done

3.5 创建 fence_vmware_soap 的案例

# pcs stonith create vmfence fence_vmware_soap ipaddr=192.168.0.254 login="vmfence" passwd="vmfence" ssl_insecure=1 pcmk_host_check="static-list" pcmk_host_list="pacemaker0 pacemaker1 pacemaker2"


补充:这里以创建
1) 名为 vmfence
2) fence 服务器的 IP 地址为 192.168.0.254
3) fence 服务器的用户名为
4) fence 服务器的密码为
5) 被 fence 监控的服务器为 pacemaker0、pacemaker1 和 pacemaker2
的 fence 为例

(注意:fence_vmware_soap 需要在 vmware 环境下才能被使用,且需要设置好 vmfence 的用户、密码、IP 等)

内容四:使用 fence 管理服务器

4.1 隔离某个台服务器

# pcs stonith fence <host>

4.2 从 fencing 删除某台服务器

# pcs stonith delete <host>

[命令] Pacemaker 命令 pcs status (显示 Pacemaker 的状态)

注意:

在使用 Pacemaker 命令之前要先安装 Pacemaker 集群 ,并且需要 root 权限

正文:

命令一:只显示与集群相关的信息

# pcs status cluster

命令二:只显示资源组和他们的资源

# pcs status groups

命令三:只显示资源组和它们的资源

# pcs status resources

命令四:只显示集群主机的配置状态

# pcs status nodes

命令五:只显示 corosync 的状态

# pcs status corosync

命令六:只显示 pcsd 在每个主机上的配置状态

# pcs status pcsd

命令七:显示 pcs 总共的主机数,当前的主机数,最大期望投票数,最低投票数要求,当前生效投票数

# pcs corosync-quorumtool -m

(注意:为了防止脑裂,PCS 的最低投票数必须高于总主机数的 50%)

命令八:显示集群状态和配置

# crm_mon -r

命令九:显示最近的投票信息

# watch -n1 corosync-quorumtool

(注意:当期望投票数发生变化时, # pcs corosync-quorumtool -m 命令不会自动更新,所以最好使用 # watch -n1 corosync-quorumtool 命令)

命令十:显示所有的 pcs 资源

# pcs resource show

命令十一:显示某个 pcs 资源

# pcs resourece show <resource>

命令十二:显示所有 pcs 资源被限制的列表

# pcs constraint list

命令十三:显示现有的资源限制信息

# pcs constraint

命令十四:显示现有的详细资源限制信息

# pcs constraint --full

命令十五:显示资源被限制到某台服务器的信息

# crm_simulate -sL

[命令] Pacemaker 命令 pcs cluster (管理节点)

注意:

在使用 Pacemaker 命令之前要先安装 Pacemaker 集群 ,并且需要 root 权限

正文:

内容一:启动服务器

1.1 启动某台服务器

# pcs cluster start <server>

1.2 启动所有服务器

# pcs cluster start --all
pacemaker0: Starting Cluster (corosync)...
pacemaker1: Starting Cluster (corosync)...
pacemaker2: Starting Cluster (corosync)...
pacemaker2: Starting Cluster (pacemaker)...
pacemaker1: Starting Cluster (pacemaker)...
pacemaker0: Starting Cluster (pacemaker)...

内容二:关闭服务器

2.1 关闭某台服务器

# pcs cluster stop <server>

2.2 关闭所有的服务器

# pcs cluster stop --all
pacemaker1: Stopping Cluster (pacemaker)...
pacemaker2: Stopping Cluster (pacemaker)...
pacemaker0: Stopping Cluster (pacemaker)...
pacemaker1: Stopping Cluster (corosync)...
pacemaker0: Stopping Cluster (corosync)...
pacemaker2: Stopping Cluster (corosync)...

(注意:当当前主机被关闭了之后,就无法在此服务器上使用 pcs 的其他相关命令,除非先启动本服务器)

内容三:设置随 pcs 服务器启动而自动启动服务器

3.1 让某台服务器随 pcs 服务一同启动

# pcs cluster enable <server>

3.2 让所有服务器都随 pcs 服务一同启动

# pcs cluster enable --all

内容四:设置取消随 pcs 服务器启动自动启动服务器

4.1 取消让某台主机随 pcs 服务器一同启动

# pcs cluster diablle <server>

4.2 取消让所有服务器都随 pcs 服务一同启动

# pcs cluster disable --all

内容五:在集群里新添加 1 台服务器

5.1 新添加 1 台服务器的准备工作

1) 在要被添加的服务器的防火墙上开放 pacemaker 的端口
2) 在要被添加的服务器上安装 pcs fence-agents-rht 以及他的依赖包
3) 在要被添加的服务器上启动 pcsd 服务,并将他设置为开机自启
4) 在要被添加的服务器上将 hacluster 用户的密码修改为 redhat

5.2 在集群里添加新的服务器

(在任意一台集群里的服务器上输入以下命令以加入新的服务器)

# pcs cluster node add <new server>
# pcs cluster auth
Username: hacluster
Password: 
......

(补充:在这里也可以使用 -u<用户> 和 -p<密码> 参数非交互实现命令输入)

内容六:在集群里删除 1 台服务器

6.1 在集群里删除 1 台服务器

# pcs cluster node remove <server>

6.2 在集群里删除 1 台服务器后,最好连 fence 监控也一同删除

# pcs stonith remove fence_deletednode

内容七:让服务器失效

7.1 让某台服务器失效并处于待机状态

# pcs cluster standby <server>

7.2 让所有服务器失效并处于待机状态

# pcs cluster standby --all

内容八:让失效的服务器重新回到活跃状态

8.1 让某台服务器从失效状态回归到活跃状态

# pcs cluster unstandby <server>

8.2 让所有服务器从失效状态回归到活跃状态

# pcs cluster unstandby --all

内容九:生成带配置集群的案例

# pcs cluster setup --start --name testcluster --last_man_standing --wait_for_all pacemkaer10 pacemaker11 pacemaker12

(补充:这里 pacemaker 集群的成员有 pacemaker10、pacemaker11 和 pacemaker12)

内容十:修改集群配置的案例

10.1 关闭所有的主机

# pcs cluster stop --all

10.2 修改 /etc/corosync/corosync.conf 文件中

# vim /etc/corosync/corosync.conf

将部分内容修改如下:

......
quorum {
provider: corosync_votequorum
last_man_standing: 1
wait_for_all: 1
}
......

10.3 同步当前服务器的 /etc/corosync/corosync.conf 文件到其他所有服务器

# pcs cluster sync

10.4 开启所有服务器

# pcs cluster start --all

补充:pcs cluster setup 命令的常用选项

1)  --wait_for_all

当所有集群成员都处于 online 的时候才启动集群投票,主要用于阻止被隔离的主机参与投票

2) --auto_tie_breaker

最低投票从从总数的 50% +1 变为 50% ,如果被分割的主机群两边的数量相等,则拥有最小主机 ID 的那一边才会生效

(补充:–auto_tie_breaker 主要用于集群主机数是双数的主机群)

3) –last_man_standing

有了这个参数之后每隔 10 秒钟,就重新计算一次期望投票数,主要用于人为关闭主机后快速进行重新投票
和 –auto_tie_breaker 选项结合可以让整个集群只有一台主机处于激活状态

(注意:当期望投票数发生变化时, # pcs corosync-quorumtool -m 命令不会自动更新,所以最好使用这个命令 watch -n1 corosync-quorumtool)

4) –two_node

设置整个集群只包含有两台主机,期望投票数是1,他会自动启用 wait_for_all 选项