跳到主要内容

集群部署说明

集群部署说明

open-im-server支持集群部署。以下是集群部署的步骤:

  1. 修改kafkaminiomongodbetcd(discovery.yml)redis中的地址,将其配置到正确的组件地址中。保证连接组件的各个端口可访问。

  2. 修改各个rpc组件的registerIP为设置部署etcd的服务器可访问的ip地址,并保证各个端口可被访问。如需启用prometheus,还需要保证各个组件的prometheus.port端口可被访问。

    rpc0

    部署promtheus的机器需要修改prometheus.yml中的targets

    prometheus0

  3. 可在open-im-server/start-config.yml中修改各个组件数量。

  4. 修改kafka广播给主机的端口。如果使用open-im-server中的docker-compose.yml部署,修改service.kafka.environment.KAFKA_CFG_ADVERTISED_LISTENERS中的EXTERNAL为访问kafka组件的地址。 例如:KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,EXTERNAL://192.168.2.36:19094

  5. 如果通过集群模式部署redis,则需将redis.yml中的clusterMode设置为true

  6. 如果部署了多个api或者WebSocket监听端口,可使用nginx方便快捷地实现负载均衡,参考配置如下:

    # nginx.conf

    events {
    worker_connections 1024;
    }

    http {
    upstream websocket_cluster {
    server 192.168.2.10:10101; # WebSocket address
    server 192.168.2.11:10001;
    }

    upstream api_cluster {
    server 192.168.2.10:10102; # api address
    server 192.168.2.11:10002;
    }

    # WebSocket
    server {
    listen 10001;

    server_name _;

    location / {
    proxy_pass http://websocket_cluster;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    }
    }

    # API
    server {
    listen 10002;

    server_name _;

    location / {
    proxy_pass http://api_cluster;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }
    }
    }

    如果决定使用docker启动nginx,可参考以下命令(linux系统):

    docker run --name nginx -p 10001:10001 -p 10002:10002 -v $(pwd)/nginx-config:/etc/nginx/conf.d -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf -d nginx

    如使用不同系统修改挂载的目录即可。

  7. 启动服务。

常见问题/注意事项

  1. 多台机器部署需要保证时钟一致,服务才可正常运行。例如token的签发允许各个机器的时钟误差在5s以内。
  2. 组件端口无法访问:通过回环地址检测组件启动是否正常,若回环地址可访问,则检查是否被防火墙规则过滤。