In geo-DR setup using garbd, performance degrades with node count when cross dc link is down
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Galera |
Fix Released
|
High
|
Teemu Ollakka | ||
Percona XtraDB Cluster moved to https://jira.percona.com/projects/PXC |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
I build the following setup to test the message relaying capability of garbd
PXC PXC
DC1 ------- DC2
\ /
\ /
DC3
garbd
DC1: subnet: 10.3.1.0/24
DC2: subnet: 10.3.2.0/24
DC3: subnet: 10.3.3.0/24
Everything is built in virtualbox and sit on my local network. Ping time between all the hosts in under 1ms.
Then, I cut communication between DC1 and DC2 using on the nodes in DC1:
iptables -I INPUT -s 10.3.2.0/24 -j DROP; iptables -I OUTPUT -d 10.3.2.0/24 -j DROP
The issue is strong performance regression as nodes are added:
=======
1 nodes on each side + garb, cross dc cut
=======
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (0.02 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (0.01 sec)
This is perfect and works very well. But adding a 2nd node in each DC...
=======
2 nodes on each side + garb, cross dc cut
=======
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (7.02 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (3.16 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (3.24 sec)
And a 3rd...
=======
3 nodes on each side + garb, cross dc cut
=======
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (19.59 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (10.68 sec)
mysql> insert into t (id) values (NULL);
Query OK, 1 row affected (23.42 sec)
So performance degrades with node counts. Here's a status output from the inserter node, all status are similar:
+------
| Variable_name | Value |
+------
| wsrep_local_
| wsrep_protocol_
| wsrep_last_
| wsrep_replicated | 27 |
| wsrep_replicate
| wsrep_received | 39 |
| wsrep_received_
| wsrep_local_commits | 23 |
| wsrep_local_
| wsrep_local_
| wsrep_local_replays | 0 |
| wsrep_local_
| wsrep_local_
| wsrep_local_
| wsrep_local_
| wsrep_flow_
| wsrep_flow_
| wsrep_flow_
| wsrep_cert_
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 1.000000 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 1.000000 |
| wsrep_local_state | 4 |
| wsrep_local_
| wsrep_cert_
| wsrep_causal_reads | 0 |
| wsrep_incoming_
| wsrep_cluster_
| wsrep_cluster_size | 7 |
| wsrep_cluster_
| wsrep_cluster_
| wsrep_connected | ON |
| wsrep_local_index | 3 |
| wsrep_provider_name | Galera |
| wsrep_provider_
| wsrep_provider_
| wsrep_ready | ON |
and the variables:
wsrep_provider=
wsrep_data_
wsrep_slave_
wsrep_node_
wsrep_sst_
wsrep_cluster_
wsrep_provider_
evs.inactive_
_DEBUG"
wsrep_node_
#wsrep_
wsrep_cluster_
and finally, on 10.3.3.41, garbd is invoked with:
garbd -a gcomm:/
The timing setting comes from a customer that has the same issue (even worse) on a real wan.
Yves
Related branches
Changed in galera: | |
status: | New → Confirmed |
assignee: | nobody → Teemu Ollakka (teemu-ollakka) |
milestone: | none → 23.2.6 |
Changed in galera: | |
importance: | Undecided → High |
status: | Confirmed → In Progress |
Changed in galera: | |
milestone: | 23.2.6 → 23.2.7 |
Changed in percona-xtradb-cluster: | |
milestone: | none → 5.5.33-23.7.6 |
status: | New → Fix Committed |
Changed in percona-xtradb-cluster: | |
status: | Fix Committed → Fix Released |
Changed in galera: | |
status: | Fix Committed → Fix Released |
To rule out the garbd code, I have done another test and replaced the garbd with a real mysql/xtradb node in DC3.
The behaviour was the same. Performance gets's worse with more then 1 node on one side, DC1 or DC2.
Marco