Galera + MariaDB:死鎖:wsrep 中止事務

Galera + MariaDB:死鎖:wsrep 中止事務

我有 1 台伺服器配置了 galera,4 台伺服器配置了 mariadb,1 台伺服器配置了 haproxy。

但是,當我想在任何伺服器上進行更新時,我會收到錯誤「死鎖:wsrep 中止事務」或「超出 wsrep_max_ws_rows」(有時)。

這些伺服器功能強大,具有 32GB 記憶體和 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台伺服器mariadb ip 1.1.1.111到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"

進行更新時的錯誤是直接在每個伺服器的用戶端上完成的,因此錯誤不是haproxy,我只是將設定放在以防萬一。

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

我在配置中缺少什麼?

從已經非常感謝你了!

答案1

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

也許=0至少可以解決部分問題。

如果問題確實是事務中「太多」行,那麼讓我們討論該事務並尋找提高效率的方法。

答案2

我已經用這個選項解決了這個問題:

wsrep-retry-autocommit = 100

我認為這不是正確的做法,運行需要一段時間,但它有效。

繼續失敗..

1213 Deadlock: wsrep aborted transaction 

相關內容