天天看点

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

文章目录

  • 1. Pacemaker简介
    • 1.1 Pacemaker简介
    • 1.2 pcs 简介
    • 1.3 pcs常用管理命令
  • 2. 安装与配置
  • 3. 测试
  • 4. pacemaker与HAProxy
    • 4.1 配置
    • 4.2 测试1:关闭节点的pcs服务
    • 4.3 测试2:关闭haproxy服务
    • 4.4 测试3:删除vip
    • 4.5 测试4:禁掉硬件设备
  • 5. fence(防止集群服务器假死)
    • 5.1 检测主机安装与配置
    • 5.2 被检测节点配置(集群服务器)
    • 5.3 测试1:损坏内核
    • 5.4 测试2:禁掉硬件设备
  • 6. lvs与nginx

1. Pacemaker简介

1.1 Pacemaker简介

Pacemaker是 Linux环境中使用最为广泛的开源集群资源管理器, Pacemaker利用集群基础架构(Corosync或者 Heartbeat)提供的消息和集群成员管理功能,实现节点和资源级别的故障检测和资源恢复,从而最大程度保证集群服务的高可用。从逻辑功能而言, pacemaker在集群管理员所定义的资源规则驱动下,负责集群中软件服务的全生命周期管理,这种管理甚至包括整个软件系统以及软件系统彼此之间的交互。 Pacemaker在实际应用中可以管理任何规模的集群,由于其具备强大的资源依赖模型,这使得集群管理员能够精确描述和表达集群资源之间的关系(包括资源的顺序和位置等关系)。同时,对于任何形式的软件资源,通过为其自定义资源启动与管理脚本(资源代理),几乎都能作为资源对象而被 Pacemaker管理。此外,需要指出的是, Pacemaker仅是资源管理器,并不提供集群心跳信息,由于任何高可用集群都必须具备心跳监测机制,因而很多初学者总会误以为 Pacemaker本身具有心跳检测功能,而事实上 Pacemaker的心跳机制主要基于 Corosync或 Heartbeat来实现

  • pcsd.service:服务名称

1.2 pcs 简介

pcs:Pacemaker集群的管理工具

  • Pacemaker社区推出了两个常用的集群管理命令行工具,即集群管理员最为常用的 pcs和 crmsh命令;
  • 此外,需要注意的是, pcs命令行的使用对系统中安装的 pacemaker和 corosync软件版本有一定要求,即 Pacemaker1.1.8及其以上版本, Corosync 2.0及其以上版本才能使用 pcs命令行工具进行集群管理

1.3 pcs常用管理命令

cluster:配置集群选项和节点
status:查看当前集群资源和节点以及进程状态
resource:创建和管理集群资源
constraint:管理集群资源约束和限制
property:管理集群节点和资源属性
config:以用户可读格式显示完整集群配置信息
           

2. 安装与配置

实验环境:1. 防火墙关闭 2. selinux为Disabled

两台服务器(之间做好免密):

server1:192.168.17.1

server4:192.168.17.4

  • 软件仓库配置

vim /etc/yum.repos.d/westos.repo

[dvd]
name=rhel7.6 BaseOS
baseurl=http://192.168.17.1/rhel7.6/
gpgcheck=0
[HighAvailability]
name=rhel7.6
baseurl=http://192.168.17.1/rhel7.6/addons/HighAvailability
gpgcheck=0
           
  • 安装pacemaker与pcs与psmisc与policycoreutils-python
yum install -y pacemaker pcs psmisc policycoreutils-python 
ssh server4 yum install -y pacemaker pcs psmisc policycoreutils-python
           
  • 永久开启服务
systemctl enable --now pcsd.service
ssh server4 systemctl enable --now pcsd.service
           
  • 设置密码
echo westos | passwd --stdin hacluster 
ssh server4 'echo westos | passwd --stdin hacluster'
           
  • 配置群集节点认证

pcs cluster auth server1 server4

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 创建一个二节点的群集

pcs cluster setup --name mycluster server1 server4

  • 启动群集

pcs cluster start --all

pcs cluster enable --all

  • 禁用STONITH组件功能

pcs property set stonith-enabled=false

若是不禁用
pcs status 查看状态时会有警告
crm_verify -LV 验证群集配置信息会有错误
           
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 创建VIP
pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.17.100 op monitor interval=30s
#参数都可以通过pcs resource create --help查看
           

3. 测试

  • 在节点server1上查看,显示节点server1开启,并自动添加VIP
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 当停止节点server1服务时,另一个节点server4自动接管,自动添加VIP

pcs cluster stop server1

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 重新启动节点server1,资源不会回切,server4保持不变 继续接管

pcs cluster start server1

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

4. pacemaker与HAProxy

4.1 配置

  • 两个服务器节点均安装haproxy,且关闭haproxy服务,配置也相同
yum install -y haproxy
systemctl disable --now haproxy.service
           
  • 创建资源

pcs resource create haproxy systemd:haproxy op monitor interval=30s

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 创建组(使两个资源被同一节点管理)

pcs resource group add hagroup vip haproxy

:按照命令顺序,先管理vip,再是haproxy

  • 访问:http://172.25.17.100/status
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

4.2 测试1:关闭节点的pcs服务

  • 关闭节点server4发现,自动被空闲节点server1接管,server4重新开启服务后,不会回切

pcs node standby

pcs node unstandby

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

4.3 测试2:关闭haproxy服务

  • 关闭haproxy服务后,系统检测到又会自动开启,显示状态时会有日志显示haproxy关闭过
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

4.4 测试3:删除vip

  • 删除后,检测到vip被删除,会自动添加
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

4.5 测试4:禁掉硬件设备

ip link set down 网卡接口

  • 发现资源被自动接管到另一空闲节点server4,但是server1仍旧以为是自己接管,等到server1重启后才显示正常
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

5. fence(防止集群服务器假死)

fence作用:在HA集群坏境中,备用服务器B通过心跳线来发送数据包来看主服务器A是否还活着,主服务器A接收了大量的客户端访问请求,服务器A的CPU负载达到100%响应不过来了,资源已经耗尽,没有办法回复服务器B数据包时,(回复数据包会延迟),服务器B认为服务器A已经挂了,于是备用服务器B把资源夺过来,自己做主服务器,过了一段时间服务器A响应过来了,服务器A觉得自己是老大,服务器B觉得自己也是老大,他们两个就挣着抢夺资源,集群资源被多个节点占有,两个服务器同时向资源写数据,破坏了资源的安全性和一致性,这种情况的发生叫做“脑裂”。服务器A负载过重,响应不过来了,有了Fence机制,Fence会自动的把服务器A给kill掉,以阻止“脑裂”的发生。
原理:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。
类型:硬件Fence:电源Fence,通过关掉电源来踢掉坏的服务器 软件Fence:Fence卡(智能卡),通过线缆、软件来踢掉坏的服务器

5.1 检测主机安装与配置

fence主机:192.168.17.250
  • 安装fence-virtd、fence-virtd-libvirt、fence-virtd-multicast,网络监听器、电源管理器、内核层面控制虚拟机

yum install -y fence-virtd

yum install -y fence-virtd-libvirt

yum install -y fence-virtd-multicast

  • 编写fence信息

fence_virtd -c

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 创建目录/etc/cluster,切到其目录下,生成key文件

mkdir /etc/cluster

cd /etc/cluster

dd if=/dev/urandom of=fence_xvm.key bs=128 count=1

:生成key文件

  • 重启fence_virtd服务,可以查看到1229端口

systemctl restart fence_virtd

  • 传输key文件到被监测节点(在所有节点提前创建/etc/cluster目录)

scp fence_xvm.key [email protected]:/etc/cluster/

scp fence_xvm.key [email protected]:/etc/cluster/

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

5.2 被检测节点配置(集群服务器)

  • 所有集群服务器安装fence-virt

yum install fence-virt.x86_64 -y

ssh server4 yum install fence-virt.x86_64 -y

  • 查看fence代理

stonith_admin -I

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 添加fence
pcs stonith create vmfence fence_xvm pcmk_host_map="server1:vm1;server4:vm4" op monitor interval=60s
选项在pcs stonith describe fence_xvm都可以查看到
#pcmk_host_map的值以键值对书写,如下:
#hostname:虚拟机名称
           
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 开启STONITH组件功能

pcs property set stonith-enabled=true

  • 验证群集配置信息

crm_verify -LV

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

5.3 测试1:损坏内核

  • 在节点server4测试:损坏内核,发现server4自动关机,再开启,实现监测功能!

echo c > /proc/sysrq-trigger

5.4 测试2:禁掉硬件设备

  • 禁掉server4硬件设备,发现server4自动关机,再开启,实现监测功能!

ip link set down eth0

6. lvs与nginx

  • 关闭pcs

pcs cluster stop --all

pcs cluster disable --all

  • 安装源码nginx

tar zxf nginx-1.18.0.tar.gz

cd nginx-1.18.0

yum install -y gcc pcre-devel openssl-devel

:安装gcc、pcre-devel、openssl-devel

vim auto/cc/gcc
#CFLAGS="$CFLAGS -g"
#注释此行(127行)可以使安装后的二进制文件更小
           

./configure --prefix=/usr/local/nginx --with-http_ssl_module

:configure脚本,指定安装路径等参数

make && make install

  • 配置环境变量并启动服务

cd /usr/local/nginx/sbin/

:变量配置此目录

vim .bash_profile

:编写变量

PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin
           

source .bash_profile

:重新读取文件,使变量生效

nginx

:启动服务

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 配置文件

vim /usr/local/nginx/conf/nginx.conf

117     upstream westos {
118     server 172.25.17.2:80;
119     server 172.25.17.3:80;
120     }
121 
122 server {
123     listen 80;
124     server_name demo.westos.org;
125     location / {
126         proxy_pass http://westos;
127     }
128 }
           

nginx -t

:检查语法错误

nginx -s reload

:重新读取配置文件

【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx
  • 测试:在测试主机配置解析后再访问

vim /etc/hosts

192.168.17.1     demo.westos.org
           
【Linux35】Pacemaker高可用集群+HAProxy+fence-virtd+nginx1. Pacemaker简介2. 安装与配置3. 测试4. pacemaker与HAProxy5. fence(防止集群服务器假死)6. lvs与nginx

继续阅读