我这用普通用户启动后,在本用户的目录下边有个:.erlang.cookie 文件,我用rabbitmq用户启动就是在/home/rabbitmq目录下边有这个文件,如果rpm包安装的,这个文件目录在:/var/lib/rabbitmq 目录下边。 这点,如果重启使用ROOT启动,这个erlang文件会变化到/root 目录下,有可能导致rabbitmq起不来,可以启动的时候通过设置:-setcookie cookie 这个参数来设置这个文件存放的位置。
1. 开启话务组件
./rabbitmq-plugins enable rabbitmq_stomp
2. 配置/etc/hosts 保证通信
也就是上面说的根据hostname配置ip映射.
3. 保证集群中所有节点erlang的cookie文件一致
/root/.erlang.cookie
用该命令将主节点的erlang.cookie复制到各个节点
scp /root/.erlang.cookie [email protected]:/root/.erlang.cookie
172.17.0.1 就是子节点的ip了,@前面的root是linux帐号,总之不管你用什么方式,只要让两个节点的这个文件是一样的就行了.
4. 重启子节点的rabbitmq
./rabbitmqctl stop_app
./rabbitmqctl reset
./rabbitmqctl join_cluster rabbit@hostname #作为disk节点加入主节点 hostname为主节点主机名。
如果作为ram节点可如下:./rabbitmqctl join_cluster –ram rabbitmq@mqtest
这里给大家的建议是一般作为disk节点,disk节点就是说会把数据保存到磁盘的意思.
./rabbitmqctl start_app
6. 设置镜像队列
通过访问web管理控制台添加policies
这个的作用是使集群中的队列按照一定的规则在集群中进行同步
pattern就是同步规则,我的正则表达式是 ^.* 表示任意的.
你也可以设定自己规则.
Name: cluster_mirrors_policy #自己取名
Pattern: ^(?!amq\.).* #正则表达式,
Priority :1 #优先级,优先级则定义了policy被执行的顺序。
ha-mode : all #镜像队列模式,ALL表示所有节点镜像镜像
ha-sync-mode : automatic #设置同步方式为自动同步
ha-promote-on-shutdown : always #
使用:rabbitmqctl cluster_status 查看是否加入集群。
到这里rabbitmq集群搭建就完成了。
以下是其他一些文档中看到觉得有用的东西:
这里有一些重要的警告:
当整个集群崩溃的时候, 最后一个崩溃的节点必须第一个上线.如果不是这样,节点将会等待最后一个磁盘节点30秒以确认其重新上线,否则就会失败. 如果最后一个下线的节点,不能再重新上线,那么它可能会使用forget_cluster_node命令来从集群中删除
如果所有集群节点都在同一个时间内停止且不受控制(如断电)。在这种情况下,你可以在某个节点上使用force_boot命令使其再次成为可启动的。
删除节点:
先停掉需要删除的rabiitmq:
rabbitmqctl stop_app
然后:
rabbitmqctl forget_cluster_node rabbit@hostname #解除集群
rabbitmqctl start_app #这时候重启可能还是会报错,需要使用下面的命令重置
rabbitmqctl reset #重置rabbitmq ,再进行重启。
同一个节点起多个rabiitmq做集群,可以用如下命令:
$ RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached
$ RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=hare rabbitmq-server -detached
$ rabbitmqctl -n hare stop_app
$ rabbitmqctl -n hare join_cluster rabbit@`hostname -s`
$ rabbitmqctl -n hare start_app
这会设置两个节点的集群,这两个节点都是磁盘节点. 注意,如果你想打开非AMQP的其它端口,你需要通过命令行进行配置:
$ RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit rabbitmq-server -detached
$ RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=hare rabbitmq-server -detached
设置内存节点集群:rabbitmqctl join_cluster --ram rabbit@rabbit1 #加了参数 --ram
(目前的建议是至少有2个以上的磁盘节点的rabbitmq,再多节点,就可以使用--ram来创建内存节点达到扩容的目的)
节点类型转换,需要停止rabbitmq后,然后通过:
rabbitmqctl change_cluster_node_type disc #转换为磁盘节点
rabbitmqctl change_cluster_node_type ram #转换为内存节点
参考文档:
http://www.blogjava.net/qbna350816/archive/2016/06/05/430784.html
https://blog.csdn.net/u013256816/article/details/53524766
https://www.ibm.com/developerworks/cn/opensource/os-cn-RabbitMQ/index.html