跳到正文

Go独立版多节点服务端部署

Go独立版可以按多节点服务端方式部署。核心原则是:多个 getapp_server 进程共用同一套 MySQL、Redis、MacCMS 数据库和上传文件目录,入口由 Nginx 或统一入口分发。

适用场景

单机足够承载时,不需要多节点服务端部署。只有在访问量较高、需要容灾时,再考虑多节点。

推荐架构

txt
用户 / APP / TV
      |
  CDN / WAF
      |
Nginx / 统一入口
      |
+-----------------------------+
| getapp_server 节点 A         |
| getapp_server 节点 B         |
| getapp_server 节点 C         |
+-----------------------------+
      |
+-----------------------------+
| MySQL 主数据库               |
| Redis                        |
| MacCMS 数据库                |
| 共享上传目录 getupload       |
+-----------------------------+

必须保持一致的配置

每个节点的 ./getapp_common/config.yaml 需要保持以下配置一致:

配置要求
admin.prefix后台访问路径前缀必须一致
database指向同一个 Getapp 主数据库
redis指向同一个 Redis,并使用相同 prefix
maccms_database指向同一个 MacCMS 数据库
maccms_config.api_secret_key必须一致,否则 APP 接口加密会不一致
ad_callback.url_key必须一致,否则广告平台回调地址会不一致
upload.root_path多节点需要指向共享目录,或通过对象存储/CDN 统一访问

共享上传目录

Getapp 上传文件会固定写入 upload.root_path 下的 getupload 子目录。多节点服务端部署时,要避免每台机器各存一份。

推荐方案:

  1. 使用 NFS、NAS 或云厂商共享文件系统,把 getapp_common/getupload 挂载到所有节点。
  2. 或者只允许一个后台节点处理上传,其他节点通过 Nginx 反向代理到该节点的 /getupload/
  3. 图片量较大时,可把上传文件同步到对象存储和 CDN,再统一使用 CDN 访问地址。

不要忽略上传目录

如果上传目录不共享,APP 图标、广告图、头像、公告图片等资源可能在某些节点能访问,在另一些节点 404。

更新流程

多节点服务端部署需要使用手动替换。多节点更新时,不要只替换一台机器。

  1. 先备份数据库和当前 getapp_server
  2. 逐台替换 getapp_server 可执行文件。
  3. 逐台重启 Go 进程。
  4. 确认所有节点版本一致。
  5. 检查后台、APP 首页、播放详情、广告回调和上传资源访问。

排查建议

  1. 某些请求偶发失败:检查统一入口后的服务端节点是否全部存活。
  2. 图片偶发 404:检查上传目录是否共享,或 Nginx 是否把 /getupload/ 路由到正确节点。
  3. 登录态或验证码异常:确认所有节点使用同一个 Redis 和相同 redis.prefix
  4. 广告回调失败:确认广告平台回调地址能到达当前统一入口,并且所有节点 ad_callback.url_key 一致。
  5. 手动替换后版本不一致:检查是否所有节点都已替换并重启。