rabbitmq 集群

搭建rabbitmq+HA 高可用集群
 
一.环境
centos6.5     192.168.9.27     rabbitmq1
centos6.5 192.168.9.28        rabbitmq2
centos6.5 192.168.9.29        rabbitmq3
 
二.每台服务器搭建单点rabbitmq 服务,见本博客地址:http://www.cnblogs.com/lzcys8868/p/7506251.html
端口说明:15672是管理界面用的;25672是集群之间使用的端口;4369是erlang进程用来做node连接的。
 
http://192.168.9.27:15672    usename=admin  passwd=admin
 
http://192.168.9.28:15672    username=admin  passwd=admin
 
 
 
三. 保证上面的三个节点可用,将三个节点连接起来形成高可用cluser。这样我们就可以让我们的exchange,queue在这两个节点之间复制,形成高可用的queue。
1》.erlang.cookie 这个文件是erlang用来发现 和互相连接的基础。将三个节点中的.erlang.cookie设置成一样,这是erlang的约定,一样的 .cookie hash key 他认为是合法和正确的
 
[root@rabbitmq1 sbin]# find / -name .erlang.cookie -type f
/root/.erlang.cookie
 
[root@rabbitmq2 ~]# scp 192.168.9.27:/root/.erlang.cookie /root
root@192.168.9.27's password:
.erlang.cookie
 
[root@rabbitmq3 ~]# scp 192.168.9.27:/root/.erlang.cookie /root
root@192.168.9.27's password:
.erlang.cookie
 
[root@rabbitmq1 ~]# chmod u+w .erlang.cookie   //三台服务器上都加上权限
[root@rabbitmq1 ~]# ls -ld .erlang.cookie
-rw-------. 1 root root 20 3月   8 00:00 .erlang.cookie
 
2》保证三台服务器hosts 相同,erlang会通过hosts文件发现节点
[root@rabbitmq1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 
192.168.9.27  rabbitmq1
192.168.9.28  rabbitmq2
192.168.9.29  rabbitmq3
 
 
3》将rabbitmq2,rabbitmq3与rabbitmq1组成集群 。rabbitmq2和rabbitmq3会默认连接在一起
[root@rabbitmq2 sbin]# ./rabbitmqctl stop_app
Stopping node rabbit@rabbitmq2 ...
注:[rabbitmq-discuss] Error: unable to connect to node 'rabbit@localhost': nodedown.。如果执行 ./rabbitmqctl stop_app命令时报此错误,是“.erlang.cookie”的问题,从新复制同一台上的cookie。杀掉 5672    15672   4369 端口的进程,然后再执行 ./rabbitmq-server --detached &  从新启动rabbitmq,再次执行  ./rabbitmqctl stop_app 命令
[root@rabbitmq2 sbin]# ./rabbitmqctl join_cluster rabbit@rabbitmq1    //rabbitmq2与rabbitmq1 组成集群
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
 
[root@rabbitmq2 sbin]# ./rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...
 
              RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq2.log
  ######  ##        /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq2-sasl.log
  ##########
              Starting broker...
completed with 6 plugins.
 
 
 
[root@rabbitmq3 sbin]# ./rabbitmqctl stop_app
Stopping node rabbit@rabbitmq3 ...
[root@rabbitmq3 sbin]# ./rabbitmqctl join_cluster rabbit@rabbitmq1    //rabbitmq3与rabbitmq1组成集群
Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1 ...
[root@rabbitmq3 sbin]# ./rabbitmqctl start_app
Starting node rabbit@rabbitmq3 ...
 
              RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq3.log
  ######  ##        /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq3-sasl.log
  ##########
              Starting broker...
completed with 6 plugins.
 
 
 
4》集群验证:三个节点都是可用的
 
 
四.默认情况下节点占用的memory 是总内存的40%,可以根据自己的用途研究rabbitmq的配置项。为了提高性能,不需要三个节点都是disc 的节点,所以我们需要启动一个节点为RAM模式。
[root@rabbitmq3 sbin]# ./rabbitmqctl  change_cluster_node_type ram   //改变rabbitmq3的节点模式为ram
Turning rabbit@rabbitmq3 into a ram node ...
Error:  Mnesia is still running on node rabbit@rabbitmq3.
        Please stop the node with rabbitmqctl stop_app first.
 
根据提示操作:
[root@rabbitmq3 sbin]# ./rabbitmqctl stop_app
Stopping node rabbit@rabbitmq3 ...
[root@rabbitmq3 sbin]# ./rabbitmqctl change_cluster_node_type ram
Turning rabbit@rabbitmq3 into a ram node ...
 
[root@rabbitmq3 sbin]# ./rabbitmqctl start_app
Starting node rabbit@rabbitmq3 ...
 
              RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq3.log
  ######  ##        /usr/local/rabbitmq/var/log/rabbitmq/rabbit@rabbitmq3-sasl.log
  ##########
              Starting broker...
completed with 6 plugins.
 
 
注:节点rabbitmq3的类型 已经是RAM了。可以把节点rabbitmq2节点类型也做修改
 
 
五.设置镜像队列策略
我们需要设置exchange,queue 高可用策略,这样才能真的做到高可用。现在是物理上的机器或者说是虚拟节点是高可用的,但是里面的对象需要我们进行配置策略。
 
三台服务器上都执行:
[root@rabbitmq1 sbin]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
注:exchange 里有 ha-all
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/lzcys8868/p/7522258.html