Galera + MariaDB: Deadlock: wsrep hat die Transaktion abgebrochen

Galera + MariaDB: Deadlock: wsrep hat die Transaktion abgebrochen

Ich habe 1 Server mit Galera konfiguriert, 4 Server mit MariaDB und 1 mit Haproxy.

Wenn ich jedoch auf einem beliebigen Server ein Update durchführen möchte, erhalte ich (manchmal) die Fehlermeldung „Deadlock: wsrep abgebrochene Transaktion“ oder „wsrep_max_ws_rows überschritten“.

Die Server sind mit 32 GB Arbeitsspeicher und 24 CPUs (VmWare) leistungsstark.

gard.conf (IP 1.1.1.110):

GALERA_NODES="1.1.1.111:4567 1.1.1.112:4567  1.1.1.113:4567  1.1.1.114:4567"
GALERA_GROUP="mariadb_cluster" 
GALERA_OPTIONS="pc.wait_prim=no"  
LOG_FILE="/var/log/garbd.log"

cluster.cnf (4 Server MariaDB IP 1.1.1.111 bis 1.1.1.114):

[mysqld]
query_cache_size=0
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_type=0
bind-address=0.0.0.0
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
join_buffer_size = 1M

wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
    
wsrep_cluster_name="mariadb_cluster"
wsrep_cluster_address="gcomm://1.1.1.111,1.1.1.112,1.1.1.113,1.1.1.114"

wsrep_sst_method=rsync
    
wsrep_node_address="1.1.1.111"
wsrep_node_name="mysqlcl0X"
wsrep_max_ws_rows=2048
wsrep_max_ws_size=8G
wsrep_provider_options = "gcs.fc_limit = 2048; gcs.fc_factor = 0.99; gcs.fc_master_slave = yes"

Der Fehler bei der Durchführung eines Updates tritt direkt auf dem Client des jeweiligen Servers auf. Der Fehler liegt also nicht beim Haproxy. Ich habe die Konfiguration nur für alle Fälle eingerichtet.

haproxy.cfg:

listen galera
     bind *:3306
     mode tcp
     timeout client 60000ms
     timeout server 60000ms
     balance leastconn
     server 1.1.1.111 1.1.1.111:3306 check
     server 1.1.1.112 1.1.1.112:3306 check
     server 1.1.1.113 1.1.1.113:3306 check
     server 1.1.1.114 1.1.1.114:3306 check

Was fehlt mir in der Konfiguration?

Von daher schon mal vielen herzlichen Dank!

Antwort1

https://mariadb.com/kb/en/galera-cluster-system-variables/#wsrep_max_ws_rows

Vielleicht =0würde das zumindest einen Teil des Problems lösen.

Wenn das Problem wirklich darin besteht, dass eine Transaktion „zu viele“ Zeilen enthält, besprechen wir die Transaktion und suchen wir nach Möglichkeiten zur Effizienzsteigerung.

Antwort2

Ich habe es mit dieser Option gelöst:

wsrep-retry-autocommit = 100

Ich glaube nicht, dass das das Richtige ist. Es dauert eine Weile, bis es ausgeführt wird, aber es funktioniert.

Scheitere weiterhin.

1213 Deadlock: wsrep aborted transaction 

verwandte Informationen