集群部署说明
集群部署说明
open-im-server
支持集群部署。以下是集群部署的步骤:
修改
kafka
、minio
、mongodb
、etcd(discovery.yml)
、redis
中的地址,将其配置到正确的组件地址中。保证连接组件的各个端口可访问。修改各个
rpc
组件的registerIP
为设置部署etcd
的服务器可访问的ip
地址,并保证各个端口可被访问。如需启用prometheus
,还需要保证各个组件的prometheus.port
端口可被访问。部署
promtheus
的机器需要修改prometheus.yml
中的targets
。可在
open-im-server/start-config.yml
中修改各个组件数量。修改
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
。如果通过集群模式部署
redis
,则需将redis.yml
中的clusterMode
设置为true
。如果部署了多个
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
如使用不同系统修改挂载的目录即可。
启动服务。
常见问题/注意事项
- 多台机器部署需要保证时钟一致,服务才可正常运行。例如
token
的签发允许各个机器的时钟误差在5s
以内。 - 组件端口无法访问:通过回环地址检测组件启动是否正常,若回环地址可访问,则检查是否被防火墙规则过滤。