Skip to content

Instantly share code, notes, and snippets.

@skamithi
Created December 15, 2017 16:43
Show Gist options
  • Save skamithi/d5ffc6b2fb83e5d51017167260834f4a to your computer and use it in GitHub Desktop.
Save skamithi/d5ffc6b2fb83e5d51017167260834f4a to your computer and use it in GitHub Desktop.
network partition testing

When all 3 nodes come up, there are no network partitions

vagrant@tower1 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower1 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower2,rabbitmq@tower3,rabbitmq@tower1]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[]},
 {alarms,[{rabbitmq@tower2,[]},{rabbitmq@tower3,[]},{rabbitmq@tower1,[]}]}]

Simulate network connectivity loss, by shutting down the interface on tower3.

Run ``rabbitmqctl cluster_status" again on tower1. Command hangs for a few minutes then it returns an alarm stating that tower3 is down.

[vagrant@tower1 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower1 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower2,rabbitmq@tower3,rabbitmq@tower1]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[]},
 {alarms,[{rabbitmq@tower2,[]},
          {rabbitmq@tower3,[nodedown]},
          {rabbitmq@tower1,[]}]}]

Waited for a minute and rerun rabbitmqctl cluster_status on tower1. This time the command only hangs for a second, before returning a cluster list showing that tower3 is not longer listed in running_nodes.

[vagrant@tower1 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower1 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower2,rabbitmq@tower1]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[]},
 {alarms,[{rabbitmq@tower2,[]},{rabbitmq@tower1,[]}]}]

On tower3 the rabbitmqctl cluster_status command says the following. You have to wait a little while before the command returns a result.

vagrant@tower3 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower3 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower3]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[]},
 {alarms,[{rabbitmq@tower3,[]}]}]

  • simulated network connectivity restoration by enabling the tower3 ethernet interface.

From tower3, I observe a network partition

[vagrant@tower3 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower3 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower3]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[{rabbitmq@tower3,[rabbitmq@tower1,rabbitmq@tower2]}]},
 {alarms,[{rabbitmq@tower3,[]}]}]

From tower1 I see network partition

[vagrant@tower1 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbitmq@tower1 ...
[{nodes,[{disc,[rabbitmq@tower1,rabbitmq@tower2,rabbitmq@tower3]}]},
 {running_nodes,[rabbitmq@tower2,rabbitmq@tower1]},
 {cluster_name,<<"rabbitmq@tower2">>},
 {partitions,[{rabbitmq@tower2,[rabbitmq@tower3]},
              {rabbitmq@tower1,[rabbitmq@tower3]}]},
 {alarms,[{rabbitmq@tower2,[]},{rabbitmq@tower1,[]}]}]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment