LNMP集群部署方案大揭秘!
小樊
46
2025-08-27 06:59:27
LNMP集群部署方案核心要点
一、基础环境准备
-
系统要求
- 选择Linux发行版(如CentOS 7/8、Ubuntu 20.04+),关闭防火墙(
systemctl stop firewalld
)和SELinux(setenforce 0
)。
- 确保节点间网络互通,建议使用内网IP通信。
-
软件版本选择
- Nginx:推荐1.20+版本,支持高并发和动态模块加载。
- MySQL:优先选择8.0+版本,支持分布式事务和读写分离。
- PHP:选择7.4+版本,需安装
php-fpm
扩展以支持Nginx。
二、核心组件部署
-
Nginx集群(负载均衡层)
- 安装:通过源码编译或包管理器安装,配置多实例监听不同端口或IP。
- 负载均衡策略:
- 轮询(默认):
upstream backend { server 192.168.1.1:80; server 192.168.1.2:80; }
。
- IP哈希:
ip_hash;
(保证同一IP请求固定到同一后端)。
- 最少连接:
least_conn;
(动态分配请求到低负载服务器)。
- 高可用:搭配Keepalived实现主备切换,通过VRRP协议共享虚拟IP。
-
MySQL集群(数据存储层)
- 主从复制:
- 主库配置:
server-id=1; log-bin=mysql-bin;
。
- 从库配置:
server-id=2; relay-log=mysql-relay-bin; read_only=1;
。
- 同步用户授权:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl';
。
- 高可用方案:
- MHA(Master High Availability):自动监控主库故障并切换至从库。
- MySQL Cluster:支持多主复制和分布式事务,适合高并发场景。
-
PHP集群(应用层)
- PHP-FPM部署:通过
yum install php-fpm
安装,配置多进程池(pm.max_children=10
)和动态启停。
- 会话共享:使用Redis或Memcached存储PHP会话,避免单点故障。
三、高可用与优化策略
-
故障转移与容灾
- Nginx+Keepalived:通过虚拟IP(VIP)实现Nginx主备切换,故障时自动漂移。
- MySQL主从自动切换:结合MHA工具,检测主库故障后5秒内完成切换。
-
性能优化
- 静态资源分离:Nginx直接处理图片、CSS等静态文件,动态请求转发至PHP。
- 缓存策略:引入Redis缓存热点数据,减少数据库压力。
- 连接池优化:调整PHP-FPM的
pm.max_children
和pm.start_servers
参数,避免进程频繁创建。
-
监控与运维
- 监控工具:Prometheus+Grafana监控服务器状态、Nginx流量、MySQL慢查询。
- 日志管理:集中收集Nginx访问日志、PHP错误日志,通过ELK(Elasticsearch+Logstash+Kibana)分析。
四、部署架构示例(K8s环境)
- Nginx部署:通过Deployment创建3个副本,搭配Service的
LoadBalancer
类型暴露服务。
- MySQL部署:使用StatefulSet部署主从集群,通过Headless Service管理Pod IP。
- PHP部署:以Deployment运行PHP-FPM,挂载共享存储(如NFS)存放代码。
五、注意事项
- 数据一致性:MySQL主从复制需确保
server-id
唯一,避免数据冲突。
- 安全加固:Nginx配置HTTPS(Let’s Encrypt证书),MySQL启用SSL加密传输。
- 容量规划:根据业务负载预留20%-30%的资源冗余,避免单节点过载。
参考来源: