Skip to content

提示

GatewayWorker 提供的所有接口都是支持分布式调用的,所以业务代码不需要任何更改,直接就可以分布式部署。

如何分布式 GatewayWorker

GatewayWorker 通过 Register 服务来建立划分集群。同一集群使用相同的一组 Register 服务,即 Gateway 和 businessWorker 的注册服务地址 ( $gateway->registerAddress $businessworker->registerAddress ) 指向相同的 Register 服务 (可以是单机,也可以是集群)。

Gateway BusinessWorker Register 之间如何工作的,请看原理

分布式部署的关键步骤

1、Register 设置为监听内网 ip。为了安全起见,register 端口不要暴露给外网。 2、将 Gateway 和 businessWorker 的注册服务地址 (registerAddress) 设置成统一的 Register 服务地址,如果是部署了多个 register 服务,格式类似 ['192.168.0.1:1236','192.168.0.2:1236']。 3、设置 Gateway 启动脚本 (一般是 start_gateway.php) 中的 lanIp 与当前服务器内网 ip 一致。

部署示例

假如需要部署三台服务器 (192.168.1.1-3) 提供高可用服务。

1、设置三台服务器 start_register.php 中监听本机内网 ip,new Register ('text://192.168.1.1:1236'); new Register ('text://192.168.1.2:1236'); new Register ('text://192.168.1.3:1236');

2、配置三台服务器 start_gateway.php start_businessworker.php 中的 registerAddress 为 ['192.168.1.1:1236','192.168.1.2:1236','192.168.1.3:1236']。

3、分别配置三台服务器 start_gateway.php 中的 lanIp 为当前服务器的内网 ip (192.168.1.1-3)。

4、逐台启动,分布式部署完毕。

注意事项及说明:

1、注意多机部署时以下端口不要被服务器安全组阻挡:

①、Register 服务监听的端口要可以被其它内网服务器访问(为了安全,register 要监听内网 ip 不能让其被外网访问);

②、start_gateway.php 中如果 $gateway->startPort=2300; $gateway->count=4; ,则 2300 2301 2302 2303 四个端口需要被设置成能被其它服务器访问,也就是起始端口 $gateway->startPort$gateway->startPort + $gateway->count - 1$gateway->count 个端口要设置成能被其它内网服务器访问。

2、如果多机部署服务器不在一个局域网,部署时 ip 参数可以使用外网 ip (需要 GatewayWorker 版本>=v3.0.22),对应端口防火墙应该设置成能被外网服务器访问。

公网集群需要 GatewayWorker 版本 >=v3.0.22 跨公网通讯有安全风险,建议都放在一个内网。

3、三台 GatewayWorker 机器都运行了 Gateway 进程和 Worker 进程,客户端连接上任意一台 GatewayWorker 的 Gateway 端口即通讯。

4、为了方便前端接入和扩容,可以在 Gateway 前加一层 DNS、LVS 等负载均衡策略(不熟悉 DNS LVS 的请自行搜索资料学习)。

5、如果服务器不够用可以使用同样的方法增加服务器

6、如果需要下线服务器,直接 stop 对应服务器即可。由于 Gateway 进程维护着客户端连接,当服务器下线时,对应服务器的客户端会掉线一次。如何做到下线机器不影响用户参考下一节。

7、因为有多台 gateway 服务器,所以需要在 gateway 前增加一个负载均衡。负载均衡方案是通用的,你可以选择用 nginx 负载,或者云厂商的负载均衡,也可以给 DNS 设置多个 A 记录。

基于 MIT 许可发布