首先先把 RabbitMQ 安装好,包括 er-lang ,这里就不多说明了,只针对cluster 建设。
我假设是通过 rpm 的方式安装,那么路径上就比较好解释说明。
针对rabbitmq 所使用的port,分别为:4369,5672, 15672, 25672 ,因此,最后防火墙别忘了设置允许访问,在设置之前请先关闭防火墙。
假设有3台服务器,名称分别为:rbmq0, rbmq1, rbmq2, 其中,rbmq0 是主服务器。
然后到3台的服务器中,添加到 /etc/hosts 中,分别为:
X.X.28.116 rbmq0 SVR-28-116
X.X.28.114 rbmq1 SVR-28-114
X.X.28.113 rbmq2 SVR-28-113
再到每一台中,修改 /etc/rabbitmq/rabbitmq-env.conf 内容如下:
RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+A 128"
NODE_PORT=5672
NODENAME=rbmq0 <-- 每一台服务器添加自己服务器的名字,另外两台分别为:rbmq1, rbmq2
然后先到 rbmq0 上执行 rabbitmq, 这主要是确保3台的rabbitmq 都没有问题,所以请到每一台执行rabbitmq-server
[root@SVR-28-116 ~]# service rabbitmq-server restart
只要你没修改 /etc/rabbitmq/rabbitmq.conf 文件, 基本上不会有什么问题。第一次使用,当你执行完毕之后,请到 /var/lib/rabbitmq 目前录找
这个文件是由rabbitmq生成的,第一次执行就会出现在以上的目录中。
然后看下内容:
分别把文件内容复制到另外2台服务器,同样放在 /var/lib/rabbitmq 目录下,你可以用以下方式快速处理。目的就是必须保证3台的 ,erlang.cookie 内容的一至。很重要!!
然后再到第一台rbmq0 执行:
[root@SVR-28-116 ~]# rabbitmqctl cluster_nodes
Cluster status of node 'rbmq0@SVR-28-116'
[{nodes,[{disc,['rbmq0@SVR-28-116']}]},
{running_nodes,['rbmq0@SVR-28-116']},
{cluster_name,<<"rbmq0">>},
{partitions,[]},
{alarms,[{'rbmq0@SVR-28-116',[]}]}]
这时你可以先放一边,再到另外两台上按以下方式分别执行:
rbmq1 Server
[root@SVR-28-114 ~]# service rabbitmq-server start
执行后确保没有问题。
[root@SVR-28-114 ~]# rabbitmqctl stop_app
[root@SVR-28-114 ~]# rabbitmqctl join_cluster rbmq0@SVR-28-116
Clustering node 'rbmq1@SVR-28-114' with 'rbmq0@SVR-28-116'
那就表示已经添加成功
另一台同样也执行
rbmq1 Server
[root@SVR-28-113 ~]# service rabbitmq-server start
执行后确保没有问题。
[root@SVR-28-113 ~]# rabbitmqctl stop_app
[root@SVR-28-113 ~]# rabbitmqctl join_cluster rbmq0@SVR-28-116
Clustering node 'rbmq1@SVR-28-113' with 'rbmq0@SVR-28-116'
表示已经添加成功
然后,我们再到第一台执行:
[root@SVR-28-116 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node 'rbmq0@SVR-28-116'
[{nodes,[{disc,['rbmq0@SVR-28-116','rbmq1@SVR-28-114','rbmq2@SVR-28-113']}]}, <-- 114, 113 已经添加成功{running_nodes,['rbmq0@SVR-28-116']},
{cluster_name,<<"rbmq0">>},
{partitions,[]},
{alarms,[{'rbmq0@SVR-28-116',[]}]}]
基本上算是已经成功了。接下来再做几件事:
[root@SVR-28-116 rabbitmq]# rabbitmq-plugins enable rabbitmq_management
主要是使用web介面的管理。
访问web:
http://X.X.28.116:15672
可以看到,rbmq1,rbmq2 并没有执行。那么,我们分别到该两台服务器启动rabbitmq-server
service rabbitmq-server start
基本上算是完成了。
Firewall
# rabbitmq amqp
-A INPUT -p tcp -m tcp -m state --dport 5672:5673 --state NEW -j ACCEPT
# rabbitmq http management
-A INPUT -p tcp -m tcp -m state --dport 15672 --state NEW -j ACCEPT
# rabbitmq cluster
-A INPUT -p tcp -m tcp -m state --dport 25672 --state NEW -j ACCEPT
# rabbitmq epmd (port 4369) on mqmaster
-A INPUT -p tcp -m tcp -m state --dport 4369 --state NEW -j ACCEPT