基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装

1.HA 相关知识简介

此章节了解相关知识的童鞋可以跳过

1.1 什么是 HA?

Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

1.2 为什么要使用 HA?

目前 RPA 项目用 HA 做双机热备,也就是高可用集群。高可用集群是指一组通过硬件和软件连接起来的独立计算机,它们在用户面前表现为一个单一系统,在这样的一组计算机系统内部的一个或者多个节点停止工作,服务会从故障节点切换到正常工作的节点上运行,不会引起服务中断。从这个定义可以看出,集群必须检测节点和服务何时失效,何时恢复为可用。这个任务通常由一组被称为“心跳”的代码完成。在 Linux-HA 里这个功能由一个叫做 heartbeat 的程序完成。
如果一台设备在使用时出现宕机,另外一台服务器可以暂时代替第一台,而不影响系统的正常运行

1.3 什么是浮动 IP?作用是什么?

这里我就不去复制粘贴百度上的内容了,举个实际场景的例子,服务器 A 作为主机,IP 为 1.1.1.10,服务器 B 作为备机,IP 为 1.1.11, 浮动 IP 为 1.1.1.1,那么客户端和服务器通讯都和浮动 IP 进行通讯(在主机上配置的虚拟网卡),如果在主机发生宕机时,浮动 IP 会出现在备机上,客户端不会和真正的服务器 A/B 的地址进行通讯。
PS:在项目中,如果需要双机热备,需要 3 个 IP,需要和客户沟通索取。

2.CentOS/RHEL 7 安装 HA

2.1 安装前准备

由于系统版本的原因(网络管理机制等)RPA 服务端自带的 HA 包不能在 CentOS/RHEL7 中运行,CentOS 和 RedHat Linux(简称 RHEL)核心一样,本帖内容都适用。但必须为全新的安装环境,需要在平台安装之前安装 HA,否则会出现平台页面不能正常打开,需要再执行一遍平台安装脚本才可以 (有数据的服务器慎重操作),这个并非脚本的原因导致的,可能因为 HA 安装过程中新装了一些包导致环境变化不能运行。
需要提前配置好两台服务器的机器名及 /etc/hosts 文件,保证主备机保持开机并且网络通畅的状态,脚本本身也会对其做检测,以下是 /etc/hosts 文件配置范例:
基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
注意:机器名只能由字母和 "-“组成,切勿使用”.",使用“.”后小数点后面的内容无法显示出来。
修改机器名方法 (仅限 CentOS/RHEL7):
vi /etc/hostname
上述步骤完成后都需要进行重启才能生效

2.2 开始安装

  1. 将该文件2ea3e54bc5274a2ba5fdf4326ea0954a_ha_install_centos7_Final.zip
    (点击下载)解压(由于论坛不能上传 tar.gz 格式的文件),将 tar 包上传到服务器
  2. 使用 CRT 等远程连接工具命令行登录服务器,解压 ha_install_centos7_Final.tar.gz
    tar -zxvf ha_install_centos7_Final.tar.gz
  3. 配置 info.txt 配置信息
    cd ha_install_centos7/
    vi info.txt
    请严格按照格式写,严格区分大小写,并且井号不能删除,井号前内容也不要有空格
    以下为填写范例 / 说明
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    网卡填写说明 ifconfig:填写红框标注的内容,以服务器实际情况为准
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    系统 ISO 镜像 / 光盘需要提前插入服务器,无需进行 mount 操作,光盘路径一定要为 /dev/sr0,如果需要修改光盘路径,修改脚本第 97 行(如果已经配置好本地 yum 仓库忽略此步骤)
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    脚本会对环境进行检测如已经安装或不是 root 用户会有提示
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
  4. 脚本开始执行,会让你再次确认输入信息,如果确认选择 y,需要返回更换选 n,提示是否搭建本地 yum 仓库,如果已经搭建了 yum 仓库,请选择 n
    sh hainstall.sh
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
  5. 真正组件安装前,脚本会对 info.txt 内容进行检查,会出现以下几种情况的报错
    如果出现如下报错,说明 ip 格式不正确应该为 X.X.X.X 或者 ip 中含有非数字字符
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    如果出现如下报错,说明该 ip 不能连通,请检查网络
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    如果出现报错中非 ip 是机器名,请检查 /etc/hosts 是否正确配置并重启,且 info.txt 内容正确
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    如果安装过程中出现如下报错退出,且 hacluster 用户及 haclient 组没有其他用途,先进行删除操作
    删除方法:
    userdel -rf hacluster
    groupdel haclient
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
  6. 如果安装过程无报错,显示 heartbeat 服务正常,安装结束后 5 分钟内先安装的一台可以出现浮动 IP
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装
    基于 CentOS/RHEL7 的 HA(双机热备) 自动化安装

2.3. 安装后服务不能正常启动处理

这种情况基本为 info.txt 中的内容不正确,heartbeat 服务没有正常启动,可以通过 systemctl status heartbeat.service 查看具体报错信息,更改相关配置文件,以下为 HA 各配置文件范例。
场景描述
主 192.168.202.100
备 192.168.202.101
浮 192.168.202.111
网关 192.168.202.2
主机名 rpa1
备机名 rpa2

/usr/local/heartbeat/etc/ha.d/ha.cf

主机:
node rpa1
node rpa2
#logfile /var/log/ha.log #输出日志
logfacility local0
ucast ens33 192.168.202.101 #主机填写备机 IP
keepalive 2
warntime 10
deadtime 20
initdead 50
udpport 694
auto_failback on
ping 192.168.202.2
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
apiauth ping gid=haclient uid=hacluster

备机:
node rpa1
node rpa2
logfacility local0
ucast ens33 192.168.202.100 #备机填写主机 IP
keepalive 2
warntime 10
deadtime 20
initdead 50
udpport 694
auto_failback on
ping 192.168.202.2
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
apiauth ping gid=haclient uid=hacluster

/usr/local/heartbeat/etc/ha.d/haresources
rpa1 192.168.202.111/24/ens33

/usr/local/heartbeat/etc/ha.d/authkeys
auth 1
1 crc
修改完成后需要重启 HA 服务

2.4 安装成功后测试

浮动 IP 仅在主机 / 备机先安装的一台上出现,如果两台都出现了浮动 IP 说明配置文件存在问题,如果两台仅一台出现浮动 IP 且
heartbeat 服务运行正常则说明安装成功,可以做进一步测试。

1. 关闭出现浮动 IP 的一台服务器的 heartbeat 服务 systemctl stop heartbeat
2. 另一台在数秒后使用 ifconfig 可以看到浮动 IP
3. 开启之前关闭的 heartbeat 服务,若该台为主机,重启备机的 heartbeat 服务,浮动 IP 回到主机上

2.5 相关说明

安装过程中会临时关闭 SELinux 服务和永久关闭 firewalld 防火墙服务,若需要恢复,请手动开启,可能会影响 heartbeat 工作,具体配置方法本贴不提供,方法如下:

1. 开启 SELinux
setenforce 1
2. 开启防火墙
systemctl enable firewalld
systemctl start firewalld

3. 致谢

感谢在我完成这项工作时配合我测试的正华、给予我支持的官云飞官哥还有教我使用论坛帖子格式的“网红”小姐姐罗红。
PS:如果在使用中有任何问题欢迎回帖指正