基于企业级高可用架构的 Linux 案例,整合 Nginx、HTTPS、LVS、Keepalived、MySQL 等服务,实现 Web 服务的负载均衡、高可用性及数据持久化。
案例场景:高可用 Web服务架构
目标
构建高可用 Web 集群,支持负载均衡和故障自动切换。
实现 HTTPS 加密访问,保障数据传输安全。
使用 MySQL 主从复制实现数据库高可用和读写分离。
前提配置环境

1. 负载均衡与 Web 服务合并(2 台主机)
角色复用:原架构中独立的 LVS 节点和 Nginx 节点合并为同一台服务器,减少资源占用。
LVS 配置:仍采用 DR 模式,VIP 绑定在两台主机上,通过 Keepalived 实现主备切换。
Nginx 配置:直接在本地运行,处理 HTTP/HTTPS 请求,同时作为 LVS 的后端真实服务器(RS)。
2. 数据库高可用集群(2 台主机)
MySQL 主从复制:保留主从架构,实现读写分离和数据备份。
数据库 VIP:通过 Keepalived 为 MySQL 集群分配虚拟 IP,当主库故障时自动切换到从库。
部署过程
部署 LVS+Keepalived+Nginx+PHP(10.0.0.12)
配置 LVS(DR 模式)
两台主机均执行(以 10.0.0.12 为例):
# 加载 IPVS 模块
modprobe ip_vs
modprobe ip_vs_rr
# 内核参数配置(关闭 ARP 广播,避免 VIP 冲突)
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
配置 Keepalived 主节点(10.0.0.12)配置文件 /etc/keepalived/keepalived.conf:
global_defs {
router_id LVS_WEB_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass web_cluster
}
virtual_ipaddress {
10.0.0.100/24 # Web 服务 VIP
}
# 监控 Nginx 服务(自定义脚本,防止 Nginx 故障时 VIP 未切换)
notify_master "/etc/keepalived/check_nginx.sh start"
notify_backup "/etc/keepalived/check_nginx.sh stop"
}
备节点(10.0.0.15)配置类似,修改 state 为 BACKUP,priority 为 90。
配置 Nginx+HTTPS 两台主机均执行:
sudo certbot --nginx -d example.com # 生成 HTTPS 证书
Nginx 配置文件(/etc/nginx/sites-available/default)保持不变,直接处理本地 PHP 应用请求。
2. 部署 MySQL 主从 + Keepalived(10.0.0.13) 安装 MySQL
sudo apt install -y mysql-server
主库配置
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
default-storage-engine = InnoDB
创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'mysql_repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
从库配置
# /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay.log
read_only = 1
启用从库复制
CHANGE MASTER TO
MASTER_HOST='192.168.1.20',
MASTER_USER='repl',
MASTER_PASSWORD='mysql_repl_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
START SLAVE;
配置数据库 Keepalived(主从节点均执行)
主节点配置文件 /etc/keepalived/keepalived.conf:
global_defs {
router_id MYSQL_MASTER
}
vrrp_instance VI_2 {
state MASTER
interface ens160
virtual_router_id 52 # 与从库一致
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass db_cluster
}
virtual_ipaddress {
10.0.0.200/24 # 数据库 VIP
}
# 监控 MySQL 服务(自定义脚本,主库故障时切换)
notify_master "/etc/keepalived/check_mysql.sh start"
notify_backup "/etc/keepalived/check_mysql.sh stop"
}
从库配置类似,修改 state 为 BACKUP,priority 为 90。
3. 应用配置调整(Nginx 连接数据库)
在 Nginx 服务器的 PHP 应用中,数据库连接地址改为 数据库 VIP(10.0.0.100),实现主从切换透明化:
<?php
$pdo = new PDO('mysql:host=10.0.0.200;dbname=test', 'user', 'password');
?>
验证与测试
-
Web 服务高可用性
- 访问
http://10.0.0.100
(Web VIP),刷新页面观察请求是否轮询到两台 Nginx 主机。 - 停止主节点 Keepalived,验证 VIP 漂移至备节点,服务不中断。
- 访问
-
数据库高可用性
- 在主库(10.0.0.13)插入数据,检查从库(10.0.0.17)是否同步。
- 停止主库 Keepalived,验证数据库 VIP 漂移至从库,应用仍可通过 VIP 连接数据库。
-
HTTPS 功能
通过
https://example.com
访问,确保加密连接正常。