当前位置: 首页 > article >正文

综合实现案例 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 MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_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 MASTERinterface ens160virtual_router_id 52  # 与从库一致priority 100advert_int 1authentication {auth_type PASSauth_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 访问,确保加密连接正常。

http://www.lryc.cn/news/2387086.html

相关文章:

  • 【QT】对话框dialog类封装
  • 2025/5/26 学习日记 基本/扩展正则表达式 linux三剑客之grep
  • 【后端高阶面经:消息队列篇】29、Kafka高性能探秘:零拷贝、顺序写与分区并发实战
  • Spring Boot企业级开发五大核心功能与高级扩展实战
  • 在SpringBoot项目中策略模式的使用
  • 在 Docker 中启动 Jupyter Notebook
  • IP 地址反向解析(IP反查域名)原理与应用
  • CodeTop之LRU缓存
  • uboot常用命令之eMMC/SD卡命令
  • 【Kafka】编写消费者开发模式时遇到‘未解析的引用‘SIGUSR1’’
  • DeepSeek 赋能教育游戏化:AI 重构学习体验的技术密码
  • Docker run命令-p参数详解
  • 知识宇宙-学习篇:学编程为什么从C语言开始学起?
  • Mybatis-入门程序、 数据库连接池、XML映射配置文件、MybatisX
  • 互联网大厂Java求职面试:Spring Cloud微服务架构设计中的挑战与解决方案
  • BUUCTF [ZJCTF 2019]EasyHeap
  • 机器学习AI精准预测复合材料性能、材料结构设计优化;数据驱动加速新材料研发,百年难遇的组合打破科研壁垒!
  • apache http client连接池实现原理
  • 如何做好一份网络安全技术文档?
  • Android Studio 介绍
  • MD5加密(Java)
  • [攻防世界] easyphp writeup
  • 力扣热题100之LRU缓存机制
  • 如何不规范的设置密码
  • 数据安全与纵深访问控制:构建数字时代的安全防线
  • 分享全国数字人才技能提升师资培训班 第五期邀请函
  • Linux三剑客之grep命令使用教程
  • Kotlin 极简小抄 P8(不可空类型、可空类型、注意事项、非空断言 !!)
  • 【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析
  • git 删除某个远程库的分支