搭建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