4、操作系统层配置:Linux系统调优、Keepalived基础安装、Corosync/Pacemaker环境准备、时间同步(NTP/Chrony)

好,咱们进入操作系统层。这一层是双机热备的「地基」。地基不稳,上面搭什么都白搭。我见过太多案例,集群起不来、脑裂、切换失败,最后查来查去,都是操作系统层面没搞干净。

说白了,这一节我们要干四件事:把Linux调顺、装上Keepalived、搭好Corosync/Pacemaker环境、再把时间对齐。每一步都有坑,咱们一个一个来。

4.1 Linux系统调优:别让内核拖后腿

双机热备对系统稳定性要求极高。你想想看,心跳报文丢了怎么办?资源抢占时系统卡死怎么办?所以,调优是必须的。

我个人习惯,拿到一台新机器,先做三件事:

  • 关闭不必要的服务:比如防火墙、SELinux、NetworkManager(如果不用)。这些服务在关键时刻可能干扰心跳或VIP切换。
  • 调整内核参数:特别是网络相关的。比如net.ipv4.tcp_keepalive_time、net.core.somaxconn这些。
  • 优化文件描述符:集群软件可能会打开大量连接,默认1024肯定不够。

核心调优参数示例(/etc/sysctl.conf):

# 网络优化
net.ipv4.tcp_keepalive_time = 120
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.core.somaxconn = 10240

# 文件描述符
fs.file-max = 655350

# 禁用IPv6(如果不用)
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

# 内存优化
vm.swappiness = 10

我的经验: 我曾经在一台机器上没关SELinux,结果Keepalived的脚本死活执行不了。查了两天,最后发现是SELinux把脚本上下文给拦截了。从那以后,我拿到机器第一件事就是 setenforce 0 并写入配置文件。

4.2 Keepalived基础安装:简单但别大意

Keepalived是双机热备的「老兵」了。安装其实很简单,但有几个细节要注意。

安装步骤:

  1. 安装依赖:openssl-devel、popt-devel、libnl3-devel(CentOS/RHEL)。
  2. 下载源码或使用包管理器:我个人推荐用源码编译,版本可控。
  3. 编译安装./configure --prefix=/usr/local/keepalived,然后make && make install。
  4. 配置服务:复制启动脚本,设置开机自启。

快速安装命令(CentOS 7/8):

yum install -y keepalived
systemctl enable keepalived
systemctl start keepalived

注意: 用yum安装的版本可能比较老。如果你需要新特性(比如VRRPv3),建议源码编译。我遇到过老版本在特定场景下脑裂的问题,升级后解决。

安装完后,别急着配。先检查一下版本:keepalived --version。嗯,确认版本没问题再往下走。

4.3 Corosync/Pacemaker环境准备:高可用的「大脑」

Corosync负责集群通信和成员管理,Pacemaker负责资源调度。这两个家伙配合起来,能实现比Keepalived更复杂的场景。

环境准备要点:

  • 主机名解析:所有节点必须能通过主机名互相通信。我习惯用/etc/hosts,简单可靠。
  • SSH互信:虽然Corosync不依赖SSH,但后续管理操作(比如pcs命令)需要。
  • 关闭防火墙或放行端口:Corosync默认用UDP 5404/5405,Pacemaker用TCP 2224。
  • 安装软件包:corosync、pacemaker、pcs(管理工具)。

安装命令(CentOS 7/8):

yum install -y corosync pacemaker pcs
systemctl enable pcsd
systemctl start pcsd

避坑指南: 我曾经在两个节点上配了不同的主机名大小写,结果Corosync一直报成员认证失败。后来发现是主机名大小写不一致导致的。记住,主机名必须完全一致,包括大小写。

4.4 时间同步(NTP/Chrony):时间不同步,集群会「疯」

时间同步是双机热备里最容易忽略、但后果最严重的一环。你想想看,两台机器时间差了几秒,心跳超时判断就会出错,资源可能被同时启动,脑裂就来了。

为什么时间同步这么重要?

  • Corosync的令牌协议依赖时间戳。
  • Pacemaker的资源操作日志需要时间对齐。
  • 脑裂检测机制中,时间偏差可能导致误判。

我推荐用Chrony,因为它比NTP更适应现代网络环境,同步速度更快,精度也够用。

Chrony配置示例(/etc/chrony.conf):

# 使用国内NTP服务器
server ntp.aliyun.com iburst
server ntp.tencent.com iburst

# 允许其他节点同步(如果作为NTP服务器)
allow 192.168.1.0/24

# 本地时钟作为后备
local stratum 10

我的习惯: 我会在每台机器上配置至少两个NTP服务器,一个主用,一个备用。同时,我会把其中一台机器配置为内部NTP服务器,其他机器都同步它。这样即使外网断了,集群内部时间也不会乱。

验证时间同步:

chronyc sources -v
chronyc tracking

看到 ^* 标记的源,说明同步成功。如果看到 ^?,说明有问题,赶紧排查。

重要提醒: 时间同步不是配完就完事了。我建议写个监控脚本,定期检查各节点的时间偏差。偏差超过100ms就要告警。我曾经因为一台机器的CMOS电池没电,时间越跑越偏,最后集群直接脑裂,业务中断了20分钟。教训深刻啊。

小结

操作系统层配置,说白了就是打好基础。Linux调优让系统更稳定,Keepalived提供基础的VIP切换,Corosync/Pacemaker撑起复杂的集群场景,时间同步保证所有节点「步调一致」。

嗯,这一节的内容就到这里。下一节我们进入Keepalived的详细配置,我会把VRRP协议、抢占模式、脚本检测这些核心知识点掰开揉碎了讲。到时候见。