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 =0
solucionarí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