RabbitMQ 安裝配置與管理
安裝
安裝目錄爲/usr/local/
1. 安裝erlang虛擬機
Rabbitmq基於erlang語言開發,所有需要安裝erlang虛擬機
下載otp_src_R15B01.tar.gz
tar zxvf otp_src_R15B01.tar.gz
cd otp_src_R15B01
./configure && make install
2 xmlto (rabbitmq 編譯安裝時需要使用)
wget https://fedorahosted.org/releases/x/m/xmlto/xmlto-0.0.23.tar.gz
tar -zxf xmlto-0.0.23.tar.gz
cd xmlto-0.0.23
./configure
make
make install //如發現含有man報錯 是需要去網站下載man文檔 此步失敗可略過
3. 安裝Python
如果Python版本低,編譯simplejson時會報錯。請安裝Python-2.7.3.tar.bz2
tar -jxvf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure &&make && make install
4. 安裝simplejson
如果 機器上python 版本爲2.6以下版本 會提示You don't appear to have simplejson.py installed 安裝。
tar -zxvf simplejson-2.6.1.tar.gz
cd simplejson-2.6.1
python setup.py install // 最好用root權限安裝
5. 安裝rabbitmq server
下載rabbitmq-server-generic-unix-2.8.6.tar.gz
tar xvzf rabbitmq-server-generic-unix-2.8.6.tar.gz
cd rabbitmq_server-2.8.6/sbin/ //這是編譯過的包 可以直接使用
開啓監控 下面3條命令爲可選 需要使用可開啓 查看 喜歡研究的可以查看下 不用的話就用關閉命令關閉插件
./rabbitmq-plugins enable rabbitmq_management 開啓監控插件
./rabbitmq-plugins list 查看插件列表
./rabbitmq-plugins disable 關閉插件
rabbitmq-server -detached //啓動rabbitmq 至此rabbitmq算是起來了
配置
一般情況下,RabbitMQ的默認配置就足夠了。如果希望特殊設置的話,有兩個途徑:
一個是環境變量的配置文件 rabbitmq-env.conf ;
一個是配置信息的配置文件 rabbitmq.config;
注意,這兩個文件默認是沒有的,如果需要必須自己創建。
rabbitmq-env.conf這個文件的位置是確定和不能改變的,位於:/etc/rabbitmq目錄下(這個目錄需要自己創建)。
文件的內容包括了RabbitMQ的一些環境變量,配置下面:
RABBITMQ_MNESIA_BASE=/rabbitmq/data //需要使用的MNESIA數據庫的路徑
RABBITMQ_LOG_BASE=/rabbitmq/log //log的路徑
RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins //插件的路徑
具體的列表見:http://www.rabbitmq.com/configure.html#define-environment-variables
rabbitmq.config
這是一個標準的erlang配置文件。它必須符合erlang配置文件的標準。
它既有默認的目錄,也可以在rabbitmq-env.conf文件中配置。
集羣配置
(1)配置erlang
Rabbitmq的集羣是依賴於erlang的集羣來工作的,所以必須先構建起erlang的集羣環境。Erlang的集羣中各節 點是通過一個magic cookie來實現的,這個cookie存放在$HOME/.Erlang.cookie 中,文件是400的權限。所以必須保證各節點cookie保持一致,否則節點之間就無法通信。
將其中一臺節點上的.erlang.cookie值複製下來保存到其他節點上。或者使用scp的方法也可,但是要注意文件的權限和屬主屬組。
$ cat .erlang.cookie
IYZNFNJIUWABJUELIUFE
將值保存到其他節點上:
先更改文件權限,給予其可寫權限:
$chmod 700 .erlang.cookie
$ echo -n " IYZNFNJIUWABJUELIUFE" >$HOME/.erlang.cookie
$chmod 400 .erlang.cookie
(2) 配置各節點下的hosts文件,確保節點之間主機名稱可以相互解析。
192.168.1.** nodename
192.168.1.** nodename
192.168.1.** nodename
192.168.1.** nodename
(1)手動配置rabbitmq集羣
a)首先在每個節點上啓動RabbitMq
host1#rabbitmq-server -detached
host2#rabbitmq-server -detached
host3#rabbitmq-server -detached
此時每個節點自成集羣,每個集羣只有本節點
可以通過export RABBITMQ_NAME=xxx 指定節點名稱,若不指定默認爲rabbit
完整的節點名爲xxx@hostname
b)加入集羣
讓host2 和host3上的rabbitmq節點加入到 host1的rabbitmq集羣
使用rabbitmqctl命令對rabbitmq進行操作
加入集羣前必須停止當前app,加入後在重啓app,過程如下:
host2#rabbitmqctl stop_app
host2#rabbitmqctl cluster rabbit@host1
host2#rabbitmqctl start_app
host3#rabbitmqctl stop_app
host3#rabbitmqctl cluster rabbit@host1
host3#rabbitmqctl start_app
關於節點類型(ram |disk)
ram節點的狀態保存在內存中,disk節點保存在磁盤中
被加入的節點爲disk,如本例中rabbit@host1爲disk節點,rabbit@host2,rabbit@host3爲ram節點
可以通過rabbitmqctl cluster命令改變加入的集羣以及節點類型該命令後可以加多個節點名稱,指定的節點就會變成disk節點
如可以將本例中所有節點都改成disk節點
host2#rabbitmqctl stop_app
host2#rabbitmqctl reset
host2#rabbitmqctl cluster rabbit@host1 rabbit@host2
host2#rabbitmqctl start_app
host3#rabbitmqctl stop_app
host3#rabbitmqctl reset
host3#rabbitmqctl cluster rabbit@host1 rabbit@host3
host3#rabbitmqctl start_app
(2)自動配置rabbitmq集羣:
rabbitmq的默認配置腳本爲
/etc/rabbitmq/rabbitmq.conf
在其中添加
[
...
{rabbit, [
...
{cluster_nodes, ['rabbit@host1', 'rabbit@host2', 'rabbit@host3']},
...
]},
...
].
分別啓動每個rabbitmq節點
Rabbitry -detached
rabbitmq就自動組成集羣了
注意事項:
1)每個節點的erlang cookie須相同,可以在啓動服務器加–setcookie參數設置相同的參數,也可以在home目錄下設置相同的.erlang.cookie文件。
2)節點間應該能相互解析,可以通過修改/etc/hosts文件實現
監控
RabbitMQ提供了一個web的監控頁面系統,這個系統是以Plugin的方式進行調用的。
首先,確定rabbitmq-env.conf中配置好的plugins目錄的位置
啓動管理插件命令 :
rabbitmq-plugins enable rabbitmq_management
重新啓動RabbitMQ,輸入http://server-name:55672/mgmt/ 就能夠進入到監控頁面。默認的用戶名和密碼是: guest 和 guest。
管理
Rabbitmq服務器的主要通過rabbitmqctl和rabbimq-plugins兩個工具來管理,以下是一些常用功能。
1. 服務器啓動與關閉
啓動: rabbitmq-server –detached
關閉:rabbitmqctl stop
若單機有多個實例,則在rabbitmqctlh後加–n 指定名稱
2. 插件管理
開啓某個插件:rabbitmq-plugins enable xxx
關閉某個插件:rabbitmq-plugins disablexxx
注意:重啓服務器後生效。
3. virtual_host管理
新建virtual_host: rabbitmqctl add_vhost xxx
撤銷virtual_host:rabbitmqctl delete_vhost xxx
4. 用戶管理
新建用戶:rabbitmqctl add_user xxx pwd
刪除用戶: rabbitmqctl delete_user xxx
改密碼: rabbimqctl change_password {username} {newpassword}
設置用戶角色:rabbitmqctl set_user_tags {username} {tag ...}
Tag可以爲 administrator, monitoring, management
Tag |
Capabilities |
(None) |
No access to the management plugin |
management |
Anything the user could do via AMQP plus: List virtual hosts to which they can log in via AMQP View all queues, exchanges and bindings in "their" virtual hosts View and close their own channels and connections View "global" statistics covering all their virtual hosts, including activity by other users within them |
monitoring |
Everything "management" can plus: List all virtual hosts, including ones they could not log in to via AMQP View other users's connections and channels View node-level data such as memory use and clustering View truly global statistics for all virtual hosts |
administrator |
Everything "monitoring" can plus: Create and delete virtual hosts View, create and delete users View, create and delete permissions Close other users's connections |
5. 權限管理
權限設置:set_permissions [-p vhostpath] {user} {conf} {write} {read}
Vhostpath
Vhost路徑
user
用戶名
Conf
一個正則表達式match哪些配置資源能夠被該用戶訪問。
Write
一個正則表達式match哪些配置資源能夠被該用戶讀。
Read
一個正則表達式match哪些配置資源能夠被該用戶訪問。
6. 獲取服務器狀態信息
服務器狀態:rabbitmqctl status
隊列信息:rabbitmqctl list_queues [-p vhostpath] [queueinfoitem ...]
Queueinfoitem可以爲:name,durable,auto_delete,arguments,messages_ready,
messages_unacknowledged,messages,consumers,memory
Exchange信息:rabbitmqctllist_exchanges [-p vhostpath] [exchangeinfoitem ...]
Exchangeinfoitem有:name,type,durable,auto_delete,internal,arguments.
Binding信息:rabbitmqctllist_bindings [-p vhostpath] [bindinginfoitem ...]
Bindinginfoitem有:source_name,source_kind,destination_name,destination_kind,routing_key,arguments
Connection信息:rabbitmqctl list_connections [connectioninfoitem ...]
Connectioninfoitem有:recv_oct,recv_cnt,send_oct,send_cnt,send_pend等。
Channel信息:rabbitmqctl list_channels[channelinfoitem ...]
Channelinfoitem有consumer_count,messages_unacknowledged,messages_uncommitted
,acks_uncommitted,messages_unconfirmed,prefetch_count,client_flow_blocked