Node.js 12.12 + Pomelo 2.2.7 棋牌服务端部署:3步配置启动 6 个核心进程

发布时间:2026/7/8 19:32:20
Node.js 12.12 + Pomelo 2.2.7 棋牌服务端部署:3步配置启动 6 个核心进程 Node.js 12.12 Pomelo 2.2.7 棋牌服务端生产级部署指南1. 环境准备与架构设计在开始部署之前我们需要先理解Pomelo框架的核心架构。Pomelo是一个基于Node.js的高性能、分布式游戏服务器框架特别适合棋牌类游戏的开发。与传统的单进程Node.js应用不同Pomelo采用多进程模型将不同的游戏逻辑分散到不同的服务器进程中运行。生产环境推荐配置操作系统Ubuntu 18.04 LTS或CentOS 7Node.js版本12.12.0LTS版本Pomelo版本2.2.7数据库MySQL 5.7/Redis 5服务器配置至少4核CPU/8GB内存提示虽然可以在Windows上进行开发测试但生产环境强烈建议使用Linux系统能获得更好的性能和稳定性。安装基础环境# 安装Node.js 12.x curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs # 安装Pomelo npm install pomelo -g # 验证安装 node -v # 应输出v12.12.0 pomelo -V # 应输出2.2.72. 多进程配置实战Pomelo的核心配置文件有两个master.json和servers.json。下面是一个典型的棋牌游戏6进程配置方案2.1 master.json 配置{ production: { id: jtcfgame, host: 192.168.1.100, port: 3005, env: prod, cpu: 4 }, development: { id: jtcfgame-dev, host: 127.0.0.1, port: 3005, env: dev } }关键参数说明id: 服务器集群唯一标识host: master服务器IP地址port: master服务器端口cpu: 建议设置为服务器CPU核心数2.2 servers.json 配置{ production: { connector: [ { id: connector-1, host: 192.168.1.100, port: 15000, clientPort: 16010, frontend: true }, { id: connector-2, host: 192.168.1.100, port: 15001, clientPort: 16011, frontend: true } ], game: [ { id: game-1, host: 192.168.1.100, port: 15100 } ], room: [ { id: room-1, host: 192.168.1.100, port: 15300 } ], club: [ { id: club-1, host: 192.168.1.100, port: 15200 } ], league: [ { id: league-1, host: 192.168.1.100, port: 15250 } ], master: [ { id: master-1, host: 192.168.1.100, port: 3006 } ] } }进程分工说明进程类型作用推荐数量connector连接客户端处理网络通信2-4个game核心游戏逻辑1-2个room房间管理1个club亲友圈功能1个league大联盟功能1个master服务器管理1个3. 数据库与缓存配置棋牌游戏通常需要MySQL作为主数据库Redis作为缓存和消息队列。以下是典型配置3.1 mysql.js 配置module.exports { connectionLimit: 20, host: db.mygameserver.com, port: 3306, user: game_user, password: StrongPassword123!, database: game_db, charset: utf8mb4, master: { connectionLimit: 10, host: db-master.mygameserver.com, port: 3306, user: game_user, password: StrongPassword123!, database: game_db, charset: utf8mb4 }, slave: { connectionLimit: 10, host: db-slave.mygameserver.com, port: 3306, user: game_user, password: StrongPassword123!, database: game_db, charset: utf8mb4 } };3.2 redis.js 配置module.exports { host: redis.mygameserver.com, port: 6379, password: RedisPassword456!, db: 0, connectTimeout: 5000 };注意生产环境务必使用密码认证不要使用默认端口63794. 启动与监控4.1 启动命令# 开发环境启动 pomelo start -e development # 生产环境启动后台运行 pomelo start -e production -d4.2 进程状态检查清单启动后使用以下命令验证6个核心进程是否正常运行pomelo list预期输出应包含[master-1] running [connector-1] running [connector-2] running [game-1] running [room-1] running [club-1] running [league-1] running4.3 常见问题排查问题1端口冲突错误现象Error: listen EADDRINUSE :::3005解决方案# 查找占用端口的进程 sudo lsof -i :3005 # 终止冲突进程 kill -9 PID问题2数据库连接失败错误现象ER_ACCESS_DENIED_ERROR: Access denied for user...检查要点数据库用户权限密码是否正确是否允许远程连接MySQL的bind-address设置问题3Redis连接超时错误现象Redis connection timeout解决方案检查Redis服务器防火墙设置确认Redis配置中的requirepass与代码中密码一致测试网络连通性telnet redis_host 63795. 性能优化与安全加固5.1 性能调优参数在servers.json中增加以下参数{ connector: [ { id: connector-1, // ...其他配置 bufferSize: 1024, interval: 50, heartbeat: 60, timeout: 120 } ] }关键参数说明bufferSize: 网络包缓冲区大小字节interval: 消息处理间隔毫秒heartbeat: 心跳间隔秒timeout: 连接超时时间秒5.2 安全配置建议防火墙规则# 只开放必要的端口 sudo ufw allow 16010:16011/tcp # 客户端连接端口 sudo ufw allow 3005/tcp # master端口进程监控 使用PM2管理Node.js进程npm install pm2 -g pm2 start app.js -i max --name game-server日志轮转 配置logrotate防止日志文件过大sudo nano /etc/logrotate.d/game-server添加以下内容/path/to/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty copytruncate }6. 部署架构扩展当单服务器性能不足时Pomelo支持分布式部署。典型的多服务器部署架构[负载均衡] | ---------------------------- | | | [Web服务器] [Master服务器] [数据库集群] | ------ | | [Connector] [Game服务器] | | [Redis集群]关键配置变化修改master.json中的host为master服务器内网IP在各服务器的servers.json中配置正确的内网IP确保服务器间网络互通建议使用专线或VPC内网7. 持续集成与自动化部署建议的部署流程代码仓库Git→ 2. CI服务器Jenkins/GitHub Actions→ 3. 测试环境 → 4. 生产环境示例部署脚本#!/bin/bash # deploy.sh SERVERgame192.168.1.100 APP_DIR/opt/game-server echo 正在停止现有服务... ssh $SERVER cd $APP_DIR pomelo stop echo 上传新版本... rsync -avz --delete ./dist/ $SERVER:$APP_DIR/ echo 安装依赖... ssh $SERVER cd $APP_DIR npm install --production echo 启动服务... ssh $SERVER cd $APP_DIR pomelo start -e production -d echo 部署完成8. 监控与告警推荐监控方案基础监控CPU/内存/磁盘使用率网络流量使用工具Prometheus Grafana业务监控在线玩家数游戏房间数关键API响应时间日志分析使用ELKElasticsearch Logstash Kibana收集分析日志设置关键错误告警示例Grafana监控面板指标进程内存占用数据库查询延迟Redis缓存命中率网络连接数消息队列积压情况9. 灾备与高可用方案为确保服务连续性建议实施以下策略数据库主从复制-- 在主库执行 CREATE USER repl% IDENTIFIED BY ReplPassword123!; GRANT REPLICATION SLAVE ON *.* TO repl%; -- 在从库执行 CHANGE MASTER TO MASTER_HOSTmaster.db.com, MASTER_USERrepl, MASTER_PASSWORDReplPassword123!, MASTER_LOG_FILEmysql-bin.000001, MASTER_LOG_POS123456; START SLAVE;Pomelo服务器热备部署至少2台master服务器使用keepalived实现VIP漂移数据备份策略# MySQL每日全量备份 mysqldump -u root -p game_db | gzip /backup/game_db_$(date %F).sql.gz # Redis RDB备份 redis-cli SAVE cp /var/lib/redis/dump.rdb /backup/redis_$(date %F).rdb10. 版本升级与回滚Pomelo框架升级步骤在测试环境验证新版本兼容性备份当前代码和数据库更新package.json中的版本号执行npm install重启服务回滚流程停止当前服务恢复旧版代码执行npm install如有必要恢复数据库备份启动服务建议使用Docker容器化部署可以大大简化升级和回滚流程。