日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ Network Partitions 服务日志对比

發(fā)布時(shí)間:2024/4/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ Network Partitions 服务日志对比 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。

歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-network-partition-server-log-compare/


如果你一直使用RabbitMQ作為業(yè)務(wù)的消息中間件,難免會(huì)遇到網(wǎng)絡(luò)分區(qū)(Network Partitions)的故障,也許你當(dāng)時(shí)會(huì)束手無策,一臉懵逼,不過希望在看完這篇文章之后,能給你一點(diǎn)解決網(wǎng)絡(luò)分區(qū)的思路。

RabbitMQ中所有節(jié)點(diǎn)狀態(tài)的變更都會(huì)記錄在日志當(dāng)中,日志默認(rèn)地址為:$RABBITMA_HOME/var/log/rabbitmq/rabbit@node*.log。所以當(dāng)網(wǎng)絡(luò)分區(qū)發(fā)生的時(shí)候可以根據(jù)日志內(nèi)容來推測(cè)出當(dāng)時(shí)發(fā)生網(wǎng)絡(luò)分區(qū)的原因,進(jìn)而據(jù)此優(yōu)化你的業(yè)務(wù)邏輯,增強(qiáng)應(yīng)用的魯棒性。

本文只展示在模擬發(fā)生網(wǎng)絡(luò)分區(qū)前后的日志對(duì)比,方便在查看日志的時(shí)候可以提供一個(gè)參考。

本文之后的RabbitMQ集群有兩個(gè)節(jié)點(diǎn)組成,分別為rabbit@node1和rabbit@node2。
模擬網(wǎng)絡(luò)分區(qū)的方法:關(guān)閉node2節(jié)點(diǎn)的網(wǎng)卡(ifdown eth0),之后再恢復(fù)。注:測(cè)試采用的兩個(gè)節(jié)點(diǎn)都是單網(wǎng)卡的。
網(wǎng)絡(luò)分區(qū)的恢復(fù)方法:關(guān)閉node2節(jié)點(diǎn)(rabbitmqctl stop),之后再恢復(fù)node節(jié)點(diǎn)(rabbitmq-server -detached)即可恢復(fù)網(wǎng)絡(luò)分區(qū)。
網(wǎng)絡(luò)分區(qū)的查看方式:rabbitmqctl cluster_status命令之后查看partititons中是否有相關(guān)節(jié)點(diǎn)信息?;蛘咭部梢酝ㄟ^WebUI的方式查看。

具體執(zhí)行步驟以及兩個(gè)節(jié)點(diǎn)的日志對(duì)比如下所示。
1.在node2上執(zhí)行ifdown eth0。
node1中打印日志如下

=ERROR REPORT==== 24-Jun-2017::17:08:55 === ** Node 'rabbit@node2' not responding ** ** Removing (timedout) connection **=INFO REPORT==== 24-Jun-2017::17:08:55 === rabbit on node 'rabbit@node2' down=INFO REPORT==== 24-Jun-2017::17:08:55 === node 'rabbit@node2' down: net_tick_timeout

node2打印日志:

NG REPORT==== 24-Jun-2017::17:35:31 === epmd does not know us, re-registering rabbit at port 25672=ERROR REPORT==== 24-Jun-2017::17:36:00 === ** Node 'rabbit@node1' not responding ** ** Removing (timedout) connection **=INFO REPORT==== 24-Jun-2017::17:36:00 === rabbit on node 'rabbit@node1' down=INFO REPORT==== 24-Jun-2017::17:36:00 === node 'rabbit@node1' down: net_tick_timeout

之后如果不執(zhí)行任何操作,node2每隔1min會(huì)打印日志(忽略下面的具體日期):

NG REPORT==== 24-Jun-2017::xx:xx:xx === epmd does not know us, re-registering rabbit at port 25672

2.在node2上執(zhí)行ifup eth0。
node1之后打印日志如下:

=INFO REPORT==== 24-Jun-2017::17:10:32 === node 'rabbit@node2' up=ERROR REPORT==== 24-Jun-2017::17:10:32 === Mnesia('rabbit@node1'): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, 'rabbit@node2'}

node2打印日志:

=INFO REPORT==== 24-Jun-2017::17:42:21 === node 'rabbit@node1' up=ERROR REPORT==== 24-Jun-2017::17:42:21 === Mnesia('rabbit@node2'): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, 'rabbit@node1'}

3.此時(shí)在node1上執(zhí)行rabbitmqctl cluster_status可以看到:

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

4.此時(shí)在node2上執(zhí)行rabbitmqctl cluster_status可以看到:

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

此時(shí)可以判斷已經(jīng)出現(xiàn)了網(wǎng)絡(luò)分區(qū),之后恢復(fù)網(wǎng)絡(luò)分區(qū)。


5.在node2上執(zhí)行rabbitmqctl stop之后。
可以看到node1的日志:

=INFO REPORT==== 24-Jun-2017::17:25:11 === rabbit on node 'rabbit@node2' down=INFO REPORT==== 24-Jun-2017::17:25:12 === Keep rabbit@node2 listeners: the node is already back=INFO REPORT==== 24-Jun-2017::17:25:13 === node 'rabbit@node2' down: connection_closed

note2中的日志:

=INFO REPORT==== 24-Jun-2017::17:56:21 === Stopping RabbitMQ=INFO REPORT==== 24-Jun-2017::17:56:21 === stopped TCP Listener on [::]:5672=INFO REPORT==== 24-Jun-2017::17:56:21 === Stopped RabbitMQ application=INFO REPORT==== 24-Jun-2017::17:56:21 === Halting Erlang VM

6.在node2上執(zhí)行rabbitmq-server -detached以恢復(fù)網(wǎng)絡(luò)分區(qū)。
此時(shí)node1的日志為:

=INFO REPORT==== 24-Jun-2017::17:58:27 === node 'rabbit@node2' up=INFO REPORT==== 24-Jun-2017::17:58:27 === rabbit on node 'rabbit@node2' up

此時(shí)node2的日志為:

ERROR REPORT==== 24-Jun-2017::17:58:55 === Mnesia('rabbit@node2'): ** ERROR ** mnesia_event got {inconsistent_database, starting_partitioned_network, 'rabbit@node1'}=INFO REPORT==== 24-Jun-2017::17:58:55 === Starting RabbitMQ 3.5.7 on Erlang 19.1 Copyright (C) 2007-2015 Pivotal Software, Inc. Licensed under the MPL. See http://www.rabbitmq.com/=INFO REPORT==== 24-Jun-2017::17:58:55 === node : rabbit@node2 home dir : /root config file(s) : /opt/rabbitmq/sbin/../etc/rabbitmq/rabbitmq.config (not found) cookie hash : VCwbL3S9/ydrGgVsrLjVkA== log : /opt/rabbitmq/sbin/../var/log/rabbitmq/rabbit@node2.log sasl log : /opt/rabbitmq/sbin/../var/log/rabbitmq/rabbit@node2-sasl.log database dir : /opt/rabbitmq/sbin/../var/lib/rabbitmq/mnesia/rabbit@node2=INFO REPORT==== 24-Jun-2017::17:58:55 === Memory limit set to 392MB of 980MB total.=INFO REPORT==== 24-Jun-2017::17:58:55 === Disk free limit set to 50MB=INFO REPORT==== 24-Jun-2017::17:58:55 === Limiting to approx 924 file handles (829 sockets)=INFO REPORT==== 24-Jun-2017::17:58:55 === FHC read buffering: ON FHC write buffering: ON=INFO REPORT==== 24-Jun-2017::17:58:55 === Priority queues enabled, real BQ is rabbit_variable_queue=INFO REPORT==== 24-Jun-2017::17:58:55 === msg_store_transient: using rabbit_msg_store_ets_index to provide index=INFO REPORT==== 24-Jun-2017::17:58:55 === msg_store_persistent: using rabbit_msg_store_ets_index to provide index=INFO REPORT==== 24-Jun-2017::17:58:55 === started TCP Listener on [::]:5672=INFO REPORT==== 24-Jun-2017::17:58:55 === rabbit on node 'rabbit@node2' up=INFO REPORT==== 24-Jun-2017::17:58:55 === Server startup complete; 0 plugins started.

此時(shí)可以在任何一個(gè)節(jié)點(diǎn)中輸入rabbitmqctl cluster_status命令
之后可以看到:

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

只要看到partitions中沒有任何節(jié)點(diǎn)信息即表示網(wǎng)絡(luò)分區(qū)消失。

歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-network-partition-server-log-compare/


歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。


總結(jié)

以上是生活随笔為你收集整理的RabbitMQ Network Partitions 服务日志对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。