目錄
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,[]}]}]