同一内网下IMServer源码集群部署指南
本文以A、B两台机器(内网 IP 分别为 IP_A 和 IP_B)为例,它们位于同一内网环境中,用于部署集群版 IM Server 与 Nginx。
假设您已部署 Redis 集群、MongoDB 分片集群、Kafka 集群及 Etcd 集群,具体地址如下:
- Redis 集群地址:
redisAddr1,redisAddr2,redisAddr3 - MongoDB 集群地址:
mongoAddr1,mongoAddr2,mongoAddr3 - Kafka 集群地址:
kafkaAddr1,kafkaAddr2,kafkaAddr3 - Etcd 集群地址:
etcdAddr1,etcdAddr2,etcdAddr3
以上组件建议部署在 三台或更多节点 上,以确保高可用性与负载均衡
此外,MinIO 的内部服务访问地址配置为 your_minio_internal_address,外部访问地址配置为 your_minio_external_address。
A 和 B 两台机器以及组件集群内网互通,且A、B两台机器都有外网IP。
目录结构
前提条件
确保以下组件已正确部署并运行:
- Redis 集群
- MongoDB 分片集群
- Kafka 集群
- Etcd 集群
- MinIO 服务
1. 克隆仓库
在两台机器(A 和 B)上分别执行以下命令以克隆 open-im-server 仓库:
git clone https://github.com/openimsdk/open-im-server
cd open-im-server
2. 配置修改
在机器 A 和 B 上,按照以下步骤修改配置文件,确保各组件正确连接。所有地址字段均采用单行列表格式 address: [addr1, addr2, addr3]。
2.1 Kafka 配置
编辑 open-im-server/config/kafka.yml 文件,设置 address 字段为 Kafka 集群地址列表:
address: [kafkaAddr1, kafkaAddr2, kafkaAddr3]
2.2 MinIO 配置
编辑 open-im-server/config/minio.yml 文件,设置 internalAddress 和 externalAddress:
internalAddress: your_minio_internal_address
externalAddress: your_minio_external_address
2.3 MongoDB 配置
编辑 open-im-server/config/mongodb.yml 文件,设置 address 字段为 MongoDB 集群地址列表:
address: [mongoAddr1, mongoAddr2, mongoAddr3]
2.4 Etcd 配置
编辑 open-im-server/config/discovery.yml 文件,设置 etcd.address 字段为 Etcd 集群地址列表:
etcd:
address: [etcdAddr1, etcdAddr2, etcdAddr3]
2.5 Redis 配置
编辑 open-im-server/config/redis.yml 文件,设置 address 字段为 Redis 集群地址列表,并启用集群模式:
address: [redisAddr1, redisAddr2, redisAddr3]
clusterMode: true
3. 配置 nginx
在机器 A 、B上部署 nginx,参考以下配置。请确保替换为您的实际域名、SSL 证书路径和 SSL 密钥路径。
🚀 提示: 确保替换成您的实际域名、SSL 证书路径和 SSL 密钥。
events {
worker_connections 1024;
}
http {
# open-im-server
upstream msg_gateway {
server IP_A:10001;
server IP_B:10001;
}
upstream im_api {
# IM API 服务器地址,可根据部署情况指定多个
server IP_A:10002;
server IP_B:10002;
}
server {
listen 443 ssl;
server_name yourhost.com; # 替换为您的域名
ssl_certificate /usr/local/nginx/conf/ssl/your_host_bundle.pem; # 替换为您的证书路径
ssl_certificate_key /usr/local/nginx/conf/ssl/your_host.key; # 替换为您的证书密钥路径
location ^~/api/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Request-Api $scheme://$host/api;
proxy_pass http://im_api/;
}
location /msg_gateway/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://msg_gateway/;
}
}
# 可选: HTTP 重定向到 HTTPS
server {
listen 80;
server_name yourhost.com; # 替换为您的域名
return 301 https://$host$request_uri;
}
}
将此配置添加到 nginx 的配置文件中, 并reload使配置生效:
4. 设置 DNS
将您的域名 yourhost.com 指向机器A、B的外网 IP 地址。
5. 启动服务
在两台机器(A 和 B)的 open-im-server 目录下执行以下命令以编译和启动服务:
中国境内建议设置go代理
$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct
5.1 编译
mage
5.2 启动服务
mage start
常见问题/注意事项
- 部署
kafka时,需要修改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。 - 多台机器部署需要保证时钟一致,服务才可正常运行。如
token的签发允许各个机器的时钟误差在5s以内。