文章目录
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
- 创建一个二节点的群集
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 验证群集配置信息会有错误
- 创建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
- 当停止节点server1服务时,另一个节点server4自动接管,自动添加VIP
pcs cluster stop server1
- 重新启动节点server1,资源不会回切,server4保持不变 继续接管
pcs cluster start server1
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
- 创建组(使两个资源被同一节点管理)
pcs resource group add hagroup vip haproxy
:按照命令顺序,先管理vip,再是haproxy
- 访问:http://172.25.17.100/status
4.2 测试1:关闭节点的pcs服务
- 关闭节点server4发现,自动被空闲节点server1接管,server4重新开启服务后,不会回切
pcs node standby
pcs node unstandby
4.3 测试2:关闭haproxy服务
- 关闭haproxy服务后,系统检测到又会自动开启,显示状态时会有日志显示haproxy关闭过
4.4 测试3:删除vip
- 删除后,检测到vip被删除,会自动添加
4.5 测试4:禁掉硬件设备
ip link set down 网卡接口
- 发现资源被自动接管到另一空闲节点server4,但是server1仍旧以为是自己接管,等到server1重启后才显示正常
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
- 创建目录/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/
5.2 被检测节点配置(集群服务器)
- 所有集群服务器安装fence-virt
yum install fence-virt.x86_64 -y
ssh server4 yum install fence-virt.x86_64 -y
- 查看fence代理
stonith_admin -I
- 添加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:虚拟机名称
- 开启STONITH组件功能
pcs property set stonith-enabled=true
- 验证群集配置信息
crm_verify -LV
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
:启动服务
- 配置文件
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
:重新读取配置文件
- 测试:在测试主机配置解析后再访问
vim /etc/hosts
192.168.17.1 demo.westos.org