💽 云服务器配置
本文会以阿里云为例子介绍云服务器环境中如何进行分布式搭建。
第一步:获取每台服务器的内网地址和外网地址
登录阿里云,左侧导航选中“云服务器 ECS”->“实例”,查看服务器信息:

查看对应服务器的外网IP和内网IP:

记录下来。我们这里假设,外网IP为“ip_external”,内网IP为“ip_internal”。
第二步:配置kbengine.xml
该文件位于{项目资产库}/res/server/kbengine.xml
。
Loginapp和Baseapp:
如果该服务器是Loginapp,我们配置如下:
<root>
<loginapp>
<internalInterface> ip_internal </internalInterface>
<externalInterface> ip_external </externalInterface>
<externalAddress> ip_external </externalAddress>
<!-- 暴露给客户端的端口范围
(Exposed to the client port range)
-->
<externalPorts_min> 20013 </externalPorts_min>
<externalPorts_max> 0 </externalPorts_max>
</loginapp>
</root>
如果和其他app,在同一台服务器上,我们可以把 internalInterface
标签内置空,使其使用本机的本地连接(如127.0.0.1),否则请保留上方的配置,这样可以让内网环境内的其他app知道Loginapp的内网地址。
我们知道Loginapp是需要外部访问的,我们需要在 externalInterface
中填入外网IP。
这里,我们在 externalAddress
标签下也设置为外网的IP,是因为有时候云服务器的外网IP是通过端口映射的方式暴露出去的,所以我们强行指定一下。
Baseapp类似配置,把标签loginapp
换成baseapp
即可。
Machine:
我们在其他章节中已经介绍过Machine,这里不再赘述。它会在启动时,使用UDP广播的方式对内网环境做一些响应测试。在云服务器环境中,UDP广播是经常被禁止的。这里我们就需要对配置中的 machine
节点做一些配置。
<root>
<machine>
...
<!-- 服务组使用多台硬件组成网络,在某些网络环境由于路由器的设置不允许UDP广播造成跨物理机组网不成功时
可在此填入所有相关物理机的地址,引擎将会向具体的地址发送探测包来完成组网。
(When the network is composed of a plurality of hardware, the specific network address is detected.)
-->
<addresses>
<item>127.0.0.1</item>
<item>ip_internal</item>
<item>ip_internal2</item>
...
</addresses>
</machine>
</root>
在 addresses
节点中以 item
为标签,插入所有内网服务器的ip。这样就可以使Machine工作正常。
注意: 这里我们插入了
127.0.0.1
,当该服务器上有多个app时,可以使本机也进行UDP广播。
其他app:
除Loginapp和Baseapp外,都是内网app,所以只需设置internalInterface
标签即可。当一台服务器运行所有app时,该标签仍然置空即可。当分布式时,需要设置为ip_internal
。我们拿Cellapp为例:
<root>
<cellapp>
<internalInterface> ip_internal </internalInterface>
...
</cellapp>
</root>
这样配置即可让内网环境内的其他app知道当前app的内网地址。
DBMgr:
DBMgr稍有些不同,它需要额外配置数据库连接。在阿里云中提供了专门的“云数据库 RDS版”,性能比在ECS上自己安装的数据库要强劲许多,它的内网、外网地址是一个类似“rm-xxxx.mysql.rds.aliyuncs.com”的域名。
<root>
<dbmgr>
...
...
<databaseInterfaces>
<default>
<!-- 数据库地址
(Database address)
-->
<host> 你的数据库内网地址 </host>
<port> 你的数据库内网端口 </port>
<!-- 数据库账号验证
(Database auth)
-->
<auth>
<username> 你的数据库用户名 </username><!-- Type: String -->
<password> 你的数据库登录密码 </password><!-- Type: String -->
<!-- 为true则表示password是加密(rsa)的, 可防止明文配置
(is true, password is RSA)
-->
<encrypt> true </encrypt>
</auth>
</default>
</databaseInterfaces>
</dbmgr>
</root>
恭喜你,完成云服务器环境下的配置了!
OK!经过这些配置,在云服务器环境下的就可以正常建立起引擎体系,并顺利启动服务器了。