1

6 ノードの galera クラスターと次の表があります。

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

galera のデバッグでは、多くの競合が表示されます。

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 を生成します。何か案が?
セッション ID の問題点と競合の解決方法。

ありがとう

4

2 に答える 2

0

「ローカル証明書の失敗」の適切な説明

session_id はどこから来たのですか? これは非常に長く、16 進数に見えるため、utf8 やおそらく varchar(255) であってはなりません。 UNHEX()データサイズを大幅にBINARY(16)縮小します。

SELECT、レコードが既に存在するかどうかを確認しようとしていますか? あなたがそれを行う機会を得る前に、別のノードがINSERTingそれである可能性はありますか? session_id複数の回避策があり、それぞれに問題があります。その他のノードは、他の列を同じ値に設定しますか?

于 2016-01-23T20:02:18.080 に答える
0

ホストのスワッピングが理由でした。正しい innodb_buffer_pool_size を設定して再起動した後、エラーは発生しません。

助けてくれてありがとう。

于 2016-01-28T09:58:57.457 に答える