Spec-Zone.ru › MySQL 9.2

20.1.3.1 Режим с одним первичным сервером

  • 20.1.3.1.1 Алгоритм выбора первичного сервера
  • 20.1.3.1.2 Поиск первичного сервера

В режиме с одним первичным сервером (group_replication_single_primary_mode=ON) группа содержит один первичный сервер, настроенный на чтение и запись. Все остальные члены группы настроены на чтение (с super_read_only=ON). Первичный сервер обычно инициализирует всю группу. Все другие серверы, присоединяющиеся к группе, узнают о первичном сервере и автоматически переключаются в режим только для чтения.

В режиме с одним первичным сервером Group Replication гарантирует, что только один сервер производит запись в группу, поэтому, по сравнению с режимом с несколькими первичными серверами, проверка согласованности может быть менее строгой, а операторы DDL не требуют дополнительного внимания. Параметр group_replication_enforce_update_everywhere_checks включает или отключает строгие проверки согласованности для группы. При развертывании в режиме с одним первичным сервером или изменении режима группы на режим с одним первичным сервером эта системная переменная должна быть установлена в значение OFF.

Член, назначенный первичным сервером, может измениться следующим образом:

  • Если существующий первичный сервер покидает группу (добровольно или неожиданно), новый первичный сервер выбирается автоматически.

  • Вы можете назначить конкретного члена новым первичным сервером, используя функцию group_replication_set_as_primary().

  • Если вы используете функцию group_replication_switch_to_single_primary_mode() для изменения группы, работающей в режиме с несколькими первичными серверами, на режим с одним первичным сервером, новый первичный сервер выбирается автоматически или вы можете назначить нового первичного сервера, указав его в функции.

Когда выбирается новый первичный сервер (автоматически или вручную), он автоматически переключается в режим чтения и записи, а другие члены группы остаются вторичными и работают только в режиме чтения. На следующей диаграмме показан этот процесс:

Рисунок 20.4 Выбор нового первичного сервера

Five server instances, S1, S2, S3, S4, and S5, are deployed as an interconnected group. Server S1 is the primary. Write clients are communicating with server S1, and a read client is communicating with server S4. Server S1 then fails, breaking communication with the write clients. Server S2 then takes over as the new primary, and the write clients now communicate with server S2.

Когда выбирается новый первичный сервер, он может иметь накопленные изменения, которые были применены на старом первичном сервере, но еще не применены на новом. В этом случае, до тех пор, пока новый первичный сервер не догонит старый, транзакции чтения/записи могут привести к конфликтам и быть отменены, а транзакции только для чтения — к устаревшим данным. Механизм управления потоком Group Replication минимизирует разницу между быстрыми и медленными членами, а, следовательно, уменьшает вероятность этого, если он активирован и правильно настроен. Более подробную информацию см. в Разделе 20.7.2, «Управление потоком». Вы также можете использовать системную переменную group_replication_consistency для установки уровня согласованности транзакций в группе, чтобы предотвратить эту проблему. Установка этой переменной в значение BEFORE_ON_PRIMARY_FAILOVER (по умолчанию) или любой более высокий уровень согласованности удерживает новые транзакции на только что избранном первичном сервере, пока не будет обработана вся очередь.

Более подробную информацию о согласованности транзакций см. в Разделе 20.5.3, «Гарантии согласованности транзакций». Если управление потоком и гарантии согласованности транзакций не используются для группы, рекомендуется подождать, пока новый первичный сервер применит свой релейный журнал, связанный с репликацией, прежде чем перенаправлять к нему клиентские приложения.

20.1.3.1.1 Алгоритм выбора первичного сервера

Автоматический процесс выбора первичного члена включает в себя проверку каждым членом нового представления группы, упорядочивание потенциальных новых первичных членов и выбор члена, который подходит лучше всего. Каждый член принимает собственное решение локально, следуя алгоритму выбора первичного сервера, используемому в его релизе MySQL Server. Поскольку все члены должны прийти к одному решению, члены адаптируют свой алгоритм выбора первичного сервера, если другие члены группы используют более старые версии MySQL Server, чтобы обеспечить такое же поведение, как у члена с самой низкой версией MySQL Server в группе.

Факторы, учитываемые членами при выборе первичного сервера, упорядочены следующим образом:

  1. Первым фактором является член или члены, использующие самую старую версию MySQL Server. Все члены группы сначала упорядочиваются по номеру патча их релиза.

  2. Если несколько членов используют самую низкую версию MySQL Server, вторым фактором является вес каждого из этих членов, как указано в системной переменной group_replication_member_weight на члене.

    Системная переменная group_replication_member_weight определяет число в диапазоне от 0 до 100. Все члены по умолчанию имеют вес 50, поэтому установите вес ниже этого значения, чтобы снизить их позицию в упорядочении, и выше этого значения, чтобы увеличить ее. Вы можете использовать эту функцию взвешивания, чтобы отдать приоритет использованию лучшего оборудования или гарантировать переход к определенному члену во время запланированного технического обслуживания первичного сервера.

  3. Если несколько членов используют самую низкую версию MySQL Server и несколько из этих членов имеют наибольший вес члена (или взвешивание членов игнорируется), третьим фактором является лексикографический порядок сгенерированных UUID серверов каждого члена, как указано в системной переменной server_uuid. В качестве первичного выбирается член с наименьшим UUID сервера. Этот фактор служит гарантированным и предсказуемым развязывающим условием, чтобы все члены группы пришли к одному решению, если это невозможно определить по важным факторам.

20.1.3.1.2 Поиск первичного сервера

Чтобы узнать, какой сервер в данный момент является первичным при развертывании в режиме с одним первичным сервером, используйте столбец MEMBER_ROLE в таблице performance_schema.replication_group_members. Например:

mysql> SELECT MEMBER_HOST, MEMBER_ROLE FROM performance_schema.replication_group_members;
+-------------------------+-------------+
| MEMBER_HOST             | MEMBER_ROLE |
+-------------------------+-------------+
| remote1.example.com     | PRIMARY     |
| remote2.example.com     | SECONDARY   |
| remote3.example.com     | SECONDARY   |
+-------------------------+-------------+

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/group-replication-single-primary-mode.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API