RabbitMQ 网络分区

Monday, November 9, 2020

Hostname IP
node1 10.0.44.91
node2 10.0.44.92
node3 10.0.44.93

模拟网络分区

1. 让 node2 脱离集群

node2执行命令,关闭网卡。

ifdown ens3

2. 查看各节点状态

等待一分钟左右,在 node1查看集群状态,执行rabbitmqctl cluster_status,此时node1认为node2已经脱离集群。node3情况一样。

[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
Basics

Cluster name: rabbit@node1

Disk Nodes

rabbit@node1
rabbit@node2
rabbit@node3

Running Nodes

rabbit@node1
rabbit@node3

Maintenance status

Node: rabbit@node1, status: not under maintenance
Node: rabbit@node3, status: not under maintenance

Network Partitions

(none)

node2上执行rabbitmqctl cluster_status,显示信息,此时还没有出现网络分区。

3. 让 node2 恢复

node2恢复网卡。

ifup ens3

4. 查看各节点状态

查看 node1集群状态,检测到网络分区。node3情况一样。

[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
Basics

Cluster name: rabbit@node1

Disk Nodes

rabbit@node1
rabbit@node2
rabbit@node3

Running Nodes

rabbit@node1
rabbit@node3

Maintenance status

Node: rabbit@node1, status: not under maintenance
Node: rabbit@node3, status: not under maintenance

Network Partitions

Node rabbit@node1 cannot communicate with rabbit@node2
Node rabbit@node3 cannot communicate with rabbit@node2

json格式。

"partitions":{
    "rabbit@node1":[
        "rabbit@node2"
    ],
    "rabbit@node3":[
        "rabbit@node2"
    ]
},

node1 web界面。

查看node2集群状态。

[root@node2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
Basics

Cluster name: rabbit@node1

Disk Nodes

rabbit@node1
rabbit@node2
rabbit@node3

Running Nodes

rabbit@node2

Versions

rabbit@node2: RabbitMQ 3.8.9 on Erlang 22.3.4.11

Maintenance status

Node: rabbit@node2, status: not under maintenance

Network Partitions

Node rabbit@node2 cannot communicate with rabbit@node1, rabbit@node3

json格式。

"partitions":{
    "rabbit@node2":[
        "rabbit@node1",
        "rabbit@node3"
    ]
},

node2web 界面。

网络分区恢复

// TODO

后端RabbitMQ

Linux Logrotate 的简单使用

GO 无缓冲通道和有缓冲通道