2016-01-22 4 views
1

У нас есть 6 узлов Галера кластера и следующую таблицу:6 узлов отказ серт Галера кластера конфликт

mysql> show create table sessions; 
| Table | Create Table 
+----------+-------------- 
| sessions | CREATE TABLE `sessions` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`session_id` varchar(255) NOT NULL, 
`data` text, 
`created_at` datetime DEFAULT NULL, 
`updated_at` datetime DEFAULT NULL, 
PRIMARY KEY (`id`), 
KEY `index_sessions_on_session_id` (`session_id`), 
KEY `index_sessions_on_updated_at` (`updated_at`) 
) ENGINE=InnoDB AUTO_INCREMENT=260176483 DEFAULT CHARSET=utf8 | 


mysql> desc sessions; 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| session_id | varchar(255) | NO | MUL | NULL |    | 
| data  | text   | YES |  | NULL |    | 
| created_at | datetime  | YES |  | NULL |    | 
| updated_at | datetime  | YES | MUL | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 
5 rows in set (0.00 sec) 

Мы видим много wsrep_local_cert_failures на узлах, как это:

SHOW status like '%wsrep%'; 
| wsrep_local_cert_failures | 165419 

Галера отладки отображает множество конфликтов :

THD: 251130, mode: local, state: executing, conflict: cert failure, seqno: 92044718 

Двоичный журнал отключен. Я могу идентифицировать запросы с идентификатором потока в общем файле журнала:

251130 Query SHOW FIELDS FROM sessions 
251130 Query SELECT sessions.* FROM sessions WHERE sessions.session_id = 
'3d1d7f8638dbfd12ee58fa78d4f0998c' LIMIT 1 
251130 Query BEGIN 
251130 Query INSERT INTO sessions (session_id, data, created_at, 
updated_at) VALUES ('3d1d7f8638dbfd12ee58fa78d4f0998c', 
'BAh7BkkiDnJldHVybl90bwY6BkVGIgYv\n', '2016-01-04 10:48:52', '2016-01-04 
10:48:52') 
251130 Query COMMIT 

Приложение генерирует идентификатор сеанса. Есть идеи?
Что не так с идентификаторами сеанса и как разрешать конфликты.

Благодаря

ответ

0

Подмена на хозяевах была причиной. У нас нет ошибок после установки правильного innodb_buffer_pool_size и перезапуска.

Спасибо за помощь.

0

A good description of "local cert failure"

Где делает session_id взялось? Это ужасно длинный и выглядит шестнадцатеричным, поэтому не должно быть utf8 и, вероятно, не varchar (255). UNHEX() и введите BINARY(16), чтобы получить значительную усадку в размере данных.

Действительно ли SELECT пытается узнать, существует ли запись? Может ли другой узел быть INSERTing, что session_id, прежде чем вы получите шанс сделать это? Существует несколько обходных решений, каждый из которых имеет проблемы. Будет ли этот другой узел устанавливать другие столбцы на одни и те же значения?

+0

Session_id происходит от приложения ruby. Может быть, другой узел вставляет один и тот же session_id, но тип session_id - MUL. это не могло вызвать конфликта. – user2683906

+0

'MUL' просто означает, что есть индекс; это не 'УНИКАЛЬНЫЙ'. –

Смежные вопросы