服务器更新 Keep Server Up to Date

为什么要更新

AC 的开源社区会不断地修复 Bug, 提供更准确的数据, 你的服务器编译好之后, 需要有不断接受社区更新的能力. 除非你能自己开发, 不然你的服务器就永远是这个样子了. 就算你自己能开发, 你的能力和社区广大开发者加在一起的能力还是不能比得.

服务器更新原理

服务器核心本身就是一个从源码编译过来的可执行文件, 通常是二进制格式. 你是无法直接对二进制格式内部进行修改的. 唯一的办法是编译一个新的, 然后替换掉原来的核心. 比如你原来的服务器核心在 ${HOME}/azeroth-server 目录, 你就可以再在 ${HOME}/azeroth-server-new 上编译一个新的, 然后把配置文件考过去, 然后关闭服务器, 将新文件夹替换原文件夹, 然后重启服务器即可.

服务器更新的命令就只有以下几条:

# CD 到 azerothcore 仓库目录
cd ~/azerothcore/

# 拉取最新的代码
git pull origin master

# 进入到 build 目录
cd build

# 重新构建服务器, 你可以把 8 替换成你的服务器的 CPU 核心数量
make -j 8; make install

参考资料:

服务器更新具体操作

以上的方法只是阐述原理, 还是在原先的 $HOME/azeroth-server 目录编译, 会覆盖已有的服务器核心, 肯定是不合适的. 下面我们来介绍正确的做法.

个人电脑单机的架构

  1. 关闭已经正在运行的服务器核心

  2. 将服务器核心文件夹改个名字做一个备份

  3. 执行服务器更新命令, 重新构建一个新的, 并且把配置文件复制过去

  4. 用新的服务器进行测试, 没问题以后就可以正式上线了

单台云服务器架构

和个人电脑单机架构一样, 仅仅是 SSH 到服务器上操作而已.

游戏服务器 和 游戏数据库 分离的的架构

在这种架构下你就可以做到游戏停机时间很短 (小于 1 分钟).

  1. 先在另一台 EC2 上重新构建服务器.

  2. 使用数据库的 Snapshot 恢复一台数据库.

  3. 用新的服务器 + 数据库做测试

  4. 测试成功后把新构建的服务器压缩打包上传到 S3.

  5. 在旧的服务器从 S3 上下载编译好的新服务器并解压.

  6. 停止旧服务器, 替换服务器核心, 重新启动即可.