搭建RabbitMQ集群之Windows单机版

版权声明:【分享也是一种提高】个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的。 https://blog.csdn.net/u010887744/article/details/78377634
Note:单机版集群仅作为学习使用,生产环境务必使用多服务器集群。
1、配置Host节点、环境变量
127.0.0.1 node1
127.0.0.1 node2
127.0.0.1 node3
在E:\study\rabbitmq下解压2个RabbitMQ文件夹,路径分别为E:\study\rabbitmq\rabbitmq_server-3.6.12-1、E:\study\rabbitmq\rabbitmq_server-3.6.12-2。

设置环境变量:
变量名:RABBITMQ_BASE
变量值:E:\study\rabbitmq\baseconfig

2、修改 rabbitmq-node 1的配置文件并启动

2.1、修改rabbitmq_server-3.6.12-1\sbin\ rabbitmq-env.bat,在16行加入以下配置

set RABBITMQ_CONFIG_FILE=!RABBITMQ_HOME!\etc\ rabbitmq-node1
set RABBITMQ_BASE=!RABBITMQ_BASE!\rabbitmq-cluster
set RABBITMQ_NODENAME= rabbit1@node1 (建议rabbit@node1
set RABBITMQ_NODE_PORT= 5672

2.2、修改rabbitmq_server-3.6.12-1\etc\ rabbitmq-node1.config,修改384行的listener

%% Change the port on which the HTTP listener listens,
%% specifying an interface for the web server to bind to.
%% Also set the listener to use SSL and provide SSL options.
%%
{listener, [{port, 15672},
{ip, "127.0.0.1"},
{ssl, false}]}
%% {ssl_opts, [{cacertfile, "/path/to/cacert.pem"},
%% {certfile, "/path/to/cert.pem"},
%% {keyfile, "/path/to/key.pem"}]}]},

2.3、启动node1并启用插件
打开CMD命令行窗口,进入node1节点的sbin目录,
cd /d E:\study\rabbitmq\rabbitmq_server-3.6.12-1\sbin
rabbitmq-server.bat
再打开一个命令行窗口,进入sbin目录,启用插件:
rabbitmq-plugins.bat enable rabbitmq_management
2.3、检测RabbitMQ运行状态
2.3.1、执行指令:rabbitmqctl.bat status
返回结果:
Status of node rabbit1@node1
[{pid,22556},
{running_applications,
[{rabbitmq_management,"RabbitMQ Management Console","3.6.12"},
{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.12"},
{rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.12"},
2.3.2、网页查看
浏览器打开localhost:15672,确认Overview的Node节点Node的名字是:rabbit1@node1,确认Overview的Node节点Paths节点的Config file值为e:/study/rabbitmq/rabbitmq_server-3.6.12-1/etc/rabbitmq-node1.config(注意后面应该没有not found才对)。

3、修改rabbitmq-node 2的配置文件并加入集群
3.1、修改node2的配置并启动
修改rabbitmq_server-3.6.12-2的 rabbitmq-env.bat,将node1改为 node2,RABBITMQ_NODE_PORT改为 5673
修改 rabbitmq-node2.config,将listener端口改为 15673
启动节点2,并启用插件。
3.2、参考2.3检测RabbitMQ运行状态
3.3、将node2节点加入集群
命令行进入E:\study\rabbitmq\rabbitmq_server-3.6.12-2\sbin,
rabbitmqctl.bat stop_app
rabbitmqctl.bat join_cluster rabbit1@node1
rabbitmqctl.bat start_app
3.4、查看集群状态
rabbitmqctl.bat cluster_status

打开任一节点管理界面,将看到集群信息。
如果想往集群中加入新节点,按照以上步骤加入node3、node4即可。

其他:
如果你不想部署多个RabbitMQ文件夹,可以参考文末链接,复制sbin的执行脚本rabbitmqctl、rabbitmq-env、rabbitmq-plugins、rabbitmq-server,并修改其中的参数。

4、RabbitMQ集群操作指令
4.1、用户指令
添加用户:rabbitmqctl add_user mq mqpwd
删除用户: rabbitmqctl delete_user username
修改密码:rabbitmqctl change_password username newpassword
列出所有用户:rabbitmqctl list_users
设置用户权限策略:rabbitmqctl set_user_tags mq administrator
角色说明
none 最小权限角色
management 管理员角色
policymaker 决策者
monitoring 监控
administrator 超级管理员

4.2、权限控制
创建虚拟主机:
# rabbitmqctl add_vhost vhostpath
删除虚拟主机:
# rabbitmqctl delete_vhost vhostpath
列出所有虚拟主机:
# rabbitmqctl list_vhosts
设置用户权限
# set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
<conf> <write> <read>的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源。
RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。
清除用户权限
# rabbitmqctl clear_permissions [-p vhostpath] username
列出虚拟主机上的所有权限
# rabbitmqctl list_permissions [-p vhostpath]
列出用户权限
# rabbitmqctl list_user_permissions username
vhost授权:rabbitmqctl set_permissions -p / mq '.*' '.*' '.*'

改变节点类型为磁盘节点:
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc/ram –更改节点为磁盘或内存节点
rabbitmqctl start_app

4.3、集群操作
rabbitmq-server:启动节点和应用;rabbitmqctl stop:应用和节点都将被关闭;
rabbitmqctl stop_app:仅仅关闭应用。

设置集群的名字:rabbitmqctl set_cluster_name my_mq_name
将节点移出集群(stop_app,然后reset节点):
rabbitmqctl stop_app
rabbitmqctl reset #从集群中移除,删除所有数据包括配置的用户等,删除持久化的消息。
force_reset命令和reset的区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后 的手段。
注意:只有在停止RabbitMQ应用后,reset和force_reset才能成功。
RABBITMQ集群重启(集群重启时,最后一个挂掉的节点应该第一个重启):
先在一个节点上执行
#rabbitmqctl force_boot
#service rabbitmq-server start
在其他节点上执行
#service rabbitmq-server start
查看cluster状态是否正常(要在所有节点上查询)。
#rabbitmqctl cluster_status
如果有节点没加入集群,可以先退出集群,然后再重新加入集群。
上述方法不适合内存节点重启,内存节点重启时会去磁盘节点同步数据
,如果磁盘节点没起来,内存节点一直失败。

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

欢迎个人转载,但须在文章页面明显位置给出原文连接;
未经作者同意必须保留此段声明、不得随意修改原文、不得用于商业用途,否则保留追究法律责任的权利。

【 CSDN 】:csdn.zxiaofan.com
【GitHub】:github.zxiaofan.com

如有任何问题,欢迎留言。祝君好运!
Life is all about choices! 
将来的你一定会感激现在拼命的自己!

猜你喜欢

转载自blog.csdn.net/u010887744/article/details/78377634