(三)RabbitMQ集群(Ⅰ)
安裝RabbitMQ:https://blog.csdn.net/ycj_xiyang/article/details/79926586
RabbitMQ集群(Ⅱ):https://blog.csdn.net/YCJ_xiyang/article/details/79958507
什么是集群?什么是分布式?
分布式:一個(gè)業(yè)務(wù)分拆多個(gè)子業(yè)務(wù),部署在不同的服務(wù)器上????集群:同一個(gè)業(yè)務(wù),部署在多個(gè)服務(wù)器上?
RabbitMQ基于erlang語(yǔ)言開(kāi)發(fā),而erlang是一門分布式語(yǔ)言開(kāi)發(fā),適用于集群開(kāi)發(fā);rabbitmq自身也提供了多種集群方案:http://www.rabbitmq.com/ha.html?
?
??1.集群管理:沒(méi)有明顯的主從,主要的是disk和ram節(jié)點(diǎn)的區(qū)別
??2.做集群的需求:不支持跨網(wǎng)段(erlang限制)
??3.集群類型:普通集群、鏡像集群
????普通集群:結(jié)構(gòu)同步,消息實(shí)體只存在一個(gè)節(jié)點(diǎn)中,但consumer在非消息節(jié)點(diǎn)獲取是,節(jié)點(diǎn)間存在消息拉取,易產(chǎn)生性能瓶頸。
????鏡像集群:集群中一個(gè)master,負(fù)責(zé)調(diào)度,處理消息實(shí)體,其他節(jié)點(diǎn)保存一份數(shù)據(jù)到本地;性能主要靠master承載。
??4.持久化,分兩部分:
????Rabbitmq服務(wù)器配置持久化:默認(rèn)的就是持久化(disc類型);
????代碼持久化:默認(rèn)情況下,代碼創(chuàng)建的消息隊(duì)列和存放在隊(duì)列里的消息都是非持久化的,需要在建立隊(duì)列時(shí)指定。
啟動(dòng)節(jié)點(diǎn)
? ? 一共三種啟動(dòng)方式
????? ? 一般啟動(dòng):service rabbitmq-server satrt
????? ? 前臺(tái)啟動(dòng):rabbitmq-server
?????????????????????????如果當(dāng)前的窗口終結(jié),則這個(gè)服務(wù)會(huì)退出
????? ? 后臺(tái)啟動(dòng):rabbitmq-server -detached
同步Erlang cookie
????集群中node必須使用相同的cookie才能相互通訊
? ??????cookie的位置一般在 /var/lib/rabbitmq/.erlang.cookie(內(nèi)容任意)
查看集群的狀態(tài)
? ? rabbitmqctl cluster_status????
[root@h101 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h101 ... [{nodes,[{disc,[rabbit@h101]}]},{running_nodes,[rabbit@h101]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h101 ~]# [root@h102 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h102 ... [{nodes,[{disc,[rabbit@h102]}]},{running_nodes,[rabbit@h102]},{cluster_name,<<"rabbit@h102.temp">>},{partitions,[]}] [root@h102 ~]#創(chuàng)建集群
? ? 集群中node是平等的,新node可以選擇任意一個(gè)節(jié)點(diǎn)加入
? ? 加入集群分三步(更多的節(jié)點(diǎn)加入也是一樣的方法)
????????首先關(guān)閉本地應(yīng)用?rabbitmqctl stop_app
[root@h101 ~]# rabbitmqctl stop_app Stopping node rabbit@h101 ...? ? ????加入集群 rabbitmqctl join_cluster 節(jié)點(diǎn)名
? ? ????啟動(dòng)應(yīng)用 rabbitmqctl start_app
[root@h102 ~]# rabbitmqctl start_app Starting node rabbit@h102 ... [root@h102 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h102 ... [{nodes,[{disc,[rabbit@h101,rabbit@h102]}]},{running_nodes,[rabbit@h101,rabbit@h102]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h102 ~]# [root@h101 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h101 ... [{nodes,[{disc,[rabbit@h101,rabbit@h102]}]},{running_nodes,[rabbit@h102,rabbit@h101]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h101 ~]#重啟集群node
? ? 加入集群的節(jié)點(diǎn)可以任意關(guān)停、下線或宕機(jī)
關(guān)閉h101
[root@h101 ~]# rabbitmqctl stop Stopping and halting node rabbit@h101 ... [root@h101 ~]#
h101上的日志
=INFO REPORT==== 23-Mar-2018::22:19:33 === Stopping RabbitMQ=INFO REPORT==== 23-Mar-2018::22:19:33 === stopped TCP Listener on [::]:5672=INFO REPORT==== 23-Mar-2018::22:19:33 === Stopped RabbitMQ application=INFO REPORT==== 23-Mar-2018::22:19:33 === Halting Erlang VMh102上的日志 =INFO REPORT==== 23-Mar-2018::22:19:33 === rabbit on node rabbit@h101 down=INFO REPORT==== 23-Mar-2018::22:19:33 === Keep rabbit@h101 listeners: the node is already back=INFO REPORT==== 23-Mar-2018::22:19:34 === node rabbit@h101 down: connection_closedh102上的集群狀態(tài)
[root@h102 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h102 ... [{nodes,[{disc,[rabbit@h101,rabbit@h102]}]},{running_nodes,[rabbit@h102]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h102 ~]#啟動(dòng)h101
[root@h101 ~]# /etc/init.d/rabbitmq-server start Starting rabbitmq-server: SUCCESS rabbitmq-server. [root@h101 ~]#h102上的日志
=INFO REPORT==== 23-Mar-2018::22:26:04 === node rabbit@h101 up=INFO REPORT==== 23-Mar-2018::22:26:05 === rabbit on node rabbit@h101 uph102上的集群狀態(tài)
[root@h102 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h102 ... [{nodes,[{disc,[rabbit@h101,rabbit@h102]}]},{running_nodes,[rabbit@h101,rabbit@h102]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h102 ~]#h101上的集群狀態(tài)
[root@h101 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h101 ... [{nodes,[{disc,[rabbit@h101,rabbit@h102]}]},{running_nodes,[rabbit@h102,rabbit@h101]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h101 ~]#拆分集群
? ? 本地退出
????? ? 移除某個(gè)node分三步
????????? ? 停止本地應(yīng)用 rabbitmqctl stop_app
????????? ? 重啟node rabbitmqctl reset
????????? ? 啟動(dòng)應(yīng)用 rabbitmqctl start_app
? ? 遠(yuǎn)程剔除
????????? ? 無(wú)法響應(yīng)的node,一段時(shí)間里無(wú)法交互,可以從集群中剔除
????????????? ? 首先停掉本地應(yīng)用 rabbitmqctl stop_app
????????????? ? 在另一個(gè)服務(wù)上進(jìn)行剔除 rabbitmqctl forget_cluster_node 無(wú)法響應(yīng)的節(jié)點(diǎn)名
[root@h102 ~]# rabbitmqctl forget_cluster_node rabbit@h101 Removing node rabbit@h101 from cluster ... [root@h102 ~]#???????????????此時(shí)在另一個(gè)服務(wù)上無(wú)法響應(yīng)的節(jié)點(diǎn)已經(jīng)剔除,但是無(wú)法響應(yīng)的節(jié)點(diǎn)還認(rèn)為自己是集群的一部分,一旦它的應(yīng)用恢復(fù),它會(huì)嘗試與集群聯(lián)絡(luò),從而報(bào)錯(cuò)
[root@h101 ~]# rabbitmqctl start_app Starting node rabbit@h101 ...BOOT FAILED ===========Error description:{error,{inconsistent_cluster,"Node rabbit@h101 thinks it's clustered with node rabbit@h102, but rabbit@h102 disagrees"}}Log files (may contain more information):/var/log/rabbitmq/rabbit@h101.log/var/log/rabbitmq/rabbit@h101-sasl.logStack trace:[{rabbit_mnesia,check_cluster_consistency,0},{rabbit,'-start/0-fun-0-',0},{rabbit,start_it,1},{rpc,'-handle_call_call/6-fun-0-',5}]Error: {error,{inconsistent_cluster,"Node rabbit@h101 thinks it's clustered with node rabbit@h102, but rabbit@h102 disagrees"}} [root@h101 ~]#?????解決的辦法是 ?一旦有機(jī)會(huì)連上無(wú)法響應(yīng)的節(jié)點(diǎn),就對(duì)它進(jìn)行重置
[root@h101 ~]# rabbitmqctl reset Resetting node rabbit@h101 ... [root@h101 ~]# rabbitmqctl start_app Starting node rabbit@h101 ... [root@h101 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@h101 ... [{nodes,[{disc,[rabbit@h101]}]},{running_nodes,[rabbit@h101]},{cluster_name,<<"rabbit@h101.temp">>},{partitions,[]}] [root@h101 ~]#??????????????????
?????????????????
總結(jié)
以上是生活随笔為你收集整理的(三)RabbitMQ集群(Ⅰ)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 有一个函数y=x(x「1),y=2x-1
- 下一篇: 苹果7【】闪存测试软件,教你如何查看自己