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 =0
wü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