跳到主要内容

新版本运行环境部署指南

本文档详细说明Zebra游戏服务器的运行环境部署步骤,包括系统配置、MySQL编译安装、数据库初始化等。

系统环境要求

  • 操作系统:CentOS 7/8 或 RHEL 7/8
  • 架构:x86_64
  • 内存:建议8GB以上
  • 磁盘:建议100GB以上

一、系统基础配置

1.1 安装字体支持

yum groupinstall "fonts" -y

1.2 设置中文编码

# 设置系统locale为中文gb2312
localectl set-locale LANG=zh_CN.gb2312

# 使配置立即生效
source /etc/profile.d/lang.sh

# 验证
locale

1.3 安装编译依赖包

yum install -y patch wget make gcc gcc-c++ gcc-gfortran \
kernel-devel ncurses ncurses-devel \
cmake libicu vim net-tools \
boost-devel apr-devel apr-util-devel \
openssl-devel zlib-devel libaio-devel libtirpc-devel \
bison automake autoconf libtool libedit-devel \
readline-devel glibc-static libstdc++-static

说明

  • cmake:MySQL 5.5+使用cmake进行构建
  • libaio-devel:MySQL高性能IO依赖
  • libtirpc-devel:CentOS 8需要,解决RPC相关依赖
  • readline-devel:MySQL命令行客户端依赖
  • glibc-staticlibstdc++-static:静态链接需要

1.4 安装Boost 1.58(MySQL 5.5依赖)

cd /usr/local/src
wget https://sourceforge.net/projects/boost/files/boost/1.58.0/boost_1_58_0.tar.gz
tar -zxvf boost_1_58_0.tar.gz
cd boost_1_58_0

# 编译并安装
./bootstrap.sh
./b2 install --prefix=/usr/local/boost-1.58.0

# 设置环境变量
echo "/usr/local/boost-1.58.0/lib" >> /etc/ld.so.conf
ldconfig

二、MySQL 5.5.62 编译安装

2.1 下载源码包

cd /usr/local/src
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.5.62.tar.gz

# 或上传本地文件
# mysql-5.5.62.tar.gz

2.2 解压源码

cd /usr/local/src
tar -zxvf mysql-5.5.62.tar.gz
cd mysql-5.5.62

2.3 使用CMake配置编译参数

# 创建构建目录
mkdir -p build
cd build

# 执行CMake配置
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DINSTALL_LIBDIR=lib64 \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=gbk \
-DDEFAULT_COLLATION=gbk_chinese_ci \
-DWITH_EXTRA_CHARSETS=all \
-DBUILD_SHARED_LIBS=1 \
-DWITH_FAST_MUTEXES=1 \
-DWITH_LIBWRAP=1 \
-DWITH_ZLIB=system \
-DWITH_SSL=system \
-DWITH_READLINE=system \
-DWITH_EMBEDDED_SERVER=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DCMAKE_CXX_FLAGS="-O3 -march=native" \
-DCMAKE_C_FLAGS="-O3 -march=native" \
-DCMAKE_EXE_LINKER_FLAGS="-s -Wl,--strip-all" \
-DCMAKE_SHARED_LINKER_FLAGS="-s -Wl,--strip-all" \
-DWITH_DEBUG=0 \
-DCMAKE_BUILD_TYPE=Release

编译参数说明

  • -DCMAKE_INSTALL_PREFIX:安装路径
  • -DDEFAULT_CHARSET=gbk:默认字符集为GBK(游戏服务器需求)
  • -DDEFAULT_COLLATION=gbk_chinese_ci:默认排序规则
  • -DWITH_EXTRA_CHARSETS=all:支持所有字符集
  • -DWITH_ZLIB=system:使用系统zlib库
  • -DWITH_SSL=system:启用SSL支持
  • -DCMAKE_BUILD_TYPE=Release:发布版本优化

2.4 编译和安装

# 编译(使用所有CPU核心)
make -j $(nproc)

# 安装
make install

注意:编译过程可能需要30-60分钟,请耐心等待。

三、MySQL配置和初始化

3.1 创建用户和组

groupadd mysql
useradd -g mysql -M -s /sbin/nologin mysql

3.2 创建必要目录

# 创建数据目录
mkdir -p /usr/local/mysql/{data,run,log,var,tmp}

# 设置权限
chown -R mysql:mysql /usr/local/mysql

3.3 配置环境变量

# 添加到PATH
echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> /etc/profile
export PATH="/usr/local/mysql/bin:$PATH"

# 添加动态库路径
echo '/usr/local/mysql/lib64' >> /etc/ld.so.conf
ldconfig

3.4 配置my.cnf

# 复制配置模板
cp support-files/my-huge.cnf /etc/my.cnf

# 编辑配置文件
vi /etc/my.cnf

[mysqld]段添加以下配置:

[mysqld]
# 数据目录
datadir=/usr/local/mysql/data

# 跳过域名解析,提升连接速度
skip-name-resolve

# 网络配置
port=3306
socket=/tmp/mysql.sock

# 连接配置
max_connections=2000
max_connect_errors=100000

# 字符集配置
character-set-server=gbk
collation-server=gbk_chinese_ci

# InnoDB配置
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_log_buffer_size=16M

# 查询缓存
query_cache_size=256M
query_cache_type=1

# 慢查询日志
slow_query_log=1
slow_query_log_file=/usr/local/mysql/log/slow.log
long_query_time=2

# 错误日志
log-error=/usr/local/mysql/log/error.log

# 二进制日志
log-bin=/usr/local/mysql/log/mysql-bin
expire_logs_days=7
max_binlog_size=100M

[client]
default-character-set=gbk
socket=/tmp/mysql.sock

3.5 设置文件打开限制

# 临时生效
ulimit -n 4096

# 永久生效(添加到/etc/security/limits.conf)
cat >> /etc/security/limits.conf << EOF
mysql soft nofile 4096
mysql hard nofile 8192
EOF

3.6 初始化数据库

cd /usr/local/src/mysql-5.5.62/build

# 设置执行权限
chmod +x scripts/mysql_install_db

# 执行初始化
./scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data \
--defaults-file=/etc/my.cnf

# 查看初始化日志
tail -f /usr/local/mysql/log/error.log

注意:如果初始化失败,检查:

  1. /usr/local/mysql/data目录权限是否为mysql:mysql
  2. libaiolibtirpc依赖是否安装
  3. 磁盘空间是否充足

四、MySQL服务启动和配置

4.1 配置开机启动

# 复制启动脚本
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld

# 添加到服务列表
chkconfig --add mysqld
chkconfig mysqld on

# 启动MySQL
/etc/init.d/mysqld start

# 查看启动状态
/etc/init.d/mysqld status

# 或使用systemd(CentOS 7+)
systemctl enable mysqld
systemctl start mysqld
systemctl status mysqld

4.2 设置root密码

# 方法1:使用mysqladmin
/usr/local/mysql/bin/mysqladmin -u root password 'your_password'

# 方法2:登录后修改
/usr/local/mysql/bin/mysql -u root

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_password');
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

五、数据库和用户配置

5.1 验证数据库字符集

mysql -u root -p

# 查看字符集
mysql> SHOW VARIABLES LIKE '%character%';

预期输出应显示:

+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | gbk |
| character_set_system | utf8 |
+--------------------------+----------------------------+

5.2 创建游戏数据库用户

-- 本地访问授权
GRANT ALL PRIVILEGES ON *.* TO ztgame@"localhost" IDENTIFIED BY "123456" WITH GRANT OPTION;

-- 回环地址授权
GRANT ALL PRIVILEGES ON *.* TO ztgame@"127.0.0.1" IDENTIFIED BY "123456" WITH GRANT OPTION;

-- 远程访问授权(根据实际IP调整)
GRANT ALL PRIVILEGES ON *.* TO ztgame@"%" IDENTIFIED BY "123456" WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;

-- 查看用户
SELECT user, host FROM mysql.user;

5.3 创建业务数据库

-- 创建FLServer数据库
CREATE DATABASE IF NOT EXISTS FLServerDB DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

-- 创建ZtGame数据库
CREATE DATABASE IF NOT EXISTS ZtGameDB DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

-- 查看数据库列表
SHOW DATABASES;

六、导入数据库脚本

6.1 上传SQL文件

将以下SQL文件上传到服务器:

  • FLServerDB.sql
  • ZtGameDB.sql

6.2 导入数据库

# 导入FLServer数据库
mysql -u ztgame -p123456 --default-character-set=gbk FLServerDB < FLServerDB.sql

# 导入ZtGame数据库
mysql -u ztgame -p123456 --default-character-set=gbk ZtGameDB < ZtGameDB.sql

6.3 验证导入

mysql -u ztgame -p123456 -e "USE FLServerDB; SHOW TABLES;"
mysql -u ztgame -p123456 -e "USE ZtGameDB; SHOW TABLES;"

七、配置网关外网IP

7.1 修改配置文件

# 查找网关配置文件
find /workspace -name "*.xml" -type f | grep -i gateway

# 编辑网关配置,修改外网IP
vi /workspace/GatewayServer/gateway.xml

查找并修改以下配置:

<!-- 外网IP地址 -->
<ExternalIP>YOUR_PUBLIC_IP_HERE</ExternalIP>

<!-- 外网端口 -->
<ExternalPort>8888</ExternalPort>

7.2 验证网络配置

# 检查端口监听
netstat -tlnp | grep mysql
netstat -tlnp | grep 8888

# 测试防火墙
firewall-cmd --list-all
# 如需要,开放端口:
# firewall-cmd --permanent --add-port=3306/tcp
# firewall-cmd --permanent --add-port=8888/tcp
# firewall-cmd --reload

八、启动游戏服务器

8.1 启动各服务进程

cd /workspace

# 按顺序启动服务器
./start.sh

# 或单独启动各进程
./start SuperServer
./start SessionServer
./start ScenesServer
./start GatewayServer
./start UserServer
./start RecordServer

8.2 查看服务状态

# 查看进程
ps aux | grep -E "(SuperServer|SessionServer|ScenesServer|GatewayServer)"

# 查看日志
tail -f /workspace/log/SuperServer.log
tail -f /workspace/log/GatewayServer.log

8.3 停止服务器

cd /workspace

# 停止所有服务
./stop.sh

# 或单独停止
./stop SuperServer

九、常见问题排查

9.1 MySQL启动失败

# 查看错误日志
tail -100 /usr/local/mysql/log/error.log

# 检查权限
ls -la /usr/local/mysql/data

# 检查端口占用
netstat -tlnp | grep 3306

# 检查SELinux
getenforce
# 如为enforcing,临时关闭:
setenforce 0

9.2 数据库连接失败

# 检查MySQL服务状态
systemctl status mysqld

# 检查防火墙
firewall-cmd --list-ports

# 检查用户权限
mysql -u ztgame -p123456 -e "SELECT user, host FROM mysql.user WHERE user='ztgame';"

# 测试连接
telnet localhost 3306

9.3 字符集问题

# 检查数据库字符集
mysql -u ztgame -p123456 -e "SHOW CREATE DATABASE ZtGameDB;"

# 修改数据库字符集(如需要)
mysql -u ztgame -p123456 -e "ALTER DATABASE ZtGameDB DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;"

9.4 编译错误处理

问题1:缺少Boost库

error: Could not find Boost

解决:参见1.4节安装Boost 1.58

问题2:CMake版本过低

cmake version 2.8.12.2 (minimum required is 2.8)

解决

yum remove cmake
wget https://github.com/Kitware/CMake/releases/download/v3.15.0/cmake-3.15.0.tar.gz
tar -zxvf cmake-3.15.0.tar.gz
cd cmake-3.15.0
./bootstrap
make -j $(nproc)
make install

问题3:libaio相关错误

error: Can't find system libaio libraries

解决

yum install -y libaio libaio-devel

十、性能优化建议

10.1 MySQL优化

[mysqld]
# 根据服务器内存调整
innodb_buffer_pool_size = 4G # 物理内存的50-70%

# 并发连接数
thread_concurrency = 16
innodb_thread_concurrency = 16

# IO配置
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000

# 日志配置
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

10.2 系统参数优化

# /etc/sysctl.conf
cat >> /etc/sysctl.conf << EOF
# 网络优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 文件句柄
fs.file-max = 655350
EOF

# 立即生效
sysctl -p

十一、备份和恢复

11.1 数据库备份

# 备份FLServerDB
mysqldump -u ztgame -p123456 --default-character-set=gbk \
--single-transaction --routines --triggers \
FLServerDB > FLServerDB_backup_$(date +%Y%m%d).sql

# 备份ZtGameDB
mysqldump -u ztgame -p123456 --default-character-set=gbk \
--single-transaction --routines --triggers \
ZtGameDB > ZtGameDB_backup_$(date +%Y%m%d).sql

11.2 数据库恢复

# 恢复数据库
mysql -u ztgame -p123456 --default-character-set=gbk FLServerDB < FLServerDB_backup_20240101.sql

附录:部署检查清单

  • 系统locale设置为zh_CN.gb2312
  • 所有编译依赖包已安装
  • MySQL编译安装成功
  • MySQL服务正常启动
  • 数据库字符集配置为GBK
  • ztgame用户权限配置完成
  • FLServerDB和ZtGameDB数据库创建
  • SQL脚本导入成功
  • 网关外网IP配置正确
  • 游戏服务器进程启动成功
  • 客户端能够正常连接

部署完成后请务必进行完整的连接测试和压力测试!