Docker分布式 部署 gateway-worker gateway 的 lanIp 参数问题

wuheng

问题描述

单独一个 docker 部署了 register

之后其余 三台机器 部署了 业务代码
每台机器部署的 BusinessWorker 和 Gateway
这个时候 gateway 的 lanIp 为主机 网卡 IP的 时候 端口通信错误。
然后 lanIp 改成 127.0.0.1 就没问题,不知道怎么回事
docker 端口 映射 从 3900 到 3910
gateway 的 startPort 为 3900
每个机器部署 一个 gateway
运行后报错 3900 端口通信失败

为此你搜索到了哪些方案及不适用的原因

我想问的是 , 虽然是分布式部署,但是 每台机器都部署 了 gateway,
是不是 gateway lanIp 写成 127.0.0.1 也没问题,
我使用 Gateway::getAllClientCount() 这样的方法 取所有在线 数量是不是 也是准确的

351 2 0
2个回答

wuheng

事实证明不可以, 部署多台 gateway getAllClientCount 取的是一台 gateway 的在线人数。

  • wuheng 2024-09-04

    通过翻阅源代码 我们找到这样一段备注

    /**
     * 如果宿主机为192.168.1.2 , gatewayworker in  docker container (172.25.0.2)
     * 此时 lanIp=192.68.1.2 GatewayClientSDK 能连上,但是$this->_innerTcpWorker stream_socket_server(): Unable to connect to tcp://192.168.1.2:2901 (Address not available) in
     * 此时 lanIp=172.25.0.2 GatewayClientSDK stream_socket_server(): Unable to connect to tcp://172.25.0.2:2901 (Address not available) , $this->_innerTcpWorker 正常监听
     *
     * solution:
     * $gateway->lanIp=192.168.1.2 ;
     * $gateway->innerTcpWorkerListen=172.25.0.2; // || 0.0.0.0
     *
     * GatewayClientSDK connect  192.168.1.2:lanPort
     * $this->_innerTcpWorker listen  $gateway->innerTcpWorkerListen:lanPort
     *
     */

    所以我的配置档代码改成了这样的

    $gateway->lanIp = getenv("LOCATION_IP");
    $gateway->innerTcpWorkerListen = "0.0.0.0";

    最终解决了 docker 容器内和work 通信的问题,
    但是 就很疑惑 为何 分布式部署 lanIp 要写本地IP,
    docker 容器环境 写成 127.0.0.1 然后端口映射也是可以运行的。

  • wuheng 2024-09-04

    使用 innerTcpWorkerListen 参数 为 0.0.0.0 可以正确使用,并 使用各种网关函数 都正常!
    Gateway::getAllClientCount() 可以取到所有网关 用户数量

胡桃

目测 docker 网卡是 container 模式

  • wuheng 2024-09-04

    lanIp 为内网IP 主要是为了解决 监听问题, 单机部署 设置为 127.0.0.1 没问题,非容器 用内网IP 也没问题

    在容器下就不行了,在容器呢 监听 192.168.2.1: 3900
    在容器外 开放 3900 端口,通信是不行的,因为容器内监听的是内网, 所以必须改成 0.0.0.0 才行。
    但是 因为对底层了解的不够透彻,网关和worker 通信 会用到 IP地址,所以不敢贸然改动

×
🔝