1、先下载安装包
下载地址: https://www.emqx.io/downloads
最好下载zip包安装,rpm方式安装容易出现其他未知异常和不可预知的冲突。
根据自己操作系统版本选择对应安装包,我选择的是
emqx-centos6-v3.2.3.zip这个版本
2、把下载好的包放到特定目录,然后解压
$ unzip emqx-centos6-v3.2.3.zip
3、启动EMQX
进入emqx/bin目录下面执行:
./emqx start
执行成功会出现:
emqx 3.2.3 is started successfully!
4、查看服务器运行状态
启动成功后可以通过命令查看服务器运行情况
$ ./bin/emqx_ctl status
Node ‘[email protected]’ is started
emqx v3.2.3 is running
正常情况服务器就启动起来了!
但是如果启动遇到问题可以通过 ./emqx console进入调试模式看看什么原因导致启动不起来。
如果是插件端口被占用,一般不会影响主服务器启动,会有插件启动失败的日志。
exception exit: {listen_error,‘http:management’,eaddrinuse}
in function ranch_acceptors_sup:listen_error/5 (/emqx_temp/emqx_rel/_checkouts/ranch/src/ranch_acceptors_sup.erl, line 66)
比如上面这个日志是因为http:management这个插件端口被占用,只要看看对应插件使用的是哪个端口,再在服务器中看看这个端口是否被占用。
各个插件的配置文件所在目录是emqx/etc/plugins下面,
比如http:management 插件配置文件就是emqx_management.conf
我们打开它
management.max_row_limit = 10000
management.application.default_secret = public
management.listener.http = 8080
management.listener.http.acceptors = 2
management.listener.http.max_clients = 512
management.listener.http.backlog = 512
management.listener.http.send_timeout = 15s
management.listener.http.send_timeout_close = on
可以看出它监听的是8080端口
在用命令lsof -I:8080看看系统的8080被哪个进程占用:
$lsof -I:8080
kill对应进程 或者修改配置文件中的端口号,重启emqx就可以了。
5、如果还有其他问题导致不能正常启动,可以进入目录emqx/bin
执行 ./emqx console进入调试模式,一般命令启动后会首先打印如下日志:
Exec: /root/EMQX/emqx/erts-10.3/bin/erlexec -boot /root/EMQX/emqx/releases/v3.2.3/emqx -mode embedded -boot_var ERTS_LIB_DIR /root/EMQX/emqx/erts-10.3/…/lib -mnesia dir “/root/EMQX/emqx/data/mnesia/[email protected]” -config /root/EMQX/emqx/data/configs/app.2019.10.28.13.32.54.config -args_file /root/EMQX/emqx/data/configs/vm.2019.10.28.13.32.54.args -vm_args /root/EMQX/emqx/data/configs/vm.2019.10.28.13.32.54.args – console
emqx broker启动的时候是读取的emqx/etc目录下面的所有配置,然后它会把配置转化为erlang语言能读取的配置,给erlang虚拟机使用。上面这个日志中就提示了转化后的配置文件路径,比如日志中的这两行:
/root/EMQX/emqx/data/configs/app.2019.10.28.13.32.54.config
/root/EMQX/emqx/data/configs/vm.2019.10.28.13.32.54.args
第一个是转化后的emqx broker的配置,第二个是转化后的erlang虚拟机的配置,可以通过这个配置看看我们修改的配置是否最终生效。
注意:服务器启动中有一个很坑爹的问题,如果启动中报类似于如下错误:
register/listen error : “inet_tcp” econnrefused
你会发现,无论你如何百度和google,网上找的所有办法都无法解决实际问题,并且根本无法启动broker,因为他们说的都不是实质性的问题。
这个问题的根本原因是erlang虚拟机启动的时候会启动一个epmd的守护线程,这个线程的端口如果一旦被系统中的其他进程占用,就会出现这个莫名其妙的异常,但是错误日志又没有任何关于端口被占用的提醒,更没有是哪个端口被占用的提示,对于非erlang开发人员来说,这种提示信息真的很不友好,真的是让人一头雾水,很难发现真正问题的根源,最终你可能会走错方向。
并且你会发现,你找完所有的emqx里面的配置文件都根本无法找到配置epmd端口的地方。而且这个虚拟机是内嵌在EMQX broker包里面,对于非EMQX开发人员来说,你根本不知道它是在哪里调用命令启动虚拟机,参数又是读取的哪个配置文件。并且erlang语言自己内部的配置是很难读懂的。
虽然很麻烦,但是总还是知道该怎么解决问题,解决的思想就是修改erlang虚拟机启动时候,epmd启动的端口号。
我的解决方案如下:
在emqx目录下面有一个erts-xxx的目录,就是内嵌的虚拟机目录只要先执行以下命令:
erts-10.3/bin/epmd -port xxxx
export ERL_EPMD_PORT=xxxx
将epmd进程在不冲突的端口先启动起来,启动起来后,可以通过命令:
ps -ef| grep epmd查看进程启动情况
如果epmd启动成功,然后再启动emqx broker就没有问题了。
如果你有更好的解决方案,欢迎分享!