服务的启动与关闭和日志

野火IM服务启动方式有3种:命令行启动、service启动和docker启动。本文讲解启动方式、停止方式、日志和升级这几方面的内容。

1. Linux服务优化

检查Linux服务器的配置,确认open files在10万以上或者更大。否则当业务量增大后会出现服务不可用问题(Too many open files问题)。可以按照 https://gitee.com/wfchat/C1000K_Test 这个项目的说明来优化linux系统。检查命令为ulimit -a,如下图open files配置为100万(1024000): open files

2. windows格式和unix格式

Windows系统和Unix系系统(Linux和Mac)的文件格式是不同的。如果脚本或者配置文件或者授权文件与对应的服务器格式不匹配,就会出现问题。常见的问题是在linux服务器上部署,但脚本和配置文件用windows系统的编辑器编辑,并保存为windows格式,请参考服务常见问题中的问题3。

还有一种常见的问题是IM服务要在Windows系统中运行,这时需要把授权文件改成windows格式。

3. 日志

IM服务启动后,日志会有2种,一种是是控制台日志,一种是IM输出的日志。控制台日志会输出系统的一些日志,还有一些异常信息。IM服务日志在logs目录下,这个目录中会有3个文件,分别是wildfirechat.logwildfirechat_warn.logwildfirechat_error.log,分别是info、warn和error日志。wildfirechat.log日志文件可能为空,这是因为log4j2的配置为异步写,等日志攒够一定量后一次写入,在调试问题是,可以改成同步写,这样能够尽快看到日志。

在每种启动方式下,这2个日志都在不同的地方,后面会在每种启动方式中说明。

4. 升级

如果是集群部署,每次升级时都需要集群全部停机再升级,不能集群节点逐个升级。如果是集群扩容,需要使用相同的版本来启动新节点。当拿到新的软件版本后,旧软件包内的wildfirechat.confc3p0.xml和启动脚本wildfirechat.sh是可以复用的,减少了重新配置的工作量,其他文件或者目录一定要用最新的。集群部署时,还有个要修改的配置文件是hazelcast.xml,这个文件如果新版本有变动时继续使用旧版本,将会引起不可预料的问题,所以建议这个文件新配置,或者比对一下有没有变化。

另外一个老生常谈的问题就是备份,需要备份好旧的软件版本和数据库,方便有问题能够顺利回滚。

5. 验证

IM服务启动成功后,会监听80端口和1883端口,可以用下面2个命令来验证

curl -v http://127.0.0.1/api/version

应该返回一个json文件。

telnet 127.0.0.1 1883

可以看到能够连上1883端口。

如果有web客户端,用下面这个命令检查一下是否开启8083的websocket端口,如果没有就忽略这个检查:

curl -v http://127.0.0.1:8083

如果看到not a WebSocket handshake request: missing upgrade的提示说明websocket端口已经正确打开了。

在任何服务启动后,都需要用这几个命令验证一下IM服务是否正确启动。

上面提到的端口都是野火默认的端口,如果使用了其他端口,验证时也请对应修改。

6. 命令行启动

在野火IM压缩包解压后的bin目录下,有2个脚本文件,分别是wildfirechat.shstop.sh,对应野火IM服务启动和停止脚本。在终端窗口进入到bin目录下,执行命令:

nohup ./wildfirechat.sh 2>&1 &

既可启动专业版IM服务。在非root用户权限下启动有可能会失败,因为IM服务监听80端口,需要root权限。可以使用sudo nohup ./wildfirechat.sh 2>&1 &命令。也可以设置Java的capabilities授予Java监听80的权限(后面有说明如何设置)。

windows系统下,打开命令行窗口,进入到bin目录,然后执行wildfirechat.bat来运行IM服务。

linux文件格式和windows格式是有区别的,如果windows下改动启动脚本后可能会保存为windows格式,在linux上执行会出现错误。请参考服务器问题中的问题3。

6.1. 设置Java的capabilities

IM服务绑定80端口,需要ROOT权限(小于1024的端口都需要ROOT权限)。如果可以以ROOT用户运行或者80端口修改为大于1024的端口,请忽略此项设置。如果无法使用ROOT用户运行IM服务,可以为Java设置绑定端口的权限,命令如下:

sudo setcap CAP_NET_BIND_SERVICE+eip /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

java的路径在不同系统上会有变化,请找到正确的java地址来设置能力。

6.2. 日志

使用nohup启动时,控制台日志会输出到启动目录下的nohup.out文件。IM服务会在软件包目录下创建一个logs目录,IM服务日志在这个目录下。

6.3. 停止

linux系统下可以使用stop.sh脚本来停止,另外也可以使用kill <pid>的方式来停止。需要注意不能使用-9参数,因为IM服务可能有部分数据还没有写入到数据库,在停止时需要写入数据库,如果用-9参数可能会丢失数据。

windows系统关闭命令行窗口就结束了,可能有其他更为优雅的方式来结束,我们对windows服务不太了解,也就无法提供了。

6.4. 升级

需要全部使用新版本运行,不能只替换部分文件,可以使用部分旧的配置文件包括wildfirechat.confc3p0.xml和启动脚本wildfirechat.sh。因此在升级前,先把这3个文件拷贝出来,解压新压缩包,再把这3个文件拷贝到新项目中。如果是集群部署,还需要配置新项目的hazelcast.xml文件。

也可以不使用旧项目的配置文件,重新配置所有的配置项。

7. Service方式启动

linux上可以把IM服务做成一个service,这样可以方便的用systemctl来管理IM服务。有2种方式建立service,一种方法是安装野火提供的安装包,在DEB系系统下使用命令:

sudo apt install ./im-server.deb

在REDHAT系系统下使用命令:

sudo yum localinstall ./im-server.rpm

另外一种办法是用压缩包手动写service,在IM软件压缩包下有个service目录,里面有手动添加service的详细方法。

无论用那种方式,效果都是一样的。具体操作分别如下:

  • 刷新配置,当安装或者更新后需要执行: sudo systemctl daemon-reload
  • 启动服务: sudo systemctl start im-server
  • 停止服务: sudo systemctl stop im-server
  • 重启服务: sudo systemctl restart im-server
  • 查看服务状态:sudo systemctl status im-server
  • 设置开机自启动:sudo systemctl enable im-server
  • 禁止开机自启动:sudo systemctl disable im-server

7.1. 日志

查看控制台日志使用命令:

journalctl -f -u im-server

logs目录在/var/log/im-server或者/opt/im-server/logs下。

7.2. 目录对应关系

在压缩包命令行启动时,关于野火IM的所有文件夹都在一起。当使用service方法运行是,有很多目录分散在多处,下面是他们的位置。

  • /etc/im-server/config 配置文件目录
  • /opt/im-server 程序目录,除了配置以外的其他软件目录
  • /var/log/im-server 日志目录(程序安装的服务产生的日志目录)
  • /opt/im-server/logs 日志目录(手动生成Service的服务产生的日志目录)
  • /var/lib/im-server/h2db H2数据库目录,如果使用mysql则不会使用
  • /var/lib/im-server/media 内置对象存储数据目录,如果使用非内置,则目录不会使用。

7.3. 升级

请先备份/etc/im-server/config目录下的wildfirechat.confc3p0.xmlhazelcast.xml文件,还有/opt/im-server/bin目录下的wildfirechat.sh文件,然后使用下属命令卸载im-server

deb系系统执行:

sudo apt remove im-server

redhat系系统执行:

sudo yum remove im-server

然后再执行安装命令,当安装完成以后,把wildfirechat.confc3p0.xmlwildfirechat.sh文件放到对应目录。如果配置过集群,参考旧文件修改/etc/im-server/config/hazelcast.xml文件中的关于网络的配置。最后重启验证。

8. Docker 启动方式

8.1. 编译镜像

把专业版IM服务软件包wildfirechat.tar.gz解压,得到一堆目录,其中有个docker的目录,再把wildfirechat.tar.gz拷贝到docker目录下,然后进入到docker目录下,如下命令编译镜像:

sudo docker build -t im-server .

8.2. 运行

配置: 运行需要手动指定配置目录,手动指定配置目录的方法如下,其中$PATH_TO_CONFIG为im配置目录,需要为绝对路径,模版为解压wildfirechat.tar.gz之后的config目录。另外需要创建h2数据库目录(如果用mysql就不需要了)、日志目录、内置存储服务目录(如果使用其它对象存储服务就不需要了)。

sudo docker run -it --name im-server -v $PATH_TO_CONFIG:/opt/im-server/config -v $PATH_TO_LOGS:/opt/im-server/logs -v $PATH_TO_H2DB:/opt/im-server/h2db -v $PATH_TO_MEDIA:/opt/im-server/media -e JVM_XMX=256M -e JVM_XMS=256M -p 80:80 -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 18080:18080 -p5701:5701 im-server

8.3. 导出镜像

sudo docker save -o im-server.tar im-server

8.4. 导入镜像

sudo docker load -i im-server.tar

8.5. 日志

使用docker命令来查看控制台日志:

sudo docker logs -f --tail 500 im-server

在启动命令中指定了日志目录,可以在日志目录下找到野火IM服务的日志。

8.6. 升级

需要重新制作docker镜像,配置文件目录要用新的,wildfirechat.confc3p0.xml文件可以用旧的,如果配置过集群还需要配置hezelcast.xml文件。

9. K8S启动

野火专业版IM服务在集群配置和集群网络配置比较复杂,我们没有K8S的经验,因此无法给出K8S运行的任何指导。如果客户需要K8S运行,需要先按照普通的方式运行,掌握了集群部署的方法后,再自己来实现在K8S上的运行。目前已知有部分客户使用K8S运行,但也有部分客户尝试后失败。K8S的好处是能够动态伸缩集群,实际上大多数情况下IM服务需要一个稳定的集群,我们不建议使用K8S。

powered by GitbookFile Modify: 2025-04-22 10:39:36

results matching ""

    No results matching ""