Galera + MariaDB: Punto muerto: transacción abortada de wsrep

Galera + MariaDB: Punto muerto: transacción abortada de wsrep

Tengo 1 servidor configurado la galera, 4 servidores con mariadb y 1 con haproxy.

Pero cuando quiero hacer una actualización en cualquier servidor, aparece el error "Interbloqueo: transacción abortada de wsrep" o "wsrep_max_ws_rows excedido" (a veces).

Los servidores son potentes con 32gb de memoria y 24 CPU (VmWare).

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 servidores mariadb ip 1.1.1.111 a 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"

El error al hacer una actualización se hace directamente en el cliente de cada servidor, por lo que el error no es el haproxy, solo pongo la configuración por si acaso.

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

¿Qué me falta en la configuración?

Desde ya muchas gracias!

Respuesta1

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

Quizás =0solucionaría al menos parte del problema.

Si el problema realmente es "demasiadas" filas en una transacción, analicemos la transacción y busquemos formas de ser más eficientes.

Respuesta2

Lo he solucionado con esta opción:

wsrep-retry-autocommit = 100

No creo que sea lo correcto, tarda un poco en ejecutarse, pero funciona.

Sigue fallando..

1213 Deadlock: wsrep aborted transaction 

información relacionada