<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 41  文章 - 7  trackbacks - 0
    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    概述

    RabbitMQ broker是一個或多個Erlang節點的邏輯分組,多個運行的RabbitMQ應用程序可共享用戶,虛擬主機,隊列,交換機,綁定以及運行時參數。有時我們將多個節點的集合稱為集群。

    什么是復制?

    RabbitMQ broker操作所需的所有數據/狀態都可以在多個節點間復制. 例外是消息隊列,默認情況下它駐留在一個節點, 盡管它們對所有節點來說,是可見的,可達的.要在集群中跨節點復制隊列,可參考high availability 文檔(注意,你仍然先需要一個工作集群).

    主機名解析需求

    RabbitMQ節點彼此之間使用域名,要么是簡短的,要么是全限定的(FQDNs). 因此,集群中所有成員的主機名都必須是可解析的,也可用于機器上的命令行工具,如rabbitmqctl.

    主機名解析可使用任何一種標準的操作系統提供方法:

    • DNS 記錄
    • 本地主機文件(e.g. /etc/hosts)
    在更加嚴格的環境中,DNS記錄或主機文件修改是受限的,不可能的或不受歡迎的, Erlang VM可通過使用替代主機名解析方法來配置, 如一個替代的DNS服務器,一個本地文件,一個非標準的主機文件位置或一個混合方法. 這些方法可以與標準操作主機名解析方法一起協同工作。

    要使用FQDNs, 參考RABBITMQ_USE_LONGNAME in the Configuration guide.

    集群構成

    集群可以通過多種方式來構建:

    一個集群的構成可以動態修改. 所有RabbitMQ brokers開始都是以單個節點來運行的. 這些節點可以加入到集群中, 隨后也可以脫離集群再次成為單一節點。

    故障處理

    RabbitMQ brokers 可以容忍個別節點故障. 節點可以隨意地啟動和關閉,只要在已知關閉的時間內能夠聯系到集群節點.

    RabbitMQ 集群有多種模式來處理網絡分化, 主要是一致性方向. 集群是在LAN中使用的,不推薦在WAN中運行集群. Shovel 或 Federation 插件對于跨WAN連接brokers ,有更好的解決方案. 注意 Shovel 和 Federation 不等同于集群.

    磁盤和內存節點

    節點可以是磁盤節點,也可以是內存節點。多數情況下,你希望所有的節點都是磁盤節點,但RAM節點是一種特殊情況,它可以提高集群中隊列和,交換機,綁定的性能. 當有疑問時,最好只使用磁盤節點。

    集群文字記錄(Transcript)

    下面是通過三臺機器-rabbit1rabbit2rabbit3來設置和操作RabbitMQ集群的文字記錄.

    我們假設用戶已經登錄到這三臺機器上,并且都已經在機器上安裝了RabbitMQ,以及rabbitmq-server 和rabbitmqctl 腳本都已經在用戶的PATH環境變量中.

    This transcript can be modified to run on a single host, as explained more details below.

    節點(以及CLI工具)之間如何來認證: Erlang Cookie

    RabbitMQ 節點和CLI 工具(如rabbitmqctl) 使用cookie來確定每個節點之間是否可以通信. 兩個節點之間要能通信,它們必須要有相同的共享密鑰Erlang cookie. cookie只是具有字母數字特征的字符串。只要你喜歡,它可長可短. 每個集群節點必須有相同的cookie.

    當RabbitMQ 服務器啟動時,Erlang VM 會自動地創建一個隨機的cookie文件. 最簡單的處理方式是允許一個節點來創建文件,然后再將這個文件拷貝到集群的其它節點中。

    在 Unix 系統中, cookie的通常位于/var/lib/rabbitmq/.erlang.cookie 或$HOME/.erlang.cookie.

    在Windows中, 其位置在C:\Users\Current User\.erlang.cookie(%HOMEDRIVE% + %HOMEPATH%\.erlang.cookie) 或C:\Documents and Settings\Current User\.erlang.cookie, 對于RabbitMQ Windows service其位置在C:\Windows\.erlang.cookie。如果使用了Windows service ,  cookie可被放于這兩個位置中.

    作為替代方案,你可以在 rabbitmq-server 和 rabbitmqctl 腳本中調用erl時,插入"-setcookie cookie"選項.

    當cookie未配置時 (例如,不相同), RabbitMQ 會記錄這樣的錯誤"Connection attempt from disallowed node" and "Could not auto-cluster".

    啟動獨立節點

    集群可通過重新配置,而將現有RabbitMQ 節點加入到集群配置中. 因此第一步是以正常的方式在所有節點上啟動RabbitMQ:

    rabbit1$ rabbitmq-server -detached 
    rabbit2$ rabbitmq-server -detached
    rabbit3$ rabbitmq-server -detached

    這會創建三個獨立的RabbitMQ brokers, 每個節點一個,可通過cluster_status命令來驗證:

    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1]}]},{running_nodes,[rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit2]}]},{running_nodes,[rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit3]}]},{running_nodes,[rabbit@rabbit3]}] ...done.

    rabbitmq-server shell腳本來啟動RabbitMQ broker的節點名稱是rabbit@shorthostname,在這里,短節點名稱是小寫的(如上面的rabbit@rabbit1). 如果在windows上,你使用rabbitmq-server.bat批處理文件來啟動,短節點名稱是大寫的(如:rabbit@RABBIT1). 當你輸入節點名稱時,不論是大寫還是小寫的,這些字符串都必須精確匹配。

    創建集群

    為了把這三個節點構建到一個集群中,我們可以告訴其中的兩個節點, 假設為rabbit@rabbit2 和 rabbit@rabbit3, 將加入到第三個節點的集群中,這第三個節點假設為rabbit@rabbit1.

    首先我們將rabbit@rabbit2加入到rabbit@rabbit1的集群中. 要做到這一點,我們必須在rabbit@rabbit2 上停止RabbitMQ應用程序,并將其加入到rabbit@rabbit1 集群中, 然后再重啟RabbitMQ 應用程序. 

    注意:加入集群會隱式地重置節點, 因此這會刪除此節點上先前存在的所有資源和數據.(如何備份數據)

    rabbit2$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit2 ...done.
    rabbit2$ rabbitmqctl join_cluster rabbit@rabbit1
    Clustering node rabbit@rabbit2 with [rabbit@rabbit1] ...done.
    rabbit2$ rabbitmqctl start_app
    Starting node rabbit@rabbit2 ...done.

    在每個節點上通過運行cluster_status 命令,我們可以看到兩個節點已經加入了集群:

    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}] ...done.

    現在我們將rabbit@rabbit3節點加入到同一個集群中. 操作步驟同上面的一致,除了這次我們選擇rabbit2來加入集群,但這并不重要:

    rabbit3$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit3 ...done.
    rabbit3$ rabbitmqctl join_cluster rabbit@rabbit2
    Clustering node rabbit@rabbit3 with rabbit@rabbit2 ...done.
    rabbit3$ rabbitmqctl start_app
    Starting node rabbit@rabbit3 ...done.

    在任何一個節點上通過運行cluster_status命令,我們可以看到三個節點已經加入了集群:

    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit3,rabbit@rabbit1,rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}] ...done.

    通過上面的步驟,當集群運行的時候,我們可以在任何時候將新的節點加入到集群中.

    重啟集群節點

    注意,加入到集群中的節點可在任何時候停止, 對于崩潰來說也沒有問題. 在這兩種情況下,集群剩余的節點將不受影響地繼續操作,當它們重啟的時候,這些崩潰的節點會再次自動追趕上其它的集群節點。

    我們關閉了節點rabbit@rabbit1和rabbit@rabbit3,并在每步觀察集群的狀態:

    rabbit1$ rabbitmqctl stop 
    Stopping and halting node rabbit@rabbit1 ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit3,rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit3]}] ...done.
    rabbit3$ rabbitmqctl stop
    Stopping and halting node rabbit@rabbit3 ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit2]}] ...done.

    譯者注:關閉了rabbit1節點后,運行的節點已經沒有rabbit1節點了

    現在我們再次啟動節點,并檢查集群狀態:

    rabbit1$ rabbitmq-server -detached 
    rabbit1$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmq-server -detached
    rabbit1$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1,rabbit@rabbit3]}] ...done.

    這里有一些重要的警告:

    • 當整個集群崩潰的時候, 最后一個崩潰的節點必須第一個上線.如果不是這樣,節點將會等待最后一個磁盤節點30秒以確認其重新上線,否則就會失敗. 如果最后一個下線的節點,不能再重新上線,那么它可能會使用forget_cluster_node命令來從集群中刪除 - 查閱 rabbitmqctl頁面來了解更多信息.
    • 如果所有集群節點都在同一個時間內停止且不受控制(如斷電)。在這種情況下,你可以在某個節點上使用force_boot命令使其再次成為可啟動的-查閱 rabbitmqctl頁面來了解更多信息.

    脫離集群

    當節點不再是集群的一部分時,可以明確地將其從集群中刪除. 首先我們將節點rabbit@rabbit3從集群中刪除, 以使其回歸獨立操作.要做到這一點,需要在rabbit@rabbit3節點上停止RabbitMQ 應用程序,重設節點,并重啟RabbitMQ應用程序.

    rabbit3$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit3 ...done.
    rabbit3$ rabbitmqctl reset
    Resetting node rabbit@rabbit3 ...done.
    rabbit3$ rabbitmqctl start_app
    Starting node rabbit@rabbit3 ...done.

    在節點上運行cluster_status 命令來確認rabbit@rabbit3節點現在已不再是集群的一部分,并且會獨自操作:

    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit3]}]},{running_nodes,[rabbit@rabbit3]}] ...done.

    我們也可以遠程地刪除節點,這是相當有用的,舉例來說,當處理無反應的節點時.舉例來說,我們可以從 rabbit@rabbit2中刪除rabbit@rabbi1.

    rabbit1$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit1 ...done.
    rabbit2$ rabbitmqctl forget_cluster_node rabbit@rabbit1
    Removing node rabbit@rabbit1 from cluster ... ...done.

    注意,rabbit1仍然認為它與rabbit2處在一個集群中,但嘗試啟動時會出現一個錯誤.這時,我們需要對其進行重置以使其能再次啟動.

    rabbit1$ rabbitmqctl start_app 
    Starting node rabbit@rabbit1 ... Error: inconsistent_cluster: Node rabbit@rabbit1 thinks it's clustered with node rabbit@rabbit2, but rabbit@rabbit2 disagrees
    rabbit1$ rabbitmqctl reset
    Resetting node rabbit@rabbit1 ...done.
    rabbit1$ rabbitmqctl start_app Starting node rabbit@mcnulty ... ...done.

    現在, cluster_status 命令會顯示三個節點都是獨立節點,并且操作是獨立的:

    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1]}]},{running_nodes,[rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit2]}]},{running_nodes,[rabbit@rabbit2]}] ...done.
    rabbit3$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit3 ... [{nodes,[{disc,[rabbit@rabbit3]}]},{running_nodes,[rabbit@rabbit3]}] ...done.

    注意:rabbit@rabbit2節點仍然殘留有集群的狀態(譯者注:怎么看出來的呢?), 但是 rabbit@rabbit1 和rabbit@rabbit3 節點是新鮮的RabbitMQ brokers.如果我們想重新初始化rabbit@rabbit2節點,我們可以按其它節點的步驟來操作:

    rabbit2$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit2 ...done.
    rabbit2$ rabbitmqctl reset
    Resetting node rabbit@rabbit2 ...done.
    rabbit2$ rabbitmqctl start_app
    Starting node rabbit@rabbit2 ...done.

    升級集群

    當從主版本或小版本進行升級時 (如:從3.0.x 到3.1.x,或從2.x.x 到3.x.x),或者是升級Erlang時, 整個集群在升級時必須記下來(taken down) (因為集群不會像這樣來運行多個混合的版本). 當從補丁版本升級到另一個時(如:從3.0.x 到3.0.y)時,這種情況是不會出現的;這些版本在集群中是可以混合使用的(例外是3.0.0不能與 3.0.x 系列后的版本混合).

    在主版本與小版本之間升級時,RabbitMQ有必要的話會自動更新其持久化數據. 在集群中,此任務是由第一個磁盤節點來啟動的("upgrader"節點). 因此在升級RabbitMQ集群時,你不需要嘗試先啟動RAM節點,任何啟動的RAM節點都會發生錯誤,并且不能啟動.

    雖然不是嚴格必須的,但使用磁盤節點來作為升級節點通常是好的主意,最后停止那個節點。

    自動升級只適用于2.1.1及其之后的版本,如果你有更早的集群 ,你必須重新構建升級.

    單臺機器上的集群

    在某些情況下,在一臺機器上運行RabbitMQ節點的集群是有用的(試驗性質). 

    要在一臺機器上運行多個RabbitMQ節點,必須確保節點含有不同的節點名稱,數據存儲路徑,日志文件位置,綁定到不同的端口,并包含那些插件使用的端口等等 .參考配置指南中的RABBITMQ_NODENAMERABBITMQ_NODE_PORT, 和 RABBITMQ_DIST_PORT文檔 ,以及 File and Directory Locations guide指南中的 RABBITMQ_MNESIA_DIRRABBITMQ_CONFIG_FILE, and RABBITMQ_LOG_BASE。

    你可以在同一個主機上通過重復調用rabbitmq-server(rabbitmq-server.bat on Windows)來手動地啟動多個節點 . 例如:

    $ RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached 
    $ RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=hare rabbitmq-server -detached
    $ rabbitmqctl -n hare stop_app
    $ rabbitmqctl -n hare join_cluster rabbit@`hostname -s`
    $ rabbitmqctl -n hare start_app

    這會設置兩個節點的集群,這兩個節點都是磁盤節點. 注意,如果你想打開非AMQP的其它端口,你需要通過命令行進行配置

    $ RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit rabbitmq-server -detached 
    $ RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=hare rabbitmq-server -detached

    主機名稱變更

    RabbitMQ節點使用主機名來相互通信.因此,所有節點名稱都集群中的節點應該都能被解析.對于像 rabbitmqctl這樣的工具來說,也是如此.

    除此之外,默認情況下,RabbitMQ使用當前系統的主機名稱來命名數據庫目錄.如果主機名變了,將會創建一個空的數據庫.為避免數據丟失,應該總是設置一個固定的,可解析的主機名稱。無論何時,只要主機名變化了,你就必須要重啟RabbitMQ:

    $ /etc/init.d/rabbitmq-server restart

    類似的效果可通過使用 rabbit@localhost作為broker節點名稱來達到。這個解決方案的影響是集群將不會工作,因為選中的主機名不能被遠程主機所解析。當從遠程主機調用時,類似地rabbitmqctl命令也會失敗. 免遭此缺點的復雜方案是使用DNS,如:如果運行EC2,則使用 Amazon Route 53 。如果你想使用節點名稱的全限定主機名(RabbitMQ 默認使用短名稱),那么可使用DNS解析, 可設置環境變量 RABBITMQ_USE_LONGNAME=true.


    防火墻節點

    當在一個數據中心或可靠網絡時,帶防火墻的集群節點是存在的,但這些節點通常被防火墻隔離。再一次聲明,當各節點之間的網絡連接不穩定時,集群不建議在WAN在使用

    在多數配置中,你需要打開4369和25672端口以使用集群正常工作.

    Erlang 使用Port Mapper Daemon (epmd) 來解析集群中的節點名稱. 默認epmd端口是4369,但它可以通過ERL_EPMD_PORT環境變量進行修改.所有的節點都必須使用同一個端口。詳細信息可參考Erlang epmd manpage.

    一旦分布式Erlang節點通過empd解析后,其它節點將會嘗試直接通信。默認地通信端口比RABBITMQ_NODE_PORT (即,默認是25672)高了20000. 這可以通過RABBITMQ_DIST_PORT 環境變量修改

    跨集群Erlang版本

    集群中所有節點必須運行相同版本的Erlang.

    從客戶端連接集群

    客戶端可以正常連接到集群中的任意節點,如果那個節點發生故障了 ,只要有剩余集群節點幸存,當客戶端發現在關閉的連接時,它就能夠重新連接到剩余幸存的集群節點上。一般來說,將節點主機名稱或IP地址放到客戶端程序是極其不明智的,這會導致缺乏靈活性,并需要客戶端程序重新編輯,編譯,重新配置以適應集群配置變化或者集群節點變化。相反,我們建議采用更抽象的方法: 如有簡短TTL配置的動態DNS服務或普通的TCP負載均衡器. 一般來說,這方面的管理集群內連接節點是超出了RabbitMQ本身的范圍,我們建議使用其他技術專門設計來解決這些問題。

    內存節點集群

    內存節點只在內存中保存其元數據。它不會像磁盤節點將元數據寫入到磁盤中,但它們擁有更好的性能。 然而,也應該注意到,由于持久化隊列數據總是存儲在磁盤上的,其性能提升只會影響資源管理(如: 添加/刪除隊列,交換機,或虛擬主機), 但不會影響發布或消費的速度.

    內存節點是一個高級使用例子;當設置你的第一個集群時,你應該不使用它們。你應該用足夠的磁盤節點來處理冗余需求,然后如果有必要,再用內存節點進行擴展.

    集群中只含有內存節點是相當脆弱的,如果集群停止了,你將不能再次啟動,并且會導致數據丟失。RabbitMQ在許多情況下,會阻止創建只包含內存節點的集群,但不能完全阻止。

    (譯者注:在集群構建中,最好有兩個或以上的磁盤節點,然后再考慮使用內存節點進行擴展)

    創建內存節點

    當節點加入集群時,我們可將其聲明為內存節點. 我們可以通過使用像先前rabbitmqctl join_cluster命令再加--ram標志來達到目的:

    rabbit2$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit2 ...done.
    rabbit2$ rabbitmqctl join_cluster --ram rabbit@rabbit1
    Clustering node rabbit@rabbit2 with [rabbit@rabbit1] ...done.
    rabbit2$ rabbitmqctl start_app Starting node rabbit@rabbit2 ...done.


    rabbit1$ rabbitmqctl cluster_status 
    Cluster status of node rabbit@rabbit1 ... [{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]}] ...done.
    rabbit2$ rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit2 ... [{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@rabbit2]}]}, {running_nodes,[rabbit@rabbit1,rabbit@rabbit2]}] ...done.

    改變節點類型

    我們可以將節點的類型從磁盤修改為內存,反之亦然. 假設我們想反轉rabbit@rabbit2 和 rabbit@rabbit1的節點類型,即先將內存節點轉換為磁盤節點,隨后再將其從磁盤節點轉換為內存節點.要做到這點,我們可以使用change_cluster_node_type命令. 首先節點必須先停止.

    rabbit2$ rabbitmqctl stop_app 
    Stopping node rabbit@rabbit2 ...done. rabbit2$
    rabbitmqctl change_cluster_node_type disc
    Turning rabbit@rabbit2 into a disc node ... ...done. Starting node rabbit@rabbit2 ...done.
    rabbit1$
    rabbitmqctl stop_app
    Stopping node rabbit@rabbit1 ...done.
    rabbit1$
    rabbitmqctl change_cluster_node_type ram
    Turning rabbit@rabbit1 into a ram node ...
    rabbit1$
    rabbitmqctl start_app
    Starting node rabbit@rabbit1 ...done.
    posted on 2016-06-05 19:53 胡小軍 閱讀(3949) 評論(0)  編輯  收藏 所屬分類: RabbitMQ
    主站蜘蛛池模板: 国产精品极品美女自在线观看免费 | 国产成人无码区免费A∨视频网站| 666精品国产精品亚洲| 一级毛片免费观看不卡的| 久久亚洲AV无码精品色午夜麻| 久久er国产精品免费观看8| 日韩亚洲变态另类中文| 美女被cao网站免费看在线看| 亚洲AV本道一区二区三区四区| 久久国产精品免费一区| 亚洲av永久无码制服河南实里| 久久成人免费电影| 亚洲精品国产专区91在线| 91成年人免费视频| 亚洲成aⅴ人片久青草影院按摩| 午夜高清免费在线观看| 国产精品亚洲色图| 中文字幕亚洲第一| 免费A级毛片无码视频| 亚洲综合色7777情网站777| 成在线人永久免费视频播放| 男女啪啪免费体验区| 亚洲成A∨人片在线观看不卡| 亚洲免费在线播放| 中文字幕亚洲精品无码| 亚洲AV无码乱码在线观看牲色| 精品一区二区三区高清免费观看| 久久久久久久久亚洲| 久久久久国色AV免费观看性色| 国产午夜亚洲精品不卡| 久久噜噜噜久久亚洲va久| 久久久久久99av无码免费网站 | 女人裸身j部免费视频无遮挡| 久久久久亚洲?V成人无码| 最近新韩国日本免费观看 | 亚洲Av无码乱码在线观看性色| 中文字幕版免费电影网站| 亚洲欧洲自拍拍偷综合| 免费人成网站7777视频| 三年片在线观看免费观看大全动漫| 中文字幕无码亚洲欧洲日韩|