温馨提示×

LNMP集群搭建步骤解析

小樊
37
2025-11-16 09:48:12
栏目: 编程语言

架构与组件规划

  • 目标:构建一个可横向扩展、具备高可用的 LNMP(Linux + Nginx + MySQL/MariaDB + PHP-FPM) 集群,覆盖负载均衡、数据库复制、会话保持与监控告警等关键能力。
  • 推荐最小拓扑(可按需扩展为多组):
    • 负载均衡层:2 台 Nginx/HAProxy + Keepalived VIP(对外统一入口,故障自动切换)
    • Web 层:≥2 台 Nginx + PHP-FPM(无状态,可横向扩容)
    • 数据层:MySQL 主从复制(写主读从;对写并发更高场景可选主主/组复制/InnoDB Cluster)
    • 数据与文件:共享存储或对象存储(用户上传、会话、静态资源)
    • 监控与日志:Prometheus + Grafana、ELK/EFK(指标与日志可观测性)
  • 端口与服务一览(示例):
    • 80/443:HTTP/HTTPS(Nginx)
    • 3306:MySQL
    • 9000(或 /run/php/phpX.Y-fpm.sock):PHP-FPM
    • 9100:Node Exporter(Prometheus)
    • 10050/10051:Zabbix Agent/Server(可选)

基础环境准备

  • 系统与网络
    • 建议使用 CentOS 7/8、Ubuntu 20.04/22.04、Debian 11/12 等稳定发行版;内核与基础工具更新至最新稳定版。
    • 规划 内网网段安全组/防火墙策略,仅放通必要端口(80/443/3306/9000/22 等)。
  • 时间同步
    • 全集群部署 NTP/chrony,保证时间一致性(数据库复制与证书校验对时间敏感)。
  • 目录与权限
    • Web 根目录统一(如 /var/www/html),所有者为 nginx:nginxwww-data:www-data;PHP-FPM 与 Nginx 使用相同用户组以便 FastCGI 权限无碍。
  • 安全基线
    • 禁用不必要服务与端口;SSH 仅允许密钥登录;数据库仅内网访问;按最小权限原则配置数据库账户与防火墙。

分步搭建流程

  1. 部署 Web 层(Nginx + PHP-FPM)
  • 安装组件(示例)
    • CentOS/RHEL:yum 安装 nginx、php、php-fpm、php-mysql
    • Ubuntu/Debian:apt 安装 nginx、php-fpm、php-mysql
  • PHP-FPM 关键配置(/etc/php/*/fpm/pool.d/www.conf)
    • 建议以 Unix Socket 通信:listen = /run/php/phpX.Y-fpm.sock
    • 设置 listen.owner / listen.group / listen.mode(与 Nginx 运行用户一致)
    • 调整 pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers 以匹配内存与并发
  • Nginx 站点配置要点
    • 支持 PHP:location ~ .php$ 中使用 fastcgi_pass 指向 Unix Socket127.0.0.1:9000
    • 安全:禁用 .htaccess 解析;设置 try_files $uri $uri/ =404;
    • 示例片段:
      • fastcgi_pass unix:/run/php/php7.4-fpm.sock;
      • fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  • 验证
    • 创建 /var/www/html/info.php
    • 访问 http://服务器IP/info.php 确认 Nginx + PHP 正常。
  1. 部署数据库层(MySQL/MariaDB 主从复制)
  • 主库配置(my.cnf/mysqld.cnf)
    • server-id = 1
    • log_bin = /var/log/mysql/mysql-bin.log
    • binlog_do_db = your_database(可选,建议按需开启)
  • 从库配置
    • server-id = 2
    • relay_log = /var/log/mysql/mysql-relay-bin.log
    • read_only = 1(从库只读,保障一致性)
  • 建立复制
    • 主库创建复制用户:CREATE USER ‘replicator’@‘%’ IDENTIFIED BY ‘强密码’;
    • 授权:GRANT REPLICATION SLAVE ON . TO ‘replicator’@‘%’; FLUSH PRIVILEGES;
    • 主库执行:SHOW MASTER STATUS; 记录 FilePosition
    • 从库执行:CHANGE MASTER TO … ; START SLAVE;
    • 检查:SHOW SLAVE STATUS\G,确保 Slave_IO_Running/Slave_SQL_Running=Yes
  • 扩展
    • 读写分离可在应用侧或中间件(如 ProxySQL/MaxScale)实现;写并发更高可考虑 主主复制组复制
  1. 部署负载均衡与高可用
  • 方案 A:Nginx 作为反向代理与负载均衡
    • upstream 定义后端 Web 组;配置 proxy_set_header 透传真实客户端信息;可结合 least_conn / ip_hash 等策略
  • 方案 B:HAProxy + Keepalived
    • HAProxy 负责 7 层/4 层负载;Keepalived 提供 VIP故障秒级切换
  • 健康检查
    • Nginx:max_fails / fail_timeout;HAProxy:option httpchk / tcp-check
  • 会话保持
    • 优先应用层无状态与 Redis 集中会话;如必须,可用 ip_hash 或基于 Cookie 的会话亲和(权衡可用性与扩展性)。
  1. 数据与文件一致性
  • 上传与静态资源
    • 使用 NFS/对象存储(如 S3 兼容) 统一挂载 /var/www/uploads 等目录,避免多节点写入不一致
  • 会话共享
    • PHP Session 存入 Redis/Memcached,消除节点亲和依赖
  • 缓存加速
    • 启用 OPcache(PHP)、配置 Redis 作为页面/数据缓存,减轻数据库压力。
  1. 监控与日志
  • 指标与可视化
    • 部署 Node Exporter/PHP-FPM Exporter/MySQL ExporterPrometheusGrafana 看板
  • 日志集中
    • Nginx、PHP-FPM、MySQL 日志接入 Filebeat/LogstashElasticsearchKibana/EFK
  • 告警
    • Prometheus Alertmanager 或 Zabbix 配置阈值告警(5xx、连接数、复制延迟、磁盘 IO 等)。

验证与上线

  • 功能验证
    • 访问域名/应用首页与接口,确认 静态资源、动态页面、数据库读写、文件上传 正常
    • 模拟后端故障(停一台 Web 或关闭主库),验证 负载均衡切换故障恢复
  • 性能与安全
    • 进行 基准压测(如 wrk/ab),根据结果调优 worker_processes/连接复用/缓存策略
    • 开启 HTTPS/TLS(Let’s Encrypt/certbot),设置 HSTS、安全头、防点击劫持
  • 备份与演练
    • 制定 数据库全量+增量备份定期恢复演练 策略;关键配置纳入 版本控制配置管理(Ansible/Salt)。

0