Приветствую коллеги.
Есть кластер (2 ноды 2x Intel Xeon E5-2670 2.6Ghz , 192Gb, RAID1 из 2 SSD + 1 арбитратор на виртуалке). Запросы на него идут через maxscale proxy, настроенную таким образом, чтобы все запросы (и чтения и записи) шли на одну ноду, а в случает если нода окажется недоступна - на вторую. Репликация бодренько идет, но через некоторое время может появиться один или два зависших запроса в статусе Query End, при попытке их "убить" статус меняется на Killed - и всё. Кластер при этом работает, всё ок. А потом (с момента запуска проходит от 10 минут до нескольких дней) кластер становится колом - перестает обрабатывать запросы.
В PROCESSLIST при этом висит некоторое количество запросов (8-10) в статусе Query End, при попытке их "убить" статус меняется на Killed.
В syslog\mysql-error.log может не быть ошибок совсем, а может быть что-то вроде
Aug 3 10:43:32 ru-tul-dc01-db-galera-node1 mysqld[1122]: 2017-08-03 10:43:32 139707425306368 [Warning] Aborted connection 2905 to db: 'basename' user: 'username' host: 'ip' (Got an error reading communication packets)
Aug 3 10:43:32 ru-tul-dc01-db-galera-node1 mysqld[1122]: 2017-08-03 10:43:32 139707424700160 [Warning] Aborted connection 2919 to db: 'basename' user: 'username' host' host: 'ip' (Got an error reading communication packets)
и\или множество
Aug 3 14:35:08 ru-tul-dc01-db-galera-node1 mysqld[1115]: 2017-08-03 14:35:08 140310822119168 [Warning] WSREP: certification interval for trx source: dcdccd42-7837-17837-11e7-a045-2a82ddbaac7a version: 3 local: 1 state: CERTIFYING flags: 1 conn_id: 1010 trx_id: 10244940 seqnos (l: 152638, g: 5113465, s: 5088151, d: -1, ts: 3445: 3445393337346) exceeds the limit of 16384)
Единственный способ вернуть кластер к жизни (на время) - перезапустить ноду на которую ведется запись. Переносить mysqld в одну NUMA ноду пробовал - проблема остается. Помогите пожалуйста понять где грабли, уже голову сломал. Конфиг прилагаю.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
# MyISAM #
key-buffer-size = 32M
myisam-recover = FORCE,BACKUP
# SAFETY #
max-allowed-packet = 16M
max-connect-errors = 1000000
skip-name-resolve
# DATA STORAGE #
datadir = /var/lib/mysql/
# BINARY LOGGING #
log-bin = /var/lib/mysql/mysql-bin
expire-logs-days = 14
#sync-binlog = 1
sync-binlog = 0
# CACHES AND LIMITS #
tmp-table-size = 32M
max-heap-table-size = 32M
query-cache-type = 0
query-cache-size = 0
max-connections = 500
thread-cache-size = 50
open-files-limit = 65535
table-definition-cache = 4096
table-open-cache = 4096
# INNODB #
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-log-file-size = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table = 1
innodb-buffer-pool-size = 160G
# LOGGING #
log-error = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes = 1
slow-query-log = 1
slow-query-log-file = /var/lib/mysql/mysql-slow.log
!includedir /etc/mysql/conf.d/
#GALERA
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera-cluster"
wsrep_cluster_address="gcomm://ip1,ip1"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup
# Galera Node Configuration
wsrep_node_address="ip1"
wsrep_node_name="galera-node1"
wsrep_retry_autocommit = 4
wsrep_slave_threads = 64
wsrep_provider_options="gcache.size=5G; gcs.fc_limit = 320; gcs.fc_factor = 0.8; repl.commit_order=3;"
#wsrep_debug=ON
wsrep_log_conflicts=ON