Сбой кластера Percona Xtradb

У нас есть кластер Percona Xtradb с 5 узлами и арбитром. Один из наших разработчиков Php выполнил неверный запрос в кластере, что привело к сбою всех узлов. После сбоя мы не смогли собрать какой-либо журнал ошибок, чтобы сказать нам, что на самом деле пошло не так, поскольку весь кластер рухнул без ведения журнала.

Я всегда думал, что когда один запрос выполняется в кластере, он обрабатывается только одним из узлов в кластере. Поэтому, если запрос плохой (вплоть до убийства сервера БД), он должен привести к сбою только одного узла, который его обрабатывает, оставив кластер работать с оставшимися 4 узлами.

Такое поведение озадачило нас, и мы хотели бы понять, что происходит на самом деле, тем более, что это происходит уже во второй раз. Почему запрос, выполняемый в кластере во время обработки одним из узлов, может привести к сбою других узлов в кластере в случае возникновения какой-либо проблемы во время обработки?

Ниже приведена наша конфигурация my.cnf:

#
# Default values.
[mysqld_safe]
flush_caches
numa_interleave
#
#
[mysqld]
back_log = 65535
binlog_format = ROW
character_set_server = utf8
collation_server = utf8_general_ci
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expand_fast_index_creation = 1
expire_logs_days = 7
innodb_autoinc_lock_mode = 2
innodb_buffer_pool_instances = 16
innodb_buffer_pool_populate = 1
innodb_buffer_pool_size = 32G   # XXX 64GB RAM, 80%
innodb_data_file_path = ibdata1:64M;ibdata2:64M:autoextend
innodb_file_format = Barracuda
innodb_file_per_table
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 1600
innodb_large_prefix
innodb_locks_unsafe_for_binlog = 1
innodb_log_file_size = 64M
innodb_print_all_deadlocks = 1
innodb_read_io_threads = 64
innodb_stats_on_metadata = FALSE
innodb_support_xa = FALSE
innodb_write_io_threads = 64
log-bin = mysqld-bin
log-queries-not-using-indexes
log-slave-updates
long_query_time = 1
max_allowed_packet = 64M
max_connect_errors = 4294967295
max_connections = 4096
min_examined_row_limit = 1000
port = 3306
relay-log-recovery = TRUE
skip-name-resolve
slow_query_log = 1
slow_query_log_timestamp_always = 1
table_open_cache = 4096
thread_cache = 1024
tmpdir = /db/tmp
transaction_isolation = REPEATABLE-READ
updatable_views_with_limit = 0
user = mysql
wait_timeout = 60
#
# Galera Variable config 
wsrep_cluster_address = gcomm://ip_1, ip_2, ip_3,ip_4,ip_4,ip_5
wsrep_cluster_name = cluster_db
wsrep_provider = /usr/lib/libgalera_smm.so
wsrep_provider_options = "gcache.size=4G"
wsrep_slave_threads = 32
wsrep_sst_auth = "user:password"
wsrep_sst_donor = "db1"
#wsrep_sst_method = xtrabackup_throttle
wsrep_sst_method = xtrabackup-v2
#
# XXX You *MUST* change!
server-id = 1

person The Georgia    schedule 09.08.2015    source источник
comment
В бинлоге есть что? кеш?   -  person Rick James    schedule 16.08.2015
comment
Да, в binlog и gcache есть данные.   -  person The Georgia    schedule 18.08.2015
comment
Вы видите в них плохой запрос? Или вы иначе знаете, что такое плохой запрос?   -  person Rick James    schedule 18.08.2015
comment
Мы уже знаем, какой запрос плохой. После сбоя журнал запросов не регистрирует этот запрос. Но да, мы знаем плохой запрос.   -  person The Georgia    schedule 21.08.2015
comment
Хотите показать нам плохой запрос?   -  person Rick James    schedule 22.08.2015


Ответы (1)


Можете ли вы опубликовать запрос? Запросы SELECT выполняются только на одном узле, но все запросы на запись будут выполняться везде. Что у вас в журнале ошибок?

person utdrmac    schedule 21.08.2015
comment
Похоже, у percona-xtradb-backup с использованием xtrabackup есть ошибка. Периодически сообщалось о сбое кластера. Решением, по крайней мере в нашем случае, было вернуться к использованию rsync вместо xtrabackup. - person The Georgia; 25.08.2015
comment
Это очень подозрительно. Можете ли вы предоставить идентификатор ошибки? (Я работаю в Percona) - person utdrmac; 10.09.2015
comment
@utdrmac Я пытался запустить Percona с инструкциями на этой странице percona.com/doc/kubernetes-operator-for-pxc/kubernetes.html, но модули продолжают зацикливаться, и это часть журнала [Galera] failed to open gcomm backend connection: 110: failed to reach primary view (pc.wait_prim_timeout): 110 (Connection timed out, и это действительно похоже на ошибку - person Margach Chris; 18.05.2020
comment
@MargachChris Пожалуйста, не отвечайте на вопросы SE других людей. Открой новый и мы разберемся. - person utdrmac; 19.05.2020