Spec-Zone.ru › MySQL 8.4

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-8.4-en/group-replication-single-primary-mode.html

Spec-Zone.ru

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