新版本运行环境部署指南
本文档详细说明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-static和libstdc++-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
注意:如果初始化失败,检查:
/usr/local/mysql/data目录权限是否为mysql:mysqllibaio和libtirpc依赖是否安装- 磁盘空间是否充足
四、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.sqlZtGameDB.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配置正确
- 游戏服务器进程启动成功
- 客户端能够正常连接
部署完成后请务必进行完整的连接测试和压力测试!