在茂业百货的项目上,凸显出几个比较棘手的问题,这里简单总结下出现的问题和解决方案。
一、集群配置好之后,手机端登录不上的问题
最终排查结果:nginx对端口转发的有问题
不仅仅是茂业这个项目,我记得那段时间处理的项目有几个都是类似的情况,通过nginx做代理转发,配置完成之后,pc、web都可以正常访问OA以及emessage。唯独就是手机端登录之后连接emessage消息引擎时一直打圈,一直连不上。
这种手机连不上,其他端都ok的情况,排查思路有三个入手点。
1) 排查ecology/WEB-INF/prop/OpenfireModules.properties 配置文件。
确认里面的openfireMobileClientUrl(下图中标注的2)配置是外网地址(或者是域名)。手机走流量访问时,此种配置没问题。
确认里面的openfireMobileClientUrl(下图中标注的2)配置是内网地址。 手机走流量访问时,此种配置存在问题。手机走内网WiFi连接时没有问题。
2) 排查客户方面有没有开通5222端口的映射,确认手机端在外网可以访问服务器的5222端口。
3) 排查客户方面的nginx配置在对5222端口的转发是否存在问题。
对于emessage的几个端口及其协议,罗列如下:
5222端口,给手机端连接使用,tcp类型的端口;
7070端口,给pc/web端连接使用,websocket类型的端口(ws);
7443端口,给pc/web端连接使用,websocket ssl类型的端口(wss),配置类同https;
9090端口,给ecology服务端连接使用,http类型的端口,仅仅是内网通信;
当客户使用nginx做端口转发时,需要确保转发配置正确性。对于socket(tcp类型)的转发,需要与http的转发区分开来。5222端口是要做socket转发的。nginx在1.9版本开始支持socket协议转发。nginx-1.10.2版本或者nginx-1.12.0,这两个是稳定版本,默认支持动态模块加载和socket转发,无需复杂的重新编译添加--with-stream(nginx 1.9 ~nginx-1.9.11支持socket比较复杂)
二、集群运行一段时间之后,部分用户反映每隔1分钟左右连接就断开
最终排查结果: nginx未配置超时时间,默认超时时间为60s
修改超时时间。如上图框出来的地方。socket的超时和websock的超时设置不一样!
三、集群运行一段时间之后,随着项目的推广,部分用户反映登录不上的问题
最终排查结果: nginx自身可打开的最大文件数目受系统限制的问题
决定nginx所能打开的文件数有两个地方。一个地方是nginx自身的配置;另一个地方是操作系统的硬性限制。
先将nginx的自身限制调大. 改成如下图所示即可。
worker_connections是单个工作线程可打开的并发连接数,这个值又是受worker_rlimit_nofile这个最大可打开的文件数限制。如下配置中能够打开的连接数是worker_processes *worker_connections,这个值未超过worker_rlimit_nofile
worker_connections和worker_rlimit_nofile的官方解释如下
再将系统的最大可打开文件数调大,默认情况下Linux可打开的最大文件数为1024,可通过ulimit -n或者ulimit -a查看。注意不能在会话窗口设置ulimit -n 65535来调整,因为nginx以daemon模式运行,不受会话的环境变量控制。
对于centos系统,需要如下来调节:在limits.conf添加限制
然后重启nginx服务即可。