回顾:上一章节我们讲解了LInux系统原生的lvs+keepalived的高可用套件
本章节我们来讲解红帽自己提供的高可用的套件,本章节所使用的系统是RHEL7.3,下一章节讲解RHEL6.5的使用
一 相关概念和工具的理解
说明:本章节不打算太深入的讲解,一是水平不够,而是精力也不够,后续会补充!
(1)pacemaker简单介绍
Pacemaker是 Linux环境中使用最为广泛的开源集群资源管理器
Pacemaker利用集群基础架构(Corosync或者 Heartbeat)提供的消息和集群成员管理功能,实现节点和资源级别的故障检测和资源恢复,从而最大程度保证集群服务的高可用。
从逻辑功能而言,pacemaker在集群管理员所定义的资源规则驱动下,负责集群中软件服务的全生命周期管理,这种管理甚至包括整个软件系统以及软件系统彼此之间的交互。
Pacemaker在实际应用中可以管理任何规模的集群,由于其具备强大的资源依赖模型,这使得集群管理员能够精确描述和表达集群资源之间的关系(包括资源的顺序和位置等关系)。同时对于任何形式的软件资源,通过为其自定义资源启动与管理脚本(资源代理),几乎都能作为资源对象而被 Pacemaker管理。
Pacemaker仅是资源管理器,并不提供集群心跳信息,由于任何高可用集群都必须具备心跳监测机制,因而很多初学者总会误以为 Pacemaker本身具有心跳检测功能,而事实上 Pacemaker的心跳机制主要基于 Corosync或 Heartbeat来实现
pacemaker只是作为HA的资源管理器,所以不要想当然理解它能够直接管控资源,如果你的资源没有做脚本配置那么对于pacemaker来说它就是不可管理的。
资源代理:RA
实践证明:pacemaker+corosync则是比较成熟可靠的,本章节以此进行讲解!
目前pacemaker支持主流的操作系统
(2)pcs讲解
如果你用过RHEL6.5的套件,你就会明白pcs的含义,6.5中是以GUI的方式对其进行配置,而7系列则只提供了命令行接口
最为常用的管理命令:
cluster #配置集群选项和节点
status #查看当前集群资源和节点以及进程状态
resource #创建和管理集群资源
constraint #管理集群资源约束和限制
property #管理集群节点和资源属性
config #以用户可读格式显示完整集群配置信息
详细解释参照官网
corosync是集群框架引擎程序,pacemaker是高可用集群资源管理器,crmsh是pacemaker的命令行工具
二 实战
(0)实验环境的配置
(1)主机名和虚拟机的名字
server(主机-->hostname的名字)number wzj(虚拟机的名字)number
(2)本地域名解析(几台全都做)和网络的配置
IP(number) server(number)
注意:一定要通过 ping 域名的方式看是否能通信!
(3)防火墙和selinux全部关闭,开机不自启!
(4)架构的简单说明
server1(主) server(备用) -->集群的资源管理器(LB)
server2 server 3 -->后端的资源服务器
client -->客户端
(1)由于是红帽自身提供的,所以不需要第三方的软件源,使用其自带的yum源,首先配置yum源
[rhel7.3]
name="rhel7.3 repo"
baseurl=http://IP/rhel7.3
gpgcheck=0
enabled=1
[HighAvailability]
name="HighAvailability"
baseurl=http://IP/rhel7.3/addons/HighAvailability
gpgcheck=0
enabled=1
[ResilientStorage]
name="ResilientStorage"
baseurl=http://IP/rhel7.3/addons/ResilientStorage
gpgcheck=0
enabled=1
# 主节点和备用的同上!
注意:一定要测试!
(2)软件安装
yum install pacemaker corosync pcs -y
# 主和备用的都需要安装!
(3)免密认证
#(1)密钥
ssh-keygen
#(2)免密认证-->比较粗暴(可以给server1的某个指定用户,不需要所有的用户)
ssh-copy-id server1
ssh-copy-id server4 #同上!
#(3)测试
ssh server1
ssh server4
# 注意:server1和server4左同样的事情!
(4)关于服务
systemctl start pcsd #开启服务
systemctl enable pcsd #开机自启
systemctl status pcsd #查看状态
# sercer1和sercer4做同样的事情!
(5)安装了软件之后生成一个hacluster的用户,设置密码
[root@server1 yum.repos.d]# id hacluster
uid=189(hacluster) gid=189(haclient) groups=189(haclient)
[root@server1 yum.repos.d]# passwd hacluster
Changing password for user hacluster.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
# server1和server4双方密码必须一致!
(6)配置群集节点的认证(serevre1和server4),并创建集群!
(7)启动集群服务并开机自启
现象:此时server1和server4都在线,但是目前还没有资源(因为没有配置资源代理)!
crm_mon #也可以测试
# 核心:2 nodes and 0 resources configured
补充:一定要做NTP的时间同步,由于二者的时间同步所以这里省略了!
(7)检验集群配置是否有错误
错误的原因:默认是开启fence机制的爆头机制的,但是目前还没有使用fence的机制,为了下面的对比实验!
补充:false的情况下,分布式锁管理器 (DLM) 等资源以及依赖DLM 的所有服务(例如 cLVM2、GFS2 和 OCFS2)都将无法启动
2.11最下面的stonith的解释
一句话:没有 Fencing设备时,禁用STONITH 组件功能!
stonithd:集群 fence进程(Shoot The Other Node In The Head deamon)
no-quorum-policy:忽略投票机制,防止主节点来回的迁移!
具体:server1故障,server4成为主节点,server1恢复,server4还是主节点,主节点不回切!
crm_verify命令:用来验证当前的集群配置是否有错误
(8)查看集群资源代理(RA)
[root@server1 yum.repos.d]# pcs resource standards
ocf
lsb
service
systemd
# pcs resource list ## 查看支持资源列表(systemed-->RHEL7独有的)
常见的资源代理类型
(9)开始资源的配置
Example: Create a new resource called 'VirtualIP' with IP address
192.168.0.99, netmask of 32, monitored everything 30 seconds,
on eth2:
# 核心:多块网卡时候选择网卡!
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 \
ip=192.168.0.99 cidr_netmask=32 nic=eth2 \
op monitor interval=30s
VIP资源的配置:采用OCF(open Cluster Framework--->开放式集群框架)资源管理!
操作:创建资源,然后将资源添加到资源组中,并调整资源的顺序!
服务:没有采用脚本的形式(rhel6,为了兼容),而是采用RHEL7的systemed来管理!
说明:Systemd通过单元文件来启停和控制服务!
(10)测试
注意:因为resource manager会自动管理这些服务运行或停止,不能手动操作(例如:停止httpd服务、重启、设置为开机自启动)
目的:看主节点服务出现故障,提供资源服务器是不是跳转,看有没有心跳的检测?
server1测试
pcs cluster stop server1
(11)加入fence机制
目的:解决资源和服务不同步的问题,让资源和服务在同一台后端服务器上!
注意:真实主机一定要开启fence的服务!
# (1)真机安装fence的软件
yum install fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 -y
# (2)进行fence的配置
fence_virtd -c # 核心是网络接口选择br0不是默认的private
# 说明:生成配置文件--->/ect/fence_virt.conf
# (3)根据配置文件生成key的位置
mkdir /etc/cluster #创建目录
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 #生成key文件
# (4)server1和server4节点都创建目录
mkdir /etc/cluster #创建目录
# (5)真机复制key文件到server1和server4指定的目录
# (6)真机开启服务并查看状态
systemctl start fence_virtd.service
systemctl status fence_virtd.service
server1和server2的操作
yum install fence-virt -y
server1中添加fence并开启stonith的机制
# (1)查看支持的配置类型
stonith_admin -I
# (2)添加fence机制
pcs stonith create vmfence fence_xvm pcmk_host_map="server1:wzj1;server4:wzj4" op monitor interval=1min
# 格式:主机名(hostname):虚拟机的名字-->不要有特殊符号(.等-->按照表识符来定义)
# 添加错误-->通过pcs stonith delete vmfence来删除!注意删除crm_mon来检测一下!
# (3)开启爆头的策略
pcs property set stonith-enabled=true
现象
crm_mon
测试
# server1模拟把内核写崩溃了!
echo c > /proc/sysrq-trigger
目的:模拟主节点发生故障,fence的转义,以及主节点是否会开启!
实验现象
# server4模拟把内核写崩溃了!
echo c > /proc/sysrq-trigger
渐变过程
最后的结果
注意:因电脑的性能不同启动时间不一样,所以耐心等待下哟!
三 相关原理参考
pacemaker讲解比较好的文章
有资源代理的部分讲解
pcs常用命令的讲解
排错
补充:了解云计算和集群的专业术语!
四 排错
pcs stonith cleanup
# 一定要清理错误!