RabbitMQ Cluster

RabbitMQ Clusterhtml

 

1安裝準備node

單節點MQ的安裝參考其餘文檔,此處僅以兩個節點爲例,多個節點也如法炮製。cookie

² 已經安裝好rabbitmq的兩個單節點rabbitmq-broker2rabbitmq-broker3app

² 保證兩臺機器上的rabbitmq爲後臺啓動狀態。ide

² 安裝erlangrabbitmq版本一致。不然,版本不一致會出現問題。spa

2 .erlang.cookie拷貝orm

.erlang.cookie該文件通常存放在安裝用戶目錄下,如:/home/sca_bj/.erlang.cookie。從rabbitmq-broker2機器上將其拷貝到rabbitmq-broker3目錄下。server

3配置前查看狀態htm

rabbitmqctl cluster_statusrabbitmq

狀態以下:

Cluster status of node 'sca@rabbitmq-broker3' ...

[{nodes,[{disc,['sca@rabbitmq-broker3']}]},

{running_nodes,['sca@rabbitmq-broker3']},

{cluster_name,<<"sca@ocdata09">>},

{partitions,[]}]

...done.

4 join cluster

rabbitmq-broker3加入到rabbitmq-broker2中,在rabbitmq-broker3上操做

² rabbitmqctl stop_app

² rabbitmqctl join_cluster root@rabbitmq-broker2

² rabbitmqctl start_app

5查看加入後的狀態

rabbitmqctl cluster_status

² 配置cluster後狀態以下:

Cluster status of node 'sca@rabbitmq-broker3' ...

[{nodes,[{disc,['root@rabbitmq-broker2','sca@rabbitmq-broker3']}]},

{running_nodes,['root@rabbitmq-broker2','sca@rabbitmq-broker3']},

{cluster_name,<<"root@ocdata07">>},

{partitions,[]}]

...done.

² 中止rabbitmq-broker2上的MQ

rabbitmqctl stop

² rabbitmq-broker3查看狀態

rabbitmqctl cluster_status

Cluster status of node 'sca@rabbitmq-broker3' ...

[{nodes,[{disc,['root@rabbitmq-broker2','sca@rabbitmq-broker3']}]},

{running_nodes,['sca@rabbitmq-broker3']},

{cluster_name,<<"root@ocdata07">>},

{partitions,[]}]

² 再將rabbitmq-broker2從新啓動

rabbitmq-server -detached

² 也能夠經過界面管理端來查看其狀態

 

6 RAM集羣節點

咱們默認配置的disk 集羣節點,大的集羣也能夠RAM集羣節點。

rabbitmq-broker3操做

² rabbitmqctl stop_app 

² rabbitmqctl join_cluster --ram root@rabbitmq-broker2

² rabbitmqctl start_app

 

7去除節點的方法

移除rabbitmq-broker3,在rabbitmq-broker3上操做

² rabbitmqctl stop_app

² rabbitmqctl reset

² rabbitmqctl start_app

 

或者在rabbitmq-broker2上操做

² rabbitmqctl stop_app

² rabbitmqctl forget_cluster_node  sca@rabbitmq-broker3

² 此時rabbitmq-broker2還會認爲和rabbitmq-broker3成集羣狀態,這時

rabbitmqctl start_app會報錯

Removing node 'sca@rabbitmq-broker3' from cluster ...

Error: {offline_node_no_offline_flag,"You are trying to remove a node from an offline node. That is dangerous, but can be done with the --offline flag. Please consult the manual for rabbitmqctl for more information."}

² 繼續執行命令

rabbitmqctl reset

² rabbitmqctl start_app

 

注意:整個集羣的啓動和中止順序恰好相反

 

8普通集羣的弊端

Queues的消息只存在於被建立的那臺機器上。

對於publish,客戶端任意鏈接集羣的一個節點,轉發給建立queue的節點存儲消息的全部信息;對於consumer,客戶端任意鏈接集羣中的一個節點,若是數據不在該節點中,則從存儲該消息data的節點拉取。可見當存儲有queue內容的節點失效後,只要等待該節點恢復後,queue中存在的消息才能夠獲取消費的到。顯然增長集羣的節點,能夠提升整個集羣的吞吐量,可是在高可用方面要稍微差一些。

附加:Rabbitmq HAhttp://www.rabbitmq.com/clustering.html

相關文章
相關標籤/搜索