Debian如何确保LNMP高可用
小樊
35
2025-11-25 02:07:51
Debian上构建LNMP高可用
总体架构与冗余设计
前端入口冗余:部署至少2台Nginx/负载均衡节点 ,对外暴露虚拟IP(VIP) ,避免单点。可用Nginx自身upstream 或HAProxy 做反向代理与健康检查。
应用层冗余:每台Nginx后挂载多个PHP-FPM实例 (Unix Socket或TCP),Nginx通过upstream分发请求,支持轮询、权重、最少连接、IP哈希 等策略。
数据层冗余:数据库采用MySQL/MariaDB主从复制 实现读写分离与故障切换;对写入强一致场景,可评估主主复制 或引入Orchestrator/MHA 等自动故障转移组件。
配置与发布:用Ansible/Puppet 做配置与版本统一,减少人为差异导致的故障。
关键配置步骤
负载均衡(Nginx示例)
安装:sudo apt update && sudo apt install nginx
配置/etc/nginx/conf.d/lb.conf:
upstream backend { server 10.0.0.11:80; server 10.0.0.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; } }
PHP-FPM(多实例示例)
安装:sudo apt install php-fpm php-mysql
配置/etc/php/8.1/fpm/pool.d/www.conf:listen = /run/php/php8.1-fpm.sock(或 listen = 127.0.0.1:9000);pm = dynamic; pm.max_children = 50;
Nginx location ~ .php$ 中使用 fastcgi_pass unix:/run/php/php8.1-fpm.sock;
MySQL主从复制(示例)
主库:/etc/mysql/mysql.conf.d/mysqld.cnf 中设置 server-id=1; log_bin=/var/log/mysql/mysql-bin.log; 重启后创建复制用户并授权:CREATE USER ‘repl’@‘%’ IDENTIFIED BY ‘StrongPass!’; GRANT REPLICATION SLAVE ON . TO ‘repl’@‘%’; FLUSH PRIVILEGES; SHOW MASTER STATUS;
从库:server-id=2; relay_log=/var/log/mysql/mysql-relay-bin.log; 执行 CHANGE MASTER TO MASTER_HOST=‘主库IP’, MASTER_USER=‘repl’, MASTER_PASSWORD=‘StrongPass!’, MASTER_LOG_FILE=‘mysql-bin.000001’, MASTER_LOG_POS=xxx; START SLAVE;
前端故障转移(Keepalived示例)
安装:sudo apt install keepalived
主节点/etc/keepalived/keepalived.conf:state MASTER; interface eth0; virtual_router_id 51; priority 100; advert_int 1; authentication { auth_type PASS; auth_pass 1234; }; virtual_ipaddress { 192.168.1.200/24; }; track_script { chk_nginx }
检查脚本:vrrp_script chk_nginx { script “killall -0 nginx”; interval 2; weight 2; }
备节点:state BACKUP; priority 90; 其余一致。
自动故障检测与恢复
进程自愈:使用systemd 确保服务异常退出能自动拉起(默认已启用),必要时为关键进程设置 Restart=on-failure;也可用Supervisor 统一管理进程生命周期。
快速健康检查与切换:Keepalived的vrrp_script 对Nginx/业务端口做存活性探测,失败即降低优先级触发VIP漂移 ;负载均衡器对后端启用主动健康检查 与摘除策略。
数据库故障转移:主从复制场景下,主库宕机可将从库提升为新主(设置 read_only=0、重置复制关系、更新应用DSN);对自动化要求更高的场景,建议引入Orchestrator/MHA 实现自动选主与切换。
数据一致性与备份恢复
备份策略:
逻辑备份:mysqldump -u root -p --single-transaction --quick --lock-tables=false --all-databases > /backup/full_$(date +%F).sql
物理/增量:使用 Percona XtraBackup 做热备与增量备份 ,缩短恢复时间。
恢复演练:定期在隔离环境验证备份的可用性与恢复时间目标(RTO) ;明确主从切换后的数据一致性校验 流程。
一致性注意:主从复制为异步 时存在数据延迟风险,关键业务建议结合半同步复制 或引入GTID 与一致性校验工具。
监控告警与日常运维
监控体系:部署Prometheus + Grafana ,采集Nginx(请求量、5xx、延迟)、PHP-FPM(进程数、慢请求)、MySQL(复制延迟、连接数、慢查询)等指标,配置 阈值告警 与可视化看板 。
日志与审计:集中收集与轮转Nginx、PHP-FPM、MySQL 日志,结合错误趋势与慢查询分析进行容量与性能调优。
安全与稳定:
系统与安全:定期 apt update/upgrade;仅开放80/443/SSH 等必要端口;SSH使用密钥登录 、禁用root远程;最小化数据库访问网段。
性能优化:启用HTTP/2/gzip 、合理的 worker 进程与缓存策略;PHP-FPM按负载调整 pm.max_children/start_servers;数据库参数按工作负载调优。