Повторяющиеся ключи Percona XtraDB Cluster при выходе сервера из ротации
У меня есть три узла Percona XtraDB Cluster (5.5).
Каждую ночь мы выключали MySQL на одном случайно выбранном узле, чтобы сделать резервные копии каталога данных.
Когда наш трафик достаточно занят, это вызывает пару (2-4) предупреждений об ошибках вдоль линий SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '140577' for key 'PRIMARY'
, Конфликт первичного ключа, очевидно, за исключением того, что мы используем auto_increment
столбцы как первичный ключ в этих таблицах. Поскольку каждый узел имеет смещение, назначенное механизмом кластера, это не должно происходить.
Я подозреваю, что удаление узла из кластера приводит к тому, что другие два узла изменяют свои автоинкрементные смещения таким образом, что это может привести к конфликту во время изменения. Я в недоумении, почему это не было бы атомным действием, а также как я мог бы это исправить.
Кто-нибудь сталкивался с этим? Есть ли способ временно заморозить параметры автоинкремента в кластере, чтобы они не перемешивались во время процесса резервного копирования или какого-либо другого решения, о котором я не думаю?
2 ответа
Сверху головы я бы сказал, добавьте slave к миксу и сделайте резервные копии на slave без удаления узла из кластера.
Что происходит, когда вы помещаете узел обратно в него, он не знает, как номера первичного ключа увеличиваются на активных узлах, прежде чем ему удастся получить новую запись, потому что он не будет охлаждаться, пока не догонит другие две реплики. Таким образом, он записывает новую запись и дает ей идентификатор первичного ключа, который уже существует на двух репликах, которые не были удалены. По сути, узел не должен получать записи, пока он не синхронизирован.
Я знаю, что это старый пост, и вы, возможно, уже сделали это, но кому-то, кто видит такое поведение с PXC (Percona XtraDB Cluster), кажется, вы нажали на ошибку https://bugs.launchpad.net/percona-xtradb-cluster/+bug/1366997
Обновите свой PXC до последней версии, в которой вы сейчас находитесь. Например, если вы используете 5.5.19 до последнего обновления 5.5. Если вы используете 5.6.x, обновитесь до самого последнего обновления.
Была эта проблема на производстве.