1. 集群架构
1.1 四种内部元数据
队列元数据、交换器元数据、绑定元数据、vhost元数据。
单一节点中:会将数据存储到内存,同时将持久化元数据保存到硬盘。
集群中: 存储到磁盘上、内存中。
集群中的队列:不是每一个rabbitmq节点都有所有队列的拷贝,集群只会在单个节点上创建完整信息。
1.2 、内存节点和磁盘节点
内存节点: 元数据定义都存储在内存中。内存节点有出色的性能。
磁盘节点: 元数据定义都存储在磁盘中(单节点服务器都是磁盘节点)。磁盘节点能持久化信息。
rabbitmq集群中至少有一个磁盘节点。当节点加入或者离开集群时,必须将变更通知到至少一个磁盘节点。
如果集群只有一个磁盘节点,正好它崩了。此时集群还可以路由消息。但是不能创建元数据和管理用户和节点。解决方案是集群中设置两个磁盘节点。
2. 单机集群搭建
2.1 配置集群前,先确保第一次安装的rabbitmq服务关闭:
rabbitmqctl stop
2.2 在一台服务器上启动3个节点的集群
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=rabbit_1 rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit_2 rabbitmq-server -detached
2.3 配置web UI 访问:
rabbit
[root@localhost ~]# rabbitmqctl -n rabbit@localhost add_user admin admin
[root@localhost ~]# rabbitmqctl -n rabbit@localhost set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl -n rabbit@localhost set_permissions -p / admin ".*" ".*" ".*"
rabbit_1
[root@localhost ~]# rabbitmqctl -n rabbit_1 add_user admin admin
[root@localhost ~]# rabbitmqctl -n rabbit_1 set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl -n rabbit_1 set_permissions -p / admin ".*" ".*" ".*"
rabbit_2:
[root@localhost ~]# rabbitmqctl -n rabbit_2 add_user admin admin
[root@localhost ~]# rabbitmqctl -n rabbit_2 set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl -n rabbit_2 set_permissions -p / admin ".*" ".*" ".*"
访问web页面: http://ip:15672/#/ http://ip:15673/#/ http://ip:15674/#/
2.4 第一个rabbit为主节点(磁盘节点)
2.5 配置rabbit_1为磁盘节点
[root@localhost ~]# rabbitmqctl -n rabbit_1 stop_app
[root@localhost ~]# rabbitmqctl -n rabbit_1 reset
[root@localhost ~]# rabbitmqctl -n rabbit_1 join_cluster rabbit@localhost
[root@localhost ~]# rabbitmqctl -n rabbit_1 start_app
2.6 配置rabbit_2为RAM内存节点
[root@localhost ~]# rabbitmqctl -n rabbit_2 stop_app
[root@localhost ~]# rabbitmqctl -n rabbit_2 reset
[root@localhost ~]# rabbitmqctl -n rabbit_2 join_cluster rabbit@localhost --ram
[root@localhost ~]# rabbitmqctl -n rabbit_2 start_app
2.7 查看集群状态:
[root@localhost ~]# rabbitmqctl cluster_status
得到以下结果:
[root@localhost ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@localhost
[{nodes,[{disc,[rabbit@localhost,rabbit_1@localhost]},
{ram,[rabbit_2@localhost]}]},
{running_nodes,[rabbit_2@localhost,rabbit_1@localhost,rabbit@localhost]},
{cluster_name,<<"rabbit@localhost">>},
{partitions,[]},
{alarms,[{rabbit_2@localhost,[]},
{rabbit_1@localhost,[]},
{rabbit@localhost,[]}]}]
访问web页面可以看见集群信息(两个磁盘节点,一个内存节点)