RabbitMQ集群部署
環境:
ip | z主機名 | c操作系統 |
10.0.0.1 | test1 | Centos7.2 |
10.0.0.2 | test2 | Centos7.2 |
10.0.0.3 | test3 | Centos7.2 |
一、安裝依賴環境。
yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget
二、防火墻、主機與ip間的映射。
1. 關閉或設置防火墻
systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state
2. 建立主機和ip間的映射關系
vi /etc/hosts
10.0.0.1 test1
10.0.0.2 test2
10.0.0.3 test3
三、安裝erlang,因為RabbitMQ基於erlang開發。
1. 安裝erlang
cd /data/tmp
tar -xvzf otp_src_18.3.tar.gz -C /usr/local/
cd /usr/local/otp_src_18.3
./configure --prefix=/usr/local/erlang
make &&make install
2. 配置環境變量
vim /etc/profile
#set erlang environment
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH
source /etc/profile
3. 測試,如果進入erlang的shell則表示成功
erl
四、安裝RabbitMQ(以下為test1部署,同理部署test2、test3)。
1. 下載解壓
cd /data/tmp
tar -xvzf rabbitmq-server-generic-unix-3.5.4.tar.gz -C /data/local/rabbitmq-server
cd /data/local
mv rabbitmq-server-3.5.4 rabbitmq-server
2. 配置環境變量
vim /etc/profile
# rabbitmq evironment configration
export PATH=$PATH:/data/local/rabbitmq-server/sbin
source /etc/profile
3. 啟動RabbitMQ server (如提示找不到命令,請檢查環境變量路徑是否正確)
rabbitmq-server -detached
rabbitmqctl status/stop/list_users ## 查看狀態、停止服務、列出角色命令
rabbitmqctl cluster_status 查看當前節點集群狀態
Cluster status of node rabbit@test1 ...
[{nodes,[{disc,[rabbit@test1]}]},
{running_nodes,[rabbit@test1]},
{cluster_name,<<"rabbit@test1">>},
{partitions,[]}]
4. 配置web頁面插件
rabbitmq-plugins enable rabbitmq_management
5. 訪問管理頁面測試 10.0.0.1:15672 (此時沒有登錄用戶)
6. 添加管理員賬號
rabbitmqctl add_user admin 123.abc ## 添加用戶,後面兩個參數是用戶名和密碼.
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" ## 添加權限
rabbitmqctl set_user_tags admin administrator ## 修改用戶角色
7. 登錄測試,刪除guest用戶,安裝完成。
四、配置MQ集群。
1. 設置節點間認證cookie(將test1上的拷貝到其他兩臺)
scp /root/.erlang.cookie 10.0.0.2:/root/
scp /root/.erlang.cookie 10.0.0.2:/root/
2. 加入到test1的集群(分別在test2、test3上操作)
rabbitmqctl stop_app # 先停掉節點,否則join_cluster會清除該節點所有資源和數據
rabbitmqctl join_cluster rabbit@test1 # 加入集群
rabbitmqctl start_app # 啟動節點
rabbitmqctl cluster_status # 查看集群狀態,test2、test3都執行完集群應該有三個節點
3. 測試(停掉其中一臺,看集群狀態的變化)
五、退出集群(當某臺機器不需要再存在於集群中時,test3為例)。
1. rabbitmqctl stop_app ## 停掉需要提出的節點
2. rabbitmqctl reset ## 踢出集群
3. rabbitmqctl start_app ## 啟動集群
4. rabbitmqctl cluster_status ## 查看該機器當前集群狀態
五、重要提示。
(1)、當整個集群down掉時,最後一個down機的節點必須第一個啟動到在線狀態,如果不是這樣,節點會等待30s等最後的磁盤節點恢復狀態,然後失敗。如果最後下線的節點不能上線,可以通過forget_cluster_node 指令來踢出集群。
(2)、如果所有的節點不受控制的同時宕機,比如掉電,會進入所有的節點都會認為其他節點比自己宕機的要晚,即自己先宕機,這種情況下可以使用force_boot指令來啟動一個節點。
六、其他
1. 關於用戶
新增用戶:rabbitmqctl add_user username password
刪除用戶:rabbitmqctl delete_user username
修改密碼:rabbitmqctl change_password Username Newpassword
查看當前用戶列表:rabbitmqctl list_users
2. 關於角色(五類系統角色)
a. 角色分類
administrator 超級管理員:可查看所有的信息,可以對用戶,策略進行操作。
monitoring 監控者:可登陸管理控制臺查看rabbitmq節點的相關信息(進程數、內存、磁盤使用情況等)。
policymaker 策略制定者:可登陸管理控制臺對policy進行管理。但無法查看節點的相關信息。
management 普通管理者:僅可登陸管理控制臺,無法看到節點信息,也無法對策略進行管理。
其他用戶:無法登陸管理控制臺,通常就是普通的生產者和消費者。
b. 相關命令
修改用戶角色:rabbitmqctl set_user_tags username administrator
也可以賦予多個角色:rabbitmqctl set_user_tags username administrator monitoring
3. 關於權限(用戶權限指的是用戶對exchange,queue的操作權限)
a. 權限分類
配置權限:配置權限會影響到exchange,queue的聲明和刪除。
讀寫權限:讀寫權限影響到從queue裏取消息,向exchange發送消息以及queue和exchange的綁定(bind)操作。
b. 相關命令
設置用戶權限:使用戶admin具有在vhost1這個/virtual host中所有資源的配置、寫、讀權限
rabbitmqctl set_permissions -p /vhost1 user_admin ‘.*‘ ‘.*‘ ‘.*‘
查看(指定hostpath)所有用戶的權限信息
rabbitmqctl list_permissions -p /vhost1
查看指定用戶的權限信息
rabbitmqctl list_user_permissions User
清除用戶的權限信息
rabbitmqctl clear_permissions -p /vhost1 User
RabbitMQ集群部署