LNMP环境下如何实现高可用架构
导读:LNMP高可用架构落地方案 一、总体架构与组件冗余 入口层:部署2台Nginx/HAProxy组成负载均衡层,前置Keepalived提供VIP漂移,消除单点。对外统一使用VIP或域名接入。 Web层:至少2台Nginx + PHP-FP...
LNMP高可用架构落地方案
一、总体架构与组件冗余
- 入口层:部署2台Nginx/HAProxy组成负载均衡层,前置Keepalived提供VIP漂移,消除单点。对外统一使用VIP或域名接入。
- Web层:至少2台Nginx + PHP-FPM应用节点,保持无状态(会话、上传等外置),便于横向扩容与快速替换。
- 数据层:数据库采用MySQL主从复制实现读写分离与故障切换;对一致性要求更高可考虑Group Replication/Galera Cluster;自动故障转移可用MHA/Orchestrator。
- 文件与静态资源:用户上传与共享文件使用GlusterFS/Ceph等共享存储;静态资源接入CDN降低源站压力。
- 缓存与会话:引入Redis做页面/数据缓存与会话共享(如PHP的Redis Session Handler)。
- 监控与告警:部署Prometheus + Grafana监控主机、Nginx、PHP-FPM、MySQL指标,联动Zabbix/Nagios告警;配置日志集中(如 rsyslog/ELK)便于排障。
- 自动化与备份:用Ansible做配置与发布;制定全量+增量备份策略并定期校验与演练恢复。
二、关键配置示例
- Nginx负载均衡与健康检查(HTTP转发到上游PHP节点)
http {
upstream backend {
least_conn;
server 10.0.1.11:80 max_fails=3 fail_timeout=30s;
server 10.0.1.12:80 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name www.example.com;
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主备(VIP漂移,示例为eth0)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS;
auth_pass 1234;
}
virtual_ipaddress {
192.168.10.100/24;
}
}
- PHP-FPM池与并发(示例)
[www]
listen = /run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
- MySQL主从复制(核心步骤)
-- 主库
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
-- my.cnf
[mysqld]
server-id=1
log_bin=/var/log/mysql/mysql-bin.log
-- 从库
[mysqld]
server-id=2
relay_log=/var/log/mysql/mysql-relay-bin.log
read_only=1
-- 同步
CHANGE MASTER TO
MASTER_HOST='10.0.2.11',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPass!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
START SLAVE;
- 备份与一致性校验
# 全量备份(InnoDB一致性)
mysqldump -u root -p --single-transaction --quick --routines --triggers --default-character-set=utf8mb4 \
--all-databases >
/backup/full_$(date +%F).sql
# 主从一致性校验(Percona Toolkit)
pt-table-checksum --host=10.0.2.11 --user=checksum --password=xxx --databases=your_db
以上示例涵盖负载均衡、故障转移、PHP-FPM并发、MySQL复制与备份校验的关键做法,可直接按实际IP/路径/版本调整。
三、故障切换与运维要点
- 入口层切换:Keepalived监控脚本探测Nginx/80端口,主节点异常自动释放VIP,备节点接管,切换时间通常在秒级。
- 数据库切换:主库异常时,从库执行提升(如设置read_only=0、重置复制关系),或使用MHA/Orchestrator自动选主与切换;切换后及时校验复制延迟与数据一致性。
- 应用层保障:会话与上传目录外置到共享存储或存入Redis,避免节点宕机导致会话丢失;静态资源走CDN并配置回源鉴权与缓存策略。
- 变更与回滚:通过Ansible编排发布,蓝绿/金丝雀发布降低风险;保留最近N个可回滚版本与数据库回档点。
- 容量与弹性:按CPU/内存/连接数阈值扩容Web与数据库节点;读写分离与缓存命中率优化可显著减轻主库压力。
四、监控、备份与演练
- 监控体系:
- 主机与应用:Node Exporter → Prometheus → Grafana 展示CPU、内存、磁盘IO、连接数、5xx比例、PHP-FPM队列等;
- 数据库:mysqld_exporter 采集复制延迟、连接数、慢查询;
- 告警:设置关键阈值(如VIP漂移、复制延迟过大、后端不可用、磁盘> 80%)并多渠道通知。
- 日志管理:Nginx访问/错误日志与PHP-FPM慢日志集中采集,结合Grafana Loki或ELK做检索与可视化。
- 备份策略:
- 数据库:每日全量(如mysqldump/xtrabackup)+ 增量(binlog/xtrabackup),异地/对象存储留存;
- 文件:共享存储多副本或定期同步至备份存储;
- 定期恢复演练与校验(含校验和/抽样对比),确保可恢复性与RPO/RTO达标。
- 安全加固:最小权限、TLS/HTTPS、WAF/防CC、数据库账号分权与审计、系统/组件及时更新。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: LNMP环境下如何实现高可用架构
本文地址: https://pptw.com/jishu/754686.html
