IM开源项目OpenIM集群(非k8s)部署文档生产环境可参
自行部署etcdzookeepermysqlkafkamongoredis集群,可以根据此性能评估服务器需求。
以下是针对一台华为云主机s3的压测数据:8核16G内存,普通磁盘(非SSD)
(一)单聊压测数据:
同时在线及压测客户端数量:1万
每秒钟发送消息量:2300条;
从发送到对方接收平均消息延时:5秒
(二)群聊压测数据:
群成员数量:1万人
同时在线人数:1千人
每秒发送消息量:500条;
从发送到对方接收平均消息延时:6秒
组件集群说明
组件
说明
版本
etcd
建议三台,可复用
3。5。0
zookeeper
建议三台,可复用
3。7。1
mysql
主从两条,可复用
5。7
kafka
建议三台,可复用。以2台8核16GIMServer为例说明topic分区设置,ws2mschat8分区,msgtomongo8分区,ms2pschat10分区
3。2。0
mongo
建议2台以上,可复用。每个cache限制0。5G;多个数据分片副本集,1个mongos副本集,1个config副本集
5。0
redis
建议2台以上,可复用。每个内存限制10G,淘汰策略volatilettl
6。2。5IMServer集群部署(1)下载代码及编译gitclonehttps:github。comOpenIMSDKOpenIMServer。gitrecursivecdOpenIMserverscriptchmodx。sh。batchbuildallservice。sh出现allservicesbuildsuccess表示所有模块编译成功(2)修改组件信息kafka:ws2mschat:addr:〔127。0。0。1:9092,127。0。0。2:9092,127。0。0。3:9092〕topic:ws2mschatopenimmsg写入,openimmsgtransfer消费后新消息入库redis和kafkamsgtomongo、ms2pschatws2mschatoffline:addr:〔127。0。0。1:9092,127。0。0。2:9092,127。0。0。3:9092〕kafka配置,默认即可topic:ws2mschatoffline不再使用msgtomongo:addr:〔127。0。0。1:9092,127。0。0。2:9092,127。0。0。3:9092〕kafka配置,默认即可topic:msgtomongoopenimmsgtransfer消费历史消息入库mongoms2pschat:addr:〔127。0。0。1:9092,127。0。0。2:9092,127。0。0。3:9092〕kafka配置,默认即可topic:ms2pschatopenimpush消费,推送消息到openimmsggatewayetcd:etcdSchema:openim默认即可etcdAddr:〔127。0。0。1:2379,127。0。0。2:2379,127。0。0。3:2379〕etcd集群mysql:dbMysqlAddress:〔127。0。0。1:13306,127。0。0。2:13306〕mysql主备mongo:dbAddress:〔127。0。0。1:37017,127。0。0。2:37017,127。0。0。3:37017〕使用分片集群时为mongos地址redis:dbAddress:〔127。0。0。1:16379,127。0。0。2:16379,127。0。0。3:16379〕redis集群rpcRegisterIP:不要填写(3)调整进程数
openimmsg6个,openimpush5个openImMessagePort:〔10130,10131,10132,10133,10134,10135〕openimmsg配置6个端口则启动6个进程openImPushPort:〔10170,10171,10172,10173,10174〕openimpush配置5个端口则启动5个进程
openimmsgtransfer4个修改scriptpathinfo。cfgmsgtransfernameopenimmsgtransfermsgtransferbinaryroot。。binmsgtransfersourceroot。。cmdopenimmsgtransfermsgtransferservicenum4(4)复制OpenIMServer到其他服务器scprOpenIMServerroot127。0。0。2:data(5)启动cdscript。startall。sh关于OpenIM
OpenIM是由IM技术专家打造开源即时通讯组件,也是目前最受欢迎的开源IM项目之一,开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时通讯、实时通讯能力快速集成到自身应用中,并确保业务数据的安全性和私密性。github社区活跃,star近万,排名遥遥领先,开发者万人,OpenM力争开源IM项目No1,打造开源IM第一社区。OpenIM是也是目前非常受欢迎的开源IM项目,广泛用于政企协同办公场景。
github地址:https:github。comOpenIMSDKOpenIMServer
开发者中心:https:doc。rentsoft。cn
平台支持:AndroidiOSUniappFlutterElectronWebreactNative等几乎所有平台
pc支持信创环境:银河麒麟UOS等;
群组支持:十万群成员的超级大群
安卓基于自启动保活机制
nginx配置示例
httpswss配置;负载均衡配置;以IMServer两台127。0。0。1127。0。0。2,nginx部署在其他服务器为例。
注意域名替换ip域名以及证书upstreammsggatwayimserver{server127。0。0。1:10001;server127。0。0。2:10001;}upstreamapiimserver{server127。0。0。1:10002;server127。0。0。2:10002;}upstreamjssdkimserver{server127。0。0。1:10003;server127。0。0。2:10003;}upstreamdemoimserver{server127。0。0。1:10004;server127。0。0。2:10004;}upstreamcmsimserver{server127。0。0。1:10006;server127。0。0。2:10006;}server{listen443;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;errorpage405200uri;location{proxysetheaderHosthost;proxysetheaderXRealIpremoteaddr;proxysetheaderXForwardedForremoteaddr;proxysetheaderXNginXProxytrue;rootdataonlinePcWebDemobuild;indexindex。html;tryfilesuriuriindex。html;}locationadmin{proxysetheaderHosthost;proxysetheaderXRealIpremoteaddr;proxysetheaderXForwardedForremoteaddr;proxysetheaderXNginXProxytrue;rootdataonlineOpenIMAdminbuild;aliasdataonlineOpenIMAdminbuild;indexindex。html;tryfilesuriuriadminadminindex。html;}}server{listen80;servernameopenimonline。rentsoft。cn;rewrite(。)https:{servername}1permanent;}server{listen10001;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderUpgradehttpupgrade;proxysetheaderConnectionUpgrade;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:msggatwayimserver;}}server{listen10002;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:apiimserver;}}server{listen10003;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderUpgradehttpupgrade;proxysetheaderConnectionUpgrade;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:jssdkimserver;}}server{listen10004;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderUpgradehttpupgrade;proxysetheaderConnectionUpgrade;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:demoimserver;}}server{listen10006;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:cmsimserver;}}server{listen7880;servernameopenimonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslopenimonline。rentsoft。cn。crt;sslcertificatekeyetcnginxconf。dsslopenimonline。rentsoft。cn。key;sslsessiontimeout5m;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxyhttpversion1。1;proxysetheaderUpgradehttpupgrade;proxysetheaderConnectionUpgrade;proxysetheaderXrealipremoteaddr;proxysetheaderXForwardedForremoteaddr;proxypasshttp:127。0。0。1:7880;}}upstreamstorage{server127。0。0。1:10005;}server{listen443;servernamestorageonline。rentsoft。cn;sslonsslcertificateetcnginxconf。dsslstorageonline。rentsoft。cnbundle。crt;sslcertificatekeyetcnginxconf。dsslstorageonline。rentsoft。cn。key;sslsessiontimeout5m;listen443;servernamestorageonline。rentsoft。cn;sslon;sslcertificateetcnginxconf。dsslstorageonline。rentsoft。cnnginxstorageonline。rentsoft。cnbundle。crt;sslcertificatekeyetcnginxconf。dsslstorageonline。rentsoft。cnnginxstorageonline。rentsoft。cn。key;gzipon;gzipminlength1k;gzipbuffers416k;gzipcomplevel2;gziptypestextplainapplicationjavascriptapplicationxjavascripttextcssapplicationxmltextjavascriptapplicationxhttpdphpimagejpegimagegifimagepng;gzipvaryoff;gzipdisableMSIE〔16〕。;location{proxypasshttp:127。0。0。1:10005;proxysetheaderXRealIPremoteaddr;proxysetheaderXForwardedForproxyaddxforwardedfor;proxysetheaderXForwardedProtoscheme;proxysetheaderHosthttphost;proxyhttpversion1。1;clientmaxbodysize8000M;}}1