RabbitMQ安装
1 安装erlang
下载地址:http://www.erlang.org/downloads
博主这里采用的是otp_src_19.1.tar.gz (200MB+)node
[root@hidden util]# tar zxvf otp_src_19.1.tar.gz [root@hidden util]# cd otp_src_19.1 [root@hidden otp_src_19.1]# ./configure --prefix=/opt/erlang [root@hidden otp_src_19.1]# make [root@hidden otp_src_19.1]# make install
修改/etc/profile文件,添加下面的环境变量:python
ERLANG_HOME=/opt/erlang export PATH=$PATH:$ERLANG_HOME/bin export ERLANG_HOME
最后执行source /etc/profile让文件生效。linux
2 安装simpleJson
下载地址:https://pypi.python.org/pypi/simplejson/
博主这里采用的是simplejson-3.10.0.tar.gzgit
[root@hidden util]# tar zxvf simplejson-3.10.0.tar.gz [root@hidden util]# cd simplejson-3.10.0 [root@hidden simplejson-3.10.0]# python setup.py install
3 安装rabbitmq
下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/
博主这里用的版本就有不少了,好比2.7.0, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.5.7, 3.6.0等等,不过都是用的rabbitmq-server-generic-unix-..*.tar.gz的版本。
这里以3.5.7举例:web
[root@hidden util]# tar zvxf rabbitmq-server-generic-unix-3.5.7.tar.gz -C /opt [root@hidden util]# cd /opt [root@hidden util]# mv rabbitmq_server-3.5.7 rabbitmq
修改/etc/profile文件,添加下面的环境变量:json
export PATH=$PATH:/opt/rabbitmq/sbin
最后执行source /etc/profile让文件生效。
运行:rabbitmq-server -detached
以后运行rabbitmqctl status查看rabbitmq是否正常启动:vim
[root@zhuzhonghua2-fqawb rabbitmq]# rabbitmqctl status Status of node 'rabbit@zhuzhonghua2-fqawb' ... [{pid,25020}, {running_applications, [{rabbitmq_management,"RabbitMQ Management Console","3.5.7"}, {rabbitmq_management_agent,"RabbitMQ Management Agent","3.5.7"}, {rabbit,"RabbitMQ","3.5.7"}, {mnesia,"MNESIA CXC 138 12","4.14.1"}, {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.5.7"}, {webmachine,"webmachine","1.10.3-rmq3.5.7-gite9359c7"}, {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.5.7-git680dba8"}, {os_mon,"CPO CXC 138 46","2.4.1"}, {amqp_client,"RabbitMQ AMQP Client","3.5.7"}, {inets,"INETS CXC 138 49","6.3.3"}, {xmerl,"XML parser","1.3.12"}, {sasl,"SASL CXC 138 11","3.0.1"}, {stdlib,"ERTS CXC 138 10","3.1"}, {kernel,"ERTS CXC 138 10","5.1"}]}, {os,{unix,linux}}, {erlang_version, "Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:4:4] [async-threads:64] [hipe] [kernel-poll:true]\n"}, {memory, [{total,60110136}, {connection_readers,0}, {connection_writers,0}, {connection_channels,0}, {connection_other,5664}, {queue_procs,1028160}, {queue_slave_procs,1576056}, {plugins,8008840}, {other_proc,6115560}, {mnesia,197760}, {mgmt_db,14219256}, {msg_index,58288}, {other_ets,1181200}, {binary,633896}, {code,17650127}, {atom,711593}, {other_system,8723736}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,3301929779}, {disk_free_limit,50000000}, {disk_free,35754786816}, {file_descriptors, [{total_limit,924},{total_used,6},{sockets_limit,829},{sockets_used,1}]}, {processes,[{limit,1048576},{used,195}]}, {run_queue,0}, {uptime,139660}]
RabbitMQ集群搭建方法
这里展现的是多机集群的部署,若是机器受限,能够选择单机集群部署,详细能够参考《RabbitMQ单机多实例配置》。
这里选用三台主机,主机名分别是hidden1, hidden2, hidden3
1 在这三台机器中安装rabbitmq-server, 参考上面。cookie
2 读取其中一个节点的cookie, 并复制到其余节点(节点之间经过cookie肯定相互是否可通讯)。
cookie存放在/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie中。app
3 逐个启动节点 rabbitmq-server -detachedsocket
4 查看各节点的状态: rabbitmqctl status, rabbitmqctl cluster_status
5 配置各节点的hosts文件( vim /etc/hosts)
xxx.xxx.xxx.xxx hidden1
xxx.xxx.xxx.xxx hidden2
xxx.xxx.xxx.xxx hidden3
6 创建集群
以hidden1为主节点,在hidden2上:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@hidden1
rabbitmqctl start_app
hidden3上的操做与hidden2的雷同。
最后经过rabbitmqctl cluster_status查看集群的状态信息:
[{nodes,[{disc,[rabbit@hidden1,'rabbit@hidden2','rabbit@hidden3']}]}, {running_nodes,[rabbit@hidden1,'rabbit@hidden2','rabbit@hidden3']}, {cluster_name,<<"rabbit@hidden1">>}, {partitions,[]}]
7 在访问web(http://xxx.xxx.xxx.xxx:15672)时, 若是在Overview中的Nodes部分看到“Node statistics not available”的信息,说明在该节点上web管理插件还未启用。直接运行rabbitmq-plugins enable rabbitmq_management便可。
rabbitmq搭建集群踩坑记
三台节点启动以后,想要使用s146做为集群主节点,在s151上将该节点加入s146集群时,报以下错误。
[root@s151 rabbitmq]# rabbitmqctl join_cluster rabbit@s146 Clustering node rabbit@s151 with rabbit@s146 ... Error: unable to connect to nodes [rabbit@s146]: nodedown DIAGNOSTICS =========== attempted to contact: [rabbit@s146] rabbit@s146: * connected to epmd (port 4369) on s146 * epmd reports node 'rabbit' running on port 25672 * TCP connection succeeded but Erlang distribution failed * suggestion: hostname mismatch? * suggestion: is the cookie set correctly? * suggestion: is the Erlang distribution using TLS? current node details: - node name: 'rabbitmq-cli-30368@s151' - home dir: /root - cookie hash: X8M4gNn7BBuuU5WV1cHdhw==
我在网上看到了不少人都碰到了这个错误,错误提示中也说了三种解决方案。
suggestion: hostname mismatch?
hostname配置是否正确,对于hostname的配置能够参考https://my.oschina.net/mingshashan/blog/741988
suggestion: is the cookie set correctly?
.erlang.cookie设置是否正确,.erlang.cookie文件里面的字符串至关于一个密钥同样,一个节点想要加入某个集群,必需要和这个机器中的全部节点的.erlang.cookie内容同样,因此一般将主节点的.erlang.cookie文件分发给其它节点便可,关键是这个节点可能出如今两个位置/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie。这样一来如何肯定本身的.erlang.cookie文件在哪儿呢?这个要看rabbitmq的日志文件,以下所示:
=INFO REPORT==== 9-Apr-2018::14:57:21 === node : rabbit@s151 home dir : /root config file(s) : /opt/rabbitmq/sbin/../etc/rabbitmq/rabbitmq.config (not found) cookie hash : HfR3DHABJqfPDV+hBgdzXQ== log : /opt/rabbitmq/sbin/../var/log/rabbitmq/rabbit@s151.log sasl log : /opt/rabbitmq/sbin/../var/log/rabbitmq/rabbit@s151-sasl.log database dir : /opt/rabbitmq/sbin/../var/lib/rabbitmq/mnesia/rabbit@s151
其中的home dir就是你的.erlang.cookie文件存放的目录,而这个cookie hash就是.erlang.cookie里面的值hash转换获得的,你能够比较cookie hash的值是否是一致来判断你的.erlang.cookie是否一致。我以前一直觉得个人.erlang.cookie文件在/var/lib/rabbitmq/下,因此多次操做都失败了,看了日志后发现节点的cookie hash不一致,才发现原来一直将.erlang.cookie这个文件的位置搞错了,因此看日志很重要。
suggestion: is the Erlang distribution using TLS?
这种状况目前好像还没碰到过。
参考: https://blog.csdn.net/u013256816/article/details/53524766 https://blog.csdn.net/u012062455/article/details/79867080