LNMP在Debian上如何实现高可用性
导读:架构总览与前提 目标:在 Debian 上构建一个可横向扩展、具备故障自动切换能力的 LNMP(Linux Nginx MySQL PHP) 高可用集群。 推荐拓扑: 入口层:对外暴露 VIP(虚拟IP),前置 2 台 Nginx/Ke...
架构总览与前提
- 目标:在 Debian 上构建一个可横向扩展、具备故障自动切换能力的 LNMP(Linux Nginx MySQL PHP) 高可用集群。
- 推荐拓扑:
- 入口层:对外暴露 VIP(虚拟IP),前置 2 台 Nginx/Keepalived 组成主备,统一承载 80/443。
- 应用层:至少 2 台 Nginx + PHP-FPM 应用节点,无状态,可横向扩容。
- 数据层:MySQL 一主一从(或 MariaDB),主库写、从库读,配合复制与故障切换策略。
- 文件与静态资源:用户上传走 OSS/MinIO 或共享存储,避免本地磁盘单点。
- 监控告警:部署 Prometheus + Grafana,辅以 Zabbix/Nagios 做可用性告警。
- 基础要求:各节点时间同步(如 chrony)、内网互通、域名与证书准备、统一发布与配置管理(如 Ansible)。
部署步骤
- 步骤 1 入口与高可用
- 两台入口节点安装并配置 Nginx 作为反向代理/负载均衡,对外提供统一域名与证书;使用 Keepalived 配置 VRRP 实现 VIP 漂移,健康检查脚本监控 Nginx 进程存活,主备优先级区分,确保单点故障时秒级切换。
- 步骤 2 应用层与 PHP
- 各应用节点安装 Nginx + PHP-FPM,PHP-FPM 建议监听 Unix Socket(性能优于 TCP),Nginx 通过 fastcgi_pass 转发 .php 请求;应用代码与配置保持一致(可用 Ansible 推送),保证无状态与可替换性。
- 步骤 3 数据库高可用
- 部署 MySQL 主从复制:主库开启 binlog、设置 server-id,创建复制账号并授权;从库设置 server-id、read_only,使用 CHANGE MASTER TO 接入主库并启动复制;应用层按读写分离连接主从库,提升读吞吐与可用性。
- 步骤 4 文件与静态资源
- 用户上传目录(如 /uploads/)通过 301 重定向 或签名 URL 直传 OSS/MinIO,避免本地磁盘成为单点;静态资源使用 CDN 或 Nginx 强缓存策略,减轻后端压力。
关键配置示例
- Nginx 负载均衡(入口或节点间转发)
- 示例片段:
- upstream backend { server 10.0.1.11:80; server 10.0.1.12:80; }
- server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 示例片段:
- Keepalived VRRP(主备切换)
- 示例片段(/etc/keepalived/keepalived.conf):
- vrrp_script chk_nginx { script “systemctl is-active --quiet nginx”; interval 2; fall 2; rise 2; }
- vrrp_instance VI_WEB { state MASTER; interface eth0; virtual_router_id 51; priority 100; advert_int 1; authentication { auth_type PASS; auth_pass secure123; } ; virtual_ipaddress { 10.10.0.100/24; } ; track_script { chk_nginx; } }
- 示例片段(/etc/keepalived/keepalived.conf):
- PHP-FPM 与 Nginx 联动
- 示例片段(/etc/php/8.1/fpm/pool.d/www.conf):listen = /run/php/php8.1-fpm.sock
- 示例片段(Nginx server 块):location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
- MySQL 主从复制
- 主库:CREATE USER ‘repl’@‘%’ IDENTIFIED BY ‘StrongPass123!’; GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’; FLUSH PRIVILEGES; 配置 server-id=1、log-bin。
- 从库:配置 server-id=2、read_only=ON;CHANGE MASTER TO …; START SLAVE; 使用 SHOW SLAVE STATUS 检查 IO/SQL 线程为 Yes。
监控 备份 与故障演练
- 监控与告警
- 部署 Prometheus + Grafana 采集 Nginx、PHP-FPM、MySQL 指标并可视化;结合 Zabbix/Nagios 配置可用性与健康检查告警,覆盖入口、应用、数据库全链路。
- 备份与恢复
- 数据库:定期全量备份(如 mysqldump)与增量备份,保留多份并异地存放;验证恢复流程与恢复时间目标(RTO/RPO)。
- 文件与配置:对 /var/www、Nginx/MySQL/PHP 配置与证书做定期备份,变更纳入版本管理。
- 故障演练与容量
- 定期演练 Nginx/Keepalived 主备切换、数据库主从切换 与回切,验证告警、日志与业务连续性;根据监控趋势进行 水平扩容(新增应用节点)与 连接/进程参数 调优。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP在Debian上如何实现高可用性
本文地址: https://pptw.com/jishu/778081.html
