Linux LNMP如何实现高可用架构
导读:架构总览与分层设计 入口层:使用Nginx/HAProxy做反向代理与负载均衡,对外暴露VIP或域名;在入口前可叠加LVS+Keepalived实现四层高可用与跨节点漂移。 Web层:多台 Nginx + PHP-FPM 实例组成集群,横...
架构总览与分层设计
- 入口层:使用Nginx/HAProxy做反向代理与负载均衡,对外暴露VIP或域名;在入口前可叠加LVS+Keepalived实现四层高可用与跨节点漂移。
- Web层:多台 Nginx + PHP-FPM 实例组成集群,横向扩展,统一由上游负载均衡分发。
- 数据层:MySQL 采用主从复制实现读写分离与故障切换;对一致性要求更高可考虑 Group Replication/Galera Cluster;自动故障转移可用 MHA/Orchestrator。
- 文件层:用户上传与静态资源使用 GlusterFS/Ceph 等共享存储或对象存储;静态资源接入 CDN 降低源站压力。
- 监控与告警:部署 Prometheus + Grafana,辅以 Zabbix/Nagios;日志集中与可视化用于快速排障。
- 自动化与备份:用 Ansible 做配置与发布;定期全量与增量备份,确保可快速恢复。
入口与负载均衡高可用
- Nginx 作为七层负载均衡示例:定义 upstream 池、设置策略与健康检查、开启连接复用,并在异常时自动故障转移。
- 关键要点:
- 负载均衡策略可选:轮询、加权轮询、最少连接、IP 哈希 等。
- 故障转移与健康检查:使用 max_fails/fail_timeout、主动探测与“切换/恢复”阈值;必要时采用 backup 节点。
- 连接复用:配置 keepalive 减少握手开销。
- 重试策略:开启 proxy_next_upstream 控制失败重试与超时。
- 示例配置片段:
- Nginx 负载均衡与故障转移
http { upstream backend { 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 10.0.1.13:80 backup; keepalive 32; } 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; proxy_next_upstream on; proxy_next_upstream_tries 3; proxy_next_upstream_timeout 5s; } } } - 如需四层与更稳的 VIP 漂移,可在前端部署 LVS+Keepalived;或在两台入口 Nginx 上用 Keepalived 提供 VRRP VIP,主备自动切换。
- Nginx 负载均衡与故障转移
数据库高可用与读写分离
- 主从复制(入门与通用):
- 主库开启 server-id 与 log_bin,创建复制账号并授予 REPLICATION SLAVE;从库设置 server-id/relay_log,通过 CHANGE MASTER TO …; START SLAVE; 建立复制;用 SHOW SLAVE STATUS\G 检查同步状态。
- 读写分离与中间件:应用侧或中间件(如 MyCAT)将写发往主库、读发往从库,提升吞吐与可用性。
- 更高可用与自动故障转移:对一致性与可用性要求更高时,采用 MySQL Group Replication/Galera Cluster;自动切换可用 MHA/Orchestrator。
- 示例要点(主从):
- 主库配置
[mysqld] server-id=1 log-bin=mysql-bin binlog_format=ROW - 从库配置与建立复制
[mysqld] server-id=2 relay-log=mysql-relay-bin CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; START SLAVE; - 读写分离可结合中间件或应用路由策略落地。
- 主库配置
Web 层与共享存储
- PHP-FPM 多实例与横向扩展:
- 多台 Web 节点各自运行 PHP-FPM,Nginx 通过 unix socket 或 TCP 转发 .php 请求;按并发调优 pm.max_children/start_servers/min_spare_servers/max_spare_servers。
- 示例(Nginx + PHP-FPM,Unix Socket):
location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass unix:/run/php/php7.4-fpm.sock; }
- 会话与一致性:无状态优先;如需会话保持可用 IP 哈希 或外置 Redis 集中会话。
- 文件与静态资源:
- 用户上传目录与静态资源使用 GlusterFS/Ceph 等共享存储,避免单点;
- 静态资源接入 CDN,源站开启 HTTPS 与缓存策略。
监控、自动化与演练
- 监控与告警:
- 系统与应用指标用 Prometheus 采集、Grafana 可视化;可用性、延迟、错误率与复制延迟设阈值告警;
- 也可用 Zabbix/Nagios 做主机与服务级监控。
- 自动化与配置管理:
- 用 Ansible 批量部署 Nginx/PHP-FPM/MySQL、推送配置与证书,降低人为失误;
- 备份与恢复:
- 定期全量/增量备份(如 mysqldump 或物理备份),定期校验与演练恢复流程;
- 安全与测试:
- 全链路 TLS、最小权限、防火墙与 WAF;
- 定期故障演练(停库、断网、宕机、节点剔除)验证切换时效与数据一致性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux LNMP如何实现高可用架构
本文地址: https://pptw.com/jishu/765730.html
