综合实现案例 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 访问,确保加密连接正常。

相关推荐
大树8814 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠14 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质14 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush414 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52014 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz15 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工15 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智16 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
麦聪聊数据16 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
不会C语言的男孩16 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言