2016-01-22 53 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 

禁用二進制日誌記錄。我可以使用通用日誌文件中的線程ID來標識查詢:

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 

應用程序生成會話標識。任何想法?
會話ID有什麼問題以及如何解決衝突。

感謝

回答

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'僅僅意味着有一個索引;它不是'獨特'。 –