RabbitMQ版本界面:html
RabbitMQ Erlang版本兼容:http://www.rabbitmq.com/which-erlang.htmljava
Erlang各版本下载界面:http://erlang.org/download/node
yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel openssl-devel zlib-devel -y
tar -zxf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --prefix=/opt/erlang/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac make && make install
export ERL_HOME=/usr/local/erlang export PATH=${JAVA_HOME}/bin:${ERL_HOME}/bin:$PATH
source /etc/profilegit
>erlgithub
xz -d rabbitmq-server-generic-unix-3.6.16.tar.xz tar -xf rabbitmq-server-generic-unix-3.6.16.tar.xz mv -r rabbitmq_server-3.6.16 /usr/local/rabbitmq-3.6.16
准备三台服务器并配置hosts(/etc/hosts):web
192.168.21.191 vm1 192.168.21.189 vm2 192.168.21.190 vm3
配置host名称(/etc/sysconfig/network):bash
HOSTNAME=vm1
本身编译安装的rabbitmq 在第一次启动rabbitmq的时候.erlang.cookie才会生成服务器
在搭建RabbitMQ集群的时候每每会由于.erlang.cookie而报各类错误,网上查资料也会常常说.erlang.cookie会在$home下,或者在/var/lib/rabbitmq下,到底在rabbitmq启动的时候用的哪一个cookie,cookie存放的路径在哪里,那么下面咱们来仔细的查证一下。cookie
erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每一个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400。app
官方在介绍集群的文档中提到过.erlang.cookie通常会存在这两个地址:第一个是$home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。
- 若是咱们使用解压缩方式安装部署的rabbitmq,那么这个文件会在${home}目录下,也就是$home/.erlang.cookie。
- 若是咱们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。
使用-detached参数运行各节点:
rabbitmqctl stop rabbitmq-server -detached
而后能够经过rabbitmqctl cluster_status查看节点状态。PS:要先拷贝cookie到另外两台机器上,保证三台机器上的cookie是一致的,而后再启动服务。
因为guest这个用户,只能在本地访问,因此咱们要新增一个用户并赋予权限:
添加用户并设置密码:
rabbitmqctl add_user admin 123456
添加权限(使admin用户对虚拟主机“/” 具备全部权限):
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
修改用户角色(加入administrator用户组)
rabbitmqctl set_user_tags admin administrator
而后就能够远程访问了,而后可直接配置用户权限等信息。到此,就能够经过http://ip:15672 使用admin 123456 进行登录了。
到这里的话,每一个节点是做为单独的一台RabbitMQ存在的,也能够正常提供服务了
(3)组成集群
rabbitmq-server启动时,会一块儿启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你须要中止这个应用,并将节点设置为原始状态。若是使用./rabbitmqctl stop,应用和节点都将被关闭。因此使用rabbitmqctl stop_app仅仅关闭应用。
将 vm二、vm3与 vm1 组成集群,这里以vm2为例
vm2# rabbitmqctl stop_app
vm2# rabbitmqctl join_cluster rabbit@vm1 ####这里集群的名字必定不要写错了
vm2# rabbitmqctl start_app
将vm3重复上述操做,也加入vm1的集群。
则此时 vm2 与 vm3 也会自动创建链接,集群配置完毕;(PS:若是要使用内存节点,则可使用vm2 # rabbitmqctl join_cluster --ram rabbit@vm1加入集群)集群配置好后,能够在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。
vm3# rabbitmqctl cluster_status
Cluster status of node rabbit@vm3 ... [{vms,[{disc,[rabbit@vm1,rabbit@vm2,rabbit@vm3]}]}, {running_vms,[rabbit@vm1,rabbit@vm2,rabbit@vm3]}, {cluster_name,<<"rabbit@vm1">>}, {partitions,[]}, {alarms,[{rabbit@vm1,[]},{rabbit@vm2,[]},{rabbit@vm3,[]}]}]
可知,集群的名称默认为rabbit@vm1;
PS:另一种查看集群是否成功的方式,在web页面上的“Queues”的列表中,查看有以下显示为“同步镜像到node2”,则也表示集群配置成功
RabbitMQ脑裂问题:
如上图红色字体展现部分:Network partition detected ,Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data.
参考:
https://blog.csdn.net/wochunyang/article/details/52524977 https://www.cnblogs.com/taoge007/p/6208552.html https://blog.csdn.net/jxdl6655/article/details/78194191 https://www.cnblogs.com/kevingrace/p/8012792.html