RabbitMQ安裝

全部rpm版本的列表
http://www.rabbitmq.com/releases/rabbitmq-server/
1、安裝:
rpm -ivh http://mirrors.sohu.com/fedora-epel/6Server/x86_64/epel-release-6-8.noarch.rpm
yum install erlang
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc html

yum localinstall rabbitmq-server-3.4.1-1.noarch.rpm -ynode

2、增長增長兩臺服務器hosts配置、
sudo sed '2a192.168.60.239 rabbitmq1\n192.168.60.240 rabbitmq2' /etc/hosts
注意:hosts的當中127.0.0.1對應的也是上面的主機名稱。還要修改/etc/sysconfig/network對應的主機名稱的,最後使用hostname也修改一下(若是不修改的話,加入到集羣會有問題)web

3、配置:
啓動服務
[root@rabbitmq2 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.vim

開啓web管理
[root@rabbitmq2 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management服務器

Applying plugin configuration to rabbit@rabbitmq2... started 6 plugins.cookie

4、普通集羣配置
一、Rabbitmq的集羣是依附於erlang的集羣來工做的,因此必須先構建起erlang的集羣景象。Erlang的集羣中各節點是經由過程一個magic cookie來實現的,這個cookie存放在 $home/.erlang.cookie 中(像個人root用戶安裝的就是放在個人root/.erlang.cookie中),文件是400的權限。因此必須包管各節點cookie對峙一致,否則節點之間就沒法通訊
對Queue來講,消息實體只存在於其中一個節點,A、B兩個節點僅有相同的元數據,即隊列結構。
當消息進入A節點的Queue中後,consumer從B節點拉取時,RabbitMQ會臨時在A、B間進行消息傳輸,把A中的消息實體取出並通過B發送給consumer。
因此consumer應儘可能鏈接每個節點,從中取消息。即對於同一個邏輯隊列,要在多個節點創建物理Queue。不然不管consumer連A或B,出口總在A,會產生瓶頸。
該模式存在一個問題就是當A節點故障後,B節點沒法取到A節點中還未消費的消息實體。
若是作了消息持久化,那麼得等A節點恢復,而後纔可被消費;若是沒有持久化的話,而後就沒有而後了……app

二、實踐證實
        1)只有rabbitmq1在root的家目錄下有.erlang.cookie [root@rabbitmq1 ~]# find / -name .erlang.cookie
        /root/.erlang.cookie
        /var/lib/rabbitmq/.erlang.cookie
        2)rabbitmq2的root的家目錄沒有相應的文件
            [root@rabbitmq2 ~]# find / -name .erlang.cookie
        /var/lib/rabbitmq/.erlang.cookie
三、erlang cookie 設置
    複製cookie的內容
            將主節點(rabbitmq1)服務上的/var/lib/rabbitmq/.erlang.cookie的內容複製從節點上,該文件是400的權限,保存時候要強制保存退出。也能夠修改一下該文件的權限爲600
            注意:將主服務器上的cookieid複製到從服務器上,須要把從服務器上的rabbitmq-server停掉才能夠複製,最後再啓動從服務器上的rabbitmq-server。
        [root@rabbitmq1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
        IUPHAUBLNVVIIHCHFMEJ
        [root@rabbitmq2 ~]# vim /var/lib/rabbitmq/.erlang.cookie
        IUPHAUBLNVVIIHCHFMEJ
四、主服務配置腳本
        [root@rabbitmq1 ~]# rabbitmqctl  stop_app
        Stopping node rabbit@rabbitmq1 ...

        [root@rabbitmq1 ~]# rabbitmqctl reset

        Resetting node rabbit@rabbitmq1 ...

        [root@rabbitmq1 ~]# rabbitmqctl start_app

        Starting node rabbit@rabbitmq1 ...

五、節點服務配置腳本
[root@rabbitmq2 ~]# rabbitmqctl stop_app
Stopping node rabbit@rabbitmq2 ...
[root@rabbitmq2 ~]# rabbitmqctl reset
Resetting node rabbit@rabbitmq2 ...
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1 注意:。此種做爲磁盤節點,若是做爲內存節點的話就須要 –-ram選項。如:rabbitmqctl join_cluster --ram rabbit@rabbitmq1
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
[root@rabbitmq2 ~]# rabbitmqctl start_app
Starting node rabbit@rabbitmq2 ...ide

六、 查看集羣的運行狀況
[root@rabbitmq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq1 ...br/>[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
{running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq1]},br/>{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]}]測試

[root@rabbitmq2 ~]# rabbitmqctl cluster_status
        Cluster status of node rabbit@rabbitmq2 ...
        [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
        {running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2]},
        {cluster_name,<<"rabbit@rabbitmq1">>},
         {partitions,[]}]

5、添加用戶、角色賦予權限
[root@rabbitmq1 ~]# rabbitmqctl add_user admin admin
Creating user "admin" ...spa

給用戶添加角色
rabbitmqctl set_user_tags admin administrator
[root@localhost ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator] ...

賦予權限
rabbitmqctl set_permissions -p / admin "." "." ".*"
Setting permissions for user "admin" in vhost "/" ...

6、web訪問接口
http://172.16.3.149:15672
注意:使用系統默認的用戶guest密碼也爲guest不能登陸。使用上面受權的admin進行登陸
7、mq增長隊列
1)名稱:複製線上的mq隊列
2)參數是:x-ha-policy=all
鏡像隊列
上述配置的RabbitMQ默認集羣模式,但並不包管隊列的高可用性,儘管互換機、綁定這些能夠複製到集羣裏的任何一個節點,然則隊列內容不會複製,當然該模式解決一項目組節點壓力,但隊列節點宕機直接致使該隊列沒法應用,只能守候重啓,因此要想在隊列節點宕機或故障也能正常應用,就要複製隊列內容到集羣裏的每一個節點,需要建立鏡像隊列。
鏡像隊列是基於普通的集羣模式的,因此你仍是得先配置普通集羣,而後才能設置鏡像隊列.
我是經過網頁的管理端來設置的鏡像隊列,也能夠經過命令,官方有例子.

http://www.rabbitmq.com/ha.html 打開以後翻到最下邊有兩個例子,能夠參考看看,這裏只說其中的網頁設置的
1 >1.點擊admin菜單-->右側的Policies選項-->左側最下下邊的Add / update a policy
2
3 >2.按照圖中的內容根據本身的需求填寫
4
5 >3.點擊Add policy添加策略

此時你就會來你的兩臺rabbitmq服務器的網頁管理端amind菜單下看見剛纔建立的隊列了.

下面咱們來添加一個queues隊列來看看效果,這裏只是測試結果,其它的先不填寫

注意紅框中的 x-ha-policy = all 這個,網上說沒有這個不會進行復制,可是我測試的時候好像能夠複製的,至少queues隊列是能夠的,先添上吧.
在這裏邊添加的時候你是能夠指定Node選項也就是把這個queues放在哪一個node節點上,不過作鏡像的時候就沒有必要了,呵呵
添加完成後你會看到這個效果

簡要說明一下
aa這個是剛纔添加的 Arguments 參數指定了 x-ha-policy = all
ab這個是沒有指定Arguments參數的,這個能夠看出差距的
ba和bb是爲了作演示效果對比的,這兩個是沒有符合同步策略的,因此Node後邊沒有+1的標識,你把鼠標放在+1的標識上就能看到他在另外一臺機器上也有一個.
Q:你說要是我重啓rabbitmq2的話會出現什麼效果….
A:aa和ab的+1標識消失,啓動後從新恢復.
Q:要是重啓rabbitmq1的話出現什麼效果….
A:在rabbitmq2上aa和ab的+1標識消失且Node選項中的rabbit@rabbitmq1變成rabbit@rabbitmq2,同時ba和bb消失,重啓後依舊消失,哈哈,由於這兩個沒作鏡像哦~

這裏的鏡像隊列的集羣介紹就到這裏,要想作到高可用,須要HA軟件的配合哦~ 這裏先不作贅述,下篇文章再說吧….

報錯處理
要是錯誤信息中提示有主節點衝突的話,能夠進入到一下目錄修改相應的文件
1 cd /usr/local/rabbitmq_server-3.1.3/var/lib/rabbitmq/mnesia
2 vim rabbit\@rabbitmq2/cluster_nodes.config
或者直接將這個目錄裏的文件全都刪除,這個是集羣的配置文件和持久化的數據存儲位置,能改則改實在是無可奈何再刪除

8、用戶管理
用戶管理包括增長用戶,刪除用戶,查看用戶列表,修改用戶密碼。
相應的命令
(1) 新增一個用戶
rabbitmqctl add_user Username Password
(2) 刪除一個用戶
rabbitmqctl delete_user Username
(3) 修改用戶的密碼
rabbitmqctl change_password Username Newpassword
(4) 查看當前用戶列表
rabbitmqctl list_users

9、用戶角色
按照我的理解,用戶角色可分爲五類,超級管理員, 監控者, 策略制定者, 普通管理者以及其餘。
(1) 超級管理員(administrator)
可登錄管理控制檯(啓用management plugin的狀況下),可查看全部的信息,而且能夠對用戶,策略(policy)進行操做。
(2) 監控者(monitoring)
可登錄管理控制檯(啓用management plugin的狀況下),同時能夠查看rabbitmq節點的相關信息(進程數,內存使用狀況,磁盤使用狀況等)

(3) 策略制定者(policymaker)
可登錄管理控制檯(啓用management plugin的狀況下), 同時能夠對policy進行管理。但沒法查看節點的相關信息(上圖紅框標識的部分)。

與administrator的對比,administrator能看到這些內容

(4) 普通管理者(management)
僅可登錄管理控制檯(啓用management plugin的狀況下),沒法看到節點信息,也沒法對策略進行管理。
(5) 其餘
沒法登錄管理控制檯,一般就是普通的生產者和消費者。
瞭解了這些後,就能夠根據須要給不一樣的用戶設置不一樣的角色,以便按需管理。
設置用戶角色的命令爲:
rabbitmqctl set_user_tags User Tag
User爲用戶名, Tag爲角色名(對應於上面的administrator,monitoring,policymaker,management,或其餘自定義名稱)。
也能夠給同一用戶設置多個角色,例如
rabbitmqctl set_user_tags hncscwc monitoring policymaker

10、用戶權限
用戶權限指的是用戶對exchange,queue的操做權限,包括配置權限,讀寫權限。配置權限會影響到exchange,queue的聲明和刪除。讀寫權限影響到從queue裏取消息,向exchange發送消息以及queue和exchange的綁定(bind)操做。
例如: 將queue綁定到某exchange上,須要具備queue的可寫權限,以及exchange的可讀權限;向exchange發送消息須要具備exchange的可寫權限;從queue裏取數據須要具備queue的可讀權限。詳細請參考官方文檔中"How permissions work"部分。
相關命令爲:
(1) 設置用戶權限
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
(2) 查看(指定hostpath)全部用戶的權限信息
rabbitmqctl list_permissions [-p VHostPath]
(3) 查看指定用戶的權限信息
rabbitmqctl list_user_permissions User
(4) 清除用戶的權限信息
rabbitmqctl clear_permissions [-p VHostPath] User

11、日誌查看查看路徑:tail -f /var/log/rabbitmq/rabbit\@pre-mq.log

相關文章
相關標籤/搜索