目录
1. RabbitMQ之激活Web管理插件
2. RabbitMQ之添加用户并设置密码、修改密码
3. RabbitMQ之添加集群节点
4. RabbitMQ之剔除节点
5. RabbitMQ之集群节点类型切换
6. RabbitMQ之单机多节点配置
1. RabbitMQ之激活Web管理插件
0x01 激活Web管理插件
# rabbitmq-plugins enable rabbitmq_management
查看Web插件启用的端口
# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 2473/beam.smp
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 2570/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 802/sshd
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 2473/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 2473/beam.smp
tcp6 0 0 :::4369 :::* LISTEN 2570/epmd
tcp6 0 0 :::22
- 4369 – erlang发现口
- 5672 –client端通信口
- 15672 – 管理界面ui端口
- 25672 – server间内部通信口
浏览器访问 ip:15672 默认登入帐号密码:guest/guest
0x02 问题解决
guest用户访问时,出现如下问题:
HTTP access denied: user 'guest' - User can only log in via localhost。
解决方法:
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问。
如果想使用guest/guest通过远程机器访问,需要在rabbitmq配置文件中(/etc/rabbitmq/rabbitmq.config)中设置loopback_users为[]。
/etc/rabbitmq/rabbitmq.config文件完整内容如下(注意后面的半角句号),且默认/etc/rabbitmq/rabbitmq.config配置文件没有,需手动创建:
# tee /etc/rabbitmq/rabbitmq.config <<EOF
[{rabbit, [{loopback_users, []}]}].
EOF
2. RabbitMQ之添加用户并设置密码、修改密码
0x01 添加用户并设置密码、修改密码
# rabbitmqctl add_user admin test
0x02 修改修用户密码
# rabbitmqctl change_password admin admina
0x03 清除用户密码
# rabbitmqctl clean_passwd admin
0x04 删除用户
# rabbitmqctl delete_user admin
0x05 查看用户
# rabbitmqctl list_users
Listing users ...
user tags
admin []
guest [administrator]
0x06 设置admin 用户为管理员
# rabbitmqctl set_user_tags admin administrator
0x07 为 root 用户设置所有所有权限
# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
3. RabbitMQ之添加集群节点
0x01 添加集群节点(在待添加节点机器上执行)
# rabbitmqctl stop_app
# 若需要更换主节点,需先重置master和node
# rabbitmqctl reset
# rabbitmqctl join_cluster rabbit@rbtmq_node1
Clustering node rabbit@rbtmq_master with rabbit@rbtmq_node1
# rabbitmqctl start_app
# rabbitmqctl cluster_status
Cluster status of node rabbit@rbtmq_master ...
[{nodes,[{disc,[rabbit@rbtmq_master,rabbit@rbtmq_node1]}]},
{running_nodes,[rabbit@rbtmq_node1,rabbit@rbtmq_master]},
{cluster_name,<<"rabbit@rbtmq_master">>},
{partitions,[]},
{alarms,[{rabbit@rbtmq_node1,[]},{rabbit@rbtmq_master,[]}]}]
集群加入节点时可以指定节点类型,RabbitMQ有两种节点类型:内存类型(ram)和磁盘类型(disc)。若要在节点加入集群时,直接指定节点类型,可输入如下命令:
# rabbitmqctl join_cluster rabbit@rbtmq_node1 --ram
4. RabbitMQ之剔除节点
0x01 方法一:待剔除节点离线后剔除
- 先停止待剔除节点的 RabbitMQ 服务 (待剔除节点上运行)
# rabbitmqctl stop_app
- 清除节点状态(待剔除节点上运行)
# rabbitmqctl reset
0x02 方法二:待剔除节点在线剔除
- 在主节点上剔除待剔除节点 (主节点上运行)
# rabbitmqctl forget_cluster_node rabbit@node1
5. RabbitMQ之集群节点类型切换
# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rbtmq_node1 ...
# rabbitmqctl change_cluster_node_type ram
Turning rabbit@rbtmq_node1 into a ram node
# rabbitmqctl start_app
Starting node rabbit@rbtmq_node1 ...
completed with 3 plugins.
# rabbitmqctl cluster_status
Cluster status of node rabbit@rbtmq_node1 ...
[{nodes,[{disc,[rabbit@rbtmq_master]},{ram,[rabbit@rbtmq_node1]}]},
{running_nodes,[rabbit@rbtmq_master,rabbit@rbtmq_node1]},
{cluster_name,<<"rabbit@rbtmq_master">>},
{partitions,[]},
{alarms,[{rabbit@rbtmq_master,[]},{rabbit@rbtmq_node1,[]}]}]
6. rabbitmq之单机多节点配置
在一台机器上部署多个 RabbitMQ 服务节点,需要确保每个节点都有独立的名称、数据存储位置、端口号(包括插件的端口号)等。我们在主机名称为 node1 的机器上创建一个由 rabbit1@node1、rabbit2@node1 和 rabbit3@node1 这三个节点组成 RabbitMQ 集群。
# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port, 15672}]" rabbitmq-server -detached
# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port, 15673}]" rabbitmq-server -detached
# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port, 15674}]" rabbitmq-server -detached
# 停止 rabbit2 的 Erlang 虚拟机
# rabbitmqctl -n rabbit2@rbtmq_node2 stop_app
# 重置 rabbit2
# rabbitmqctl -n rabbit2@rbtmq_node2 reset
# rabbit2 加入 rabbit1集群
# rabbitmqctl -n rabbit2@rbtmq_node2 join_cluster rabbit1@rbtmq_node2
# 启动 rabbit2 的 Erlang 虚拟机
# rabbitmqctl -n rabbit2@rbtmq_node2 start_app
# 查看集群状态
# rabbitmqctl -n rabbit1@rbtmq_node2 cluster_status
Cluster status of node rabbit1@rbtmq_node2 ...
[{nodes,[{disc,[rabbit1@rbtmq_node2,rabbit2@rbtmq_node2]}]},
{running_nodes,[rabbit1@rbtmq_node2]},
{cluster_name,<<"rabbit1@rbtmq_node2">>},
{partitions,[]},
{alarms,[{rabbit1@rbtmq_node2,[]}]}]