温馨提示×

thinkphp项目在centos上如何部署高可用

小樊
32
2025-12-09 12:55:28
栏目: 编程语言

架构总览

  • 前端接入:使用 L4/L7 负载均衡(如 Keepalived + Nginx/HAProxy)对外提供 VIP,实现故障自动切换与横向扩展。
  • 应用层:至少 2 台 CentOS 运行 PHP-FPM + Nginx,静态资源与上传目录使用共享存储(如 NFS 或对象存储),避免单点。
  • 会话与缓存:开启 Redis 集中会话(建议 session.handler=redis),业务缓存走 Redis/Memcached
  • 数据层:数据库使用 主从复制(MySQL/MariaDB),读多写少场景可加 读写分离;关键数据定期备份与校验。
  • 文件与日志:上传文件统一到共享存储;日志接入 rsyslog/ELK 或集中到 CLS/EFK,便于排障与审计。

环境准备与单节点部署要点

  • 系统建议:CentOS 7/8,内核参数与防火墙按业务调优,放行 80/443 及后端健康检查端口。
  • Web 与 PHP:安装 NginxPHP 8.0+(示例启用 Remi 仓库),常用扩展包含 php-fpm php-mysqlnd php-gd php-mbstring php-curl php-xml php-zip php-bcmath;启动服务并设置开机自启。
  • ThinkPHP 8 要求 PHP >= 8.0,可用 Composer 创建与部署项目,生产环境建议使用 Nginx + PHP-FPM 承载。
  • 基础 Nginx 站点配置要点(确保 PATH_INFO 与重写生效):
    server {
        listen 80;
        server_name your_domain.com;
        root /path/to/yourphp/public;   # 建议指向 public
        index index.php index.html;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location ~ \.php$ {
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    
        location ~ /\.ht {
            deny all;
        }
    }
    
    以上为在 CentOS 上部署 ThinkPHP 的通用做法,可作为高可用架构的单节点基线。

高可用实现步骤

  • 负载均衡与故障切换
    • 方案 A:Keepalived + Nginx(主备或主主),对外暴露 VIP,健康检查脚本探测后端 PHP-FPM/Nginx 存活。
    • 方案 B:HAProxy + Keepalived,四层/七层灵活转发,配合后端健康检查与权重。
  • 应用层扩展
    • 至少 2 台应用节点,目录结构一致;代码与配置通过 Git + ComposerRsync/Ansible 统一分发。
    • 上传目录与静态资源使用 NFS 或对象存储(如 OSS/S3),并在 php.ini 设置如 open_basedir 与上传临时目录,避免跨节点权限问题。
  • 会话与缓存
    • 配置 Redis 作为会话存储(框架配置 session.type=redis,设置前缀与 TTL),保证多节点无状态。
    • 缓存层统一到 Redis/Memcached,避免本地文件缓存导致不一致。
  • 数据库高可用
    • 部署 MySQL/MariaDB 主从复制,主库写、从库读;应用侧通过 读写分离 或中间件(如 ProxySQL/MaxScale)实现。
    • 定期全量+增量备份,启用 GTID 与半同步复制提升一致性与可用性。
  • 配置管理与发布
    • 使用 Ansible/Salt 做无状态化部署;按目录划分 runtime / logs / public/uploads 为可写区,其余只读。
    • 平滑发布:蓝绿/金丝雀发布,先切 少量节点 验证,再逐步扩大流量。

健康检查与运维要点

  • 健康检查
    • Nginx/HAProxy 检查:HTTP 探活 /health/index.php?health,返回 200 视为健康;失败自动摘除。
    • PHP-FPM 监控:进程存活、慢日志与队列堆积告警;必要时扩容 pm.max_children
  • 日志与监控
    • 统一收集 Nginx access/error、PHP-FPM slow/error、应用 runtime 日志;接入 Prometheus + GrafanaZabbix,设置关键指标告警(5xx、响应时延、连接数、慢查询)。
  • 安全加固
    • 仅暴露 80/443 与必要管理端口;Web 目录禁止执行权限;限制上传类型与大小;数据库最小权限与强制 SSL。
  • 回滚与演练
    • 每次发布保留上一版本可快速回滚;定期故障演练(断网/宕机/磁盘满)验证 VIP 漂移 与恢复流程。

快速验证清单

  • 负载均衡:停止任一应用节点,VIP 自动漂移到健康节点,访问无中断。
  • 会话保持:登录后在多个节点间刷新,会话不丢失(Redis 生效)。
  • 读写分离:主库写入后在从库可见,读请求命中从库。
  • 文件上传:上传文件在共享存储可见,跨节点访问一致。
  • 回滚演练:发布新版本异常,5 分钟内回滚至上一版本并恢复业务。

0