Автоматическое увеличение репликации от мастера к мастеру MariaDB не является последовательным

#mysql #mariadb #high-availability

#mysql #mariadb #высокая доступность

Вопрос:

У меня есть два сервера репликации от мастера к мастеру MariaDB с приведенными ниже настройками:

 server A with 192.168.1.100:
------------------------------
bind-address            = 0.0.0.0
server-id       = 1
log-bin         = "mysql-bin"
binlog-do-db        = wordpress
replicate-do-db     = wordpress
relay-log="mysql-relay-log"
auto-increment-increment = 2
auto-increment-offset = 1
  

и:

 Server B with 192.168.1.200:
---------------------------------
bind-address            = 0.0.0.0
server-id               = 2
log-bin                 = "mysql-bin"
binlog-do-db            = wordpress
replicate-do-db         = wordpress
relay-log="mysql-relay-log"
auto-increment-increment = 2
auto-increment-offset = 2
  

Репликация работает отлично, но у меня проблема с автоматическими приращениями. Как вы видите, они не являются последовательными. Например:

Сервер A увеличивает: 1, 3, 5, 7, 9 и …

Приращения сервера B: 2, 4, 6, 8 и …

Проблема возникает, когда я вставляю 2 записи на сервер A и 1 запись на сервер B, общий первичный ключ таблицы будет выглядеть следующим образом: ID: 1, 3, 4

Как вы видите, номер два отсутствует, потому что я вставил две записи на сервере A. Но мне нужно автоматическое увеличение для генерации последовательных номеров, поскольку мы используем их в качестве номеров наших счетов.

Я знаю, что это внутренний механизм для баз данных MariaDB и MySQL, позволяющий избежать дублирования ключей. но я просто хотел узнать, существует ли альтернативное решение HA для последовательной репликации индекса.

Спасибо

Комментарии:

1. Дублирование dba.stackexchange.com/questions/275681 /…

Ответ №1:

Для активной репликации master-master последовательность будет невозможна. Позвольте мне объяснить, если я могу

  • Допустим, мы вставили 2 строки на сервер 1 (нечетные индексы) и сгенерировали индексы 1 и 3.
  • То же самое было реплицировано на сервер 2.
  • после этого одна вставка запускается на сервер 2, и сервер найдет следующее четное значение, которое будет равно 4.

Вы можете использовать настройку master slave вместо master-master, если у вас нет огромных записей. Для решения HA вы можете использовать orchestrator, который помогает обеспечить автоматический переход на другой ресурс, а для балансировки нагрузки запросов используйте прокси SQL. Итак, ниже будет приведена настройка для полного HA и автоматического переключения на другой ресурс

2 узла MySQL

1 proxysql

1 оркестратор

Комментарии:

1. @sajadkamali — Каковы реальные требования? Зависимость от чего-либо, кроме уникальности, является глупостью.

2. Рик Джеймс, мы используем идентификаторы в качестве номеров наших счетов в наших финансовых системах, и номера счетов должны быть последовательными из-за налогового законодательства в нашей стране

3. Для этого требования вы можете сгенерировать номер счета с помощью кода всегда с добавлением 1 в предыдущие сохраненные значения, для которых вы можете добавить уникальное ограничение и сохранить один столбец id в качестве первичного ключа