We have a HAProxy which balances reads and writes to only one (of three) Galera nodes.
If this balancing works fine, the parameters wsrep_log_conflicts
and cert.log_conflicts
should never log any conflicts and errors? It won't fill up /var/log filesystem with messages?
What is the drawback of enabling wsrep_log_conflicts
and cert.log_conflicts
? Why it's not enabled by default?
Please give more info, the only thing I found was DEALING WITH MULTI-MASTER CONFLICTS
Lastly, you can enable conflict logging features through
wsrep_log_conflicts and cert.log_conflicts.
# Enable Conflict Logging
wsrep_log_conflicts=ON
wsrep_provider_options="cert.log_conflicts=YES"
These parameters enable different forms of conflict logging on the
database server. When turned on, the node logs additional information
about the conflicts it encounters, such as the name of the table and
schema where the conflict occurred and the actual values for the keys
that produced the conflict.
7:51:13 [Note] WSREP: trx conflict for key (1,FLAT8)056eac38 0989cb96:
source: cdeae866-d4a8-11e3-bd84-479ea1a1e941 version: 3 local: 1 state:
MUST_ABORT flags: 1 conn_id: 160285 trx_id: 29755710 seqnos (l: 643424,
g: 8749173, s: 8749171, d: 8749171, ts: 12637975935482109) <--X-->
source: 5af493da-d4ab-11e3-bfe0-16ba14bdca37 version: 3 local: 0 state:
APPLYING flags: 1 conn_id: 157852 trx_id: 26224969 seqnos (l: 643423,
g: 8749172, s: 8749171, d: 8749170, ts: 12637839897662340)
Best Answer
In a Galera cluster, any node can play the part of a Master node.
Such a node can execute DML (INSERTs, UPDATEs, and DELETEs).
If DML statements are spread across multiple Master nodes and are targeting the same tables, you must expect log conflicts. Why ?
Galera wsrep libraries were designed to commit DML changes if all nodes in a cluster are ready to do so. If one node cannot do so, all nodes must abandon a commit. It's basically all-or-nothing commits.
If you look at the bottom of the document you referenced, there are suggestions to minimize log conflicts under the heading
WORKING AROUND MULTI-MASTER CONFLICTS
:So, to answer your question, your drawback would be implementing these suggestions since it may require some code rewrite when you catch deadlocks, some autocommit tuning, and writing to one Master node (which could introduce write bottlenecks on top of the fact that Galera Clusters do not write scale well past 3 nodes).
The options are probably not enabled by default because of the possibility of having a write-heavy cluster that must have the logs examined often (even if a conflict never occurs). Thus, enabling wsrep_log_conflicts and cert.log_conflicts become your tuning responsibility.