插件窝 干货文章 Nginx Proxy Manager集群搭建与故障转移指南

Nginx Proxy Manager集群搭建与故障转移指南

节点 均衡器 数据库 NPM 863    来源:    2025-04-11

Nginx Proxy Manager集群搭建与故障转移指南

一、集群架构概述

Nginx Proxy Manager (NPM) 集群通常采用以下架构: - 主从模式:1个主节点 + 多个从节点 - 负载均衡:前端使用负载均衡器分发请求 - 共享数据库:所有节点连接同一个数据库(MySQL/PostgreSQL) - 共享存储:用于证书和配置文件的共享存储(NFS/S3等)

二、集群搭建步骤

1. 环境准备

  • 至少2台服务器(建议3台以上)
  • 共享数据库(MySQL/PostgreSQL)
  • 共享存储(NFS/S3/MinIO等)
  • Docker环境

2. 数据库配置

# MySQL示例配置
CREATE DATABASE npm;
CREATE USER 'npm'@'%' IDENTIFIED BY 'securepassword';
GRANT ALL PRIVILEGES ON npm.* TO 'npm'@'%';
FLUSH PRIVILEGES;

3. 共享存储配置

# NFS服务器设置(以Ubuntu为例)
sudo apt install nfs-kernel-server
sudo mkdir /mnt/npm_data
sudo chown -R nobody:nogroup /mnt/npm_data
sudo chmod -R 777 /mnt/npm_data

# 在/etc/exports中添加
/mnt/npm_data *(rw,sync,no_subtree_check,no_root_squash)

# 重启NFS服务
sudo systemctl restart nfs-kernel-server

4. NPM节点配置

所有节点使用相同的docker-compose.yml配置:

version: '3'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: always
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - /mnt/npm_data:/data
      - /mnt/npm_data/letsencrypt:/etc/letsencrypt
    environment:
      DB_MYSQL_HOST: "数据库服务器IP"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "securepassword"
      DB_MYSQL_NAME: "npm"

5. 负载均衡器配置

使用HAProxy或另一个Nginx实例作为前端负载均衡器:

# HAProxy示例配置
frontend http_front
    bind *:80
    bind *:443 ssl crt /etc/ssl/certs/yourdomain.pem
    option forwardfor
    default_backend npm_nodes

backend npm_nodes
    balance roundrobin
    server npm1 192.168.1.101:80 check
    server npm2 192.168.1.102:80 check
    server npm3 192.168.1.103:80 check

三、故障转移策略

1. 健康检查

  • 负载均衡器定期检查节点健康状态(HTTP 200响应)
  • 设置检查间隔(建议5秒)
  • 设置失败阈值(建议3次失败后标记为不可用)

2. 自动故障转移

  • 负载均衡器自动将流量从故障节点转移到健康节点
  • 配置DNS TTL为较低值(如60秒)以便快速切换

3. 数据库高可用

  • 使用主从复制或集群方案(如MySQL Group Replication)
  • 或使用云数据库服务(如AWS RDS)

4. 存储高可用

  • 对于NFS,考虑使用DRBD或GlusterFS
  • 对于S3,选择多AZ存储

四、常见问题解决

1. 节点间配置不同步

症状:某些节点配置缺失或不一致
解决: - 确保所有节点挂载相同的共享存储 - 检查文件权限(通常需要777) - 重启受影响节点的NPM容器

2. 证书更新问题

症状:Let's Encrypt证书在某些节点更新失败
解决

# 在所有节点上执行
docker exec -it npm_app_1 /bin/bash
./usr/local/bin/node ./bin/renew-certificates.js

3. 数据库连接问题

症状:节点无法连接数据库
解决: - 检查数据库服务器防火墙规则 - 验证数据库用户权限 - 增加数据库连接池大小(在NPM高级设置中)

4. 性能瓶颈

症状:响应缓慢或超时
解决: - 增加节点数量 - 优化数据库性能(添加索引等) - 启用NPM缓存功能

五、监控与维护

1. 监控指标

  • 节点HTTP响应时间
  • 数据库连接数
  • 存储空间使用情况
  • SSL证书到期时间

2. 日志收集

# 使用ELK或类似方案收集日志
docker logs npm_app_1 > npm.log

3. 定期维护

  • 每月检查并更新NPM容器
  • 每季度验证备份恢复流程
  • 每年审查安全设置

通过以上配置和策略,您可以建立一个高可用的Nginx Proxy Manager集群,确保服务持续可用并能够快速从故障中恢复。