综合实现案例 LVS keepalived mysql 等

基于企业级高可用架构的 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');
?>

验证与测试

  1. Web 服务高可用性

    • 访问 http://10.0.0.100(Web VIP),刷新页面观察请求是否轮询到两台 Nginx 主机。
    • 停止主节点 Keepalived,验证 VIP 漂移至备节点,服务不中断。
  2. 数据库高可用性

    • 在主库(10.0.0.13)插入数据,检查从库(10.0.0.17)是否同步。
    • 停止主库 Keepalived,验证数据库 VIP 漂移至从库,应用仍可通过 VIP 连接数据库。
  3. HTTPS 功能

    通过 https://example.com 访问,确保加密连接正常。

相关推荐
智脑API平台15 分钟前
Codex CLI 怎么用 .env 配置 API Key?本地项目和自动化脚本接入教程
运维·自动化
土星云SaturnCloud30 分钟前
边缘计算在储气库调峰智能管控中的应用:架构设计与技术解析
服务器·人工智能·ai·边缘计算
无足鸟ICT30 分钟前
【RHCA+】bash命令
linux·开发语言·bash
weixin_3077791339 分钟前
Linux下Docker Compose里运行的MySQL数据库故障诊断Shell脚本
linux·运维·mysql·docker·自动化
小生不才yz43 分钟前
Shell脚本精读 · S14-02 | 脚本模板:从 20 行工具到可维护项目
linux
x-cmd1 小时前
Linus 9 年前说「模糊测试有效」——今天已成 OSS-Fuzz 时代铁律
linux·ai·rust·开源·自动化·agent·安全性测试
阿演1 小时前
DataDjinn v0.2.11:SQL 编辑、AI 协作和表格操作继续打磨
数据库·人工智能·sql
流浪0012 小时前
Git篇(三):吃透远程协作:SSH 密钥、分支、标签全流程实战指南
运维·git·ssh
六点_dn2 小时前
Linux学习笔记-chmod命令
linux·笔记·学习
NiceCloud喜云2 小时前
Claude Code 应用内浏览器任务怎么写验收清单
服务器·人工智能·ai