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

相关推荐
熙曦Sakura6 分钟前
【Redis】Redis安装
数据库·redis·缓存
Logan Lie39 分钟前
在 Ubuntu 终端中配置网络代理:优化 npm、apt等的下载速度
linux·ubuntu·npm·代理模式
网硕互联的小客服1 小时前
如何安全配置数据库(MySQL/PostgreSQL/MongoDB)
linux·运维·服务器·网络·windows
xiaogai_gai2 小时前
钉钉通讯录与金蝶云星空无缝集成的技术实现方法
大数据·数据库·钉钉
TDengine (老段)3 小时前
TDengine 中集群维护
大数据·运维·数据库·时序数据库·tdengine·涛思数据·物联
MonKingWD3 小时前
【redis原理篇】底层数据结构
数据结构·数据库·redis
派阿喵搞电子3 小时前
QT中常用的类
linux·qt
开挖掘机上班3 小时前
linux自有服务
linux·运维·服务器
小黄人软件3 小时前
OpenSSL 与 C++ 搭建一个支持 TLS 1.3 的服务器
服务器·开发语言·c++
wanhengidc3 小时前
算力服务器和GPU服务器之间的联系
运维·服务器