这本书虽然出版有一段时间,但其阐述的高可用架构设计原则、核心组件(如Keepalived、LVS、Pacemaker)和实施方法论至今仍然是构建Linux高可用服务的基石,第2版可能包含了更多对当时主流技术(如CentOS 6/7, Systemd)的支持。

下面,我将按照书籍的逻辑,并结合现代技术演进,为你梳理出一份从理论到实践的“精读与实践指南”。
第一部分:核心理念与设计原则
在动手之前,必须理解高可用的本质,这是所有技术选型和架构设计的出发点。
什么是高可用?
- 目标:确保服务在预期的时间内持续可用,最大限度地减少停机时间。
- 衡量标准:
- 可用性:通常用“几个9”来衡量,99.9%、99.99%、99.999%。
- 计算:
- 9% ≈ 每年停机时间 8.76 小时
- 99% ≈ 每年停机时间 52.6 分钟
- 999% ≈ 每年停机时间 5.26 分钟
- 挑战:硬件故障、软件Bug、网络抖动、人为误操作、流量洪峰等。
高可性的三大支柱
这是高可用架构设计的核心思想,也是贯穿全书的灵魂。
-
冗余
(图片来源网络,侵删)- 思想:消除单点故障,任何一个组件(服务器、网卡、交换机、电源)的失效,都不能导致整个服务中断。
- 实践:
- 服务冗余:至少部署两台或多台服务器提供相同服务。
- 数据冗余:通过数据复制(如主从复制、集群文件系统)确保数据安全。
- 网络冗余:多网卡绑定、多线路接入。
- 电源冗余:双电源接入UPS。
-
监控
- 思想:快速、准确地发现故障,如果不知道哪里坏了,就无法修复。
- 实践:
- 心跳检测:节点之间互相发送“存活”信号,如果一段时间内没收到信号,就认为对方宕机。
- 服务状态检测:不仅检测服务器是否在线,更要检测服务进程是否正常、端口是否可访问、业务逻辑是否正确。
- 告警机制:一旦发现故障,立即通过邮件、短信、电话、即时通讯工具等方式通知运维人员。
-
故障转移
- 思想:当故障发生时,系统能够自动、快速地将服务从故障节点切换到健康的备用节点。
- 实践:
- VIP (Virtual IP Address) 漂移:将一个虚拟IP地址从故障主节点“漂移”到备用节点,客户端通过访问VIP来获取服务,无需感知后端节点的变化。
- 资源接管:备用节点接管主节点的服务、存储、IP等所有资源。
第二部分:核心技术与组件详解
《构建高可用Linux服务器》第2版的核心内容就是围绕实现上述三大支柱的技术展开的。
负载均衡与高可用:LVS + Keepalived
这是书中最经典、最核心的组合,用于构建可伸缩、高可用的前端服务集群。

-
LVS (Linux Virtual Server)
- 定位:四层(传输层)负载均衡器,它在内核层面工作,性能极高,可处理海量并发连接。
- 工作模式:
- NAT (Network Address Translation):客户端请求 -> LVS (修改目标IP为RS) -> Real Server -> LVS (修改源IP为VIP) -> 客户端,RS和LVS必须在同一个物理网络。
- DR (Direct Routing):客户端请求 -> LVS (只修改MAC地址) -> Real Server (直接响应客户端),性能最好,是互联网应用的首选。
- TUN (Tunneling):更复杂的IP隧道模式,DR的变种。
- 核心概念:
- VIP (Virtual IP):对外提供服务的虚拟IP。
- DIP (Director IP):负载均衡器自身的管理IP。
- RIP (Real Server IP):后端真实服务器的IP。
-
Keepalived
- 定位:高可用管理工具,它为LVS提供了心跳检测和VIP故障转移的能力。
- 工作原理:
- VRRP协议:Keepalived基于VRRP协议实现高可用,多个运行Keepalived的节点组成一个VRRP组(虚拟路由器),其中一个是Master,其他是Backup。
- Master节点:拥有VIP,并负责转发流量,它会定期发送VRRP通告报文。
- Backup节点:监听Master的通告报文,如果在超时时间内未收到,就认为Master宕机。
- 故障转移:Backup节点选举出新的Master,并将VIP绑定到自己的网卡上,开始接管服务。
- LVS + Keepalived 配合:Keepalived不仅管理VIP,还通过配置文件自动生成和管理LVS的规则(
ipvsadm命令),实现了配置的自动化和一致性。
集群资源管理:Pacemaker + Corosync
这个组合比LVS+Keepalived更“重量级”,用于管理复杂的应用集群,例如数据库集群、Web应用集群等,它不仅能管理IP,还能管理服务、脚本、文件系统等资源。
-
Corosync
- 定位:集群消息层和成员资格管理工具,它负责节点间的通信和心跳检测,确保集群节点能够实时感知彼此的状态,它是整个集群的“神经系统”。
-
Pacemaker
- 定位:集群资源管理器,它负责根据集群状态和预设的策略,决定资源的启动、停止、迁移和故障恢复。
- 核心概念:
- 资源:集群管理的任何对象,如IP地址、VIP、服务脚本、数据库、文件系统等。
- 资源代理:用于控制资源生命周期的脚本或插件(例如
ocf标准)。 - 约束:定义资源之间的位置关系和启动顺序,A必须和B在同一个节点”、“C必须在A之后启动”。
- STONITH (Shoot The Other Node In The Head):一种隔离故障节点的机制,通过重置或切断电源的方式,防止“脑裂” Split-Brain)。
-
工作流程:
- Corosync在节点间建立通信通道,选举一个Leader节点(相当于Pacemaker的决策者)。
- Leader节点上的Pacemaker根据当前的节点状态和资源约束,计算出一个“最合理”的资源分配方案。
- Pacemaker调用相应的资源代理,在合适的节点上启动或停止资源。
- 当节点故障时,Corosync通知Pacemaker,Pacemaker重新计算方案,并将资源迁移到健康节点。
第三部分:实践步骤(以 LVS + Keepalived 为例)
假设我们要构建一个高可用的Nginx Web服务集群。
环境准备
- VIP:
168.1.100 - Master LVS/Keepalived:
168.1.10(eth0) - Backup LVS/Keepalived:
168.1.11(eth0) - Real Server 1:
168.1.20(eth0:0, VIP绑定在lo:0) - Real Server 2:
168.1.21(eth0:0, VIP绑定在lo:0)
步骤1:配置后端Real Server (DR模式)
在RS1和RS2上执行:
-
安装Nginx:
yum install -y nginx systemctl start nginx systemctl enable nginx
-
配置VIP绑定在回环接口: 在
/etc/rc.local或使用netplan/NetworkManager确保开机启动。#!/bin/bash ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 broadcast 192.168.1.100 up route add -host 192.168.1.100 dev lo:0
关键点:
netmask 255.255.255.255确保ARP请求不会广播出去。 -
**处理ARP
