Rabbitmq安装过程和踩过的坑( 二 集群搭建 )

Rabbitmq 集群配置:

 

我这用普通用户启动后,在本用户的目录下边有个:.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

 

你可能感兴趣的:(rabbitmq)