Spec-Zone.ru › MySQL Shell 9.2

8.11.2 Создание реплик чтения

Создайте реплики чтения, используя addReplicaInstance():

Cluster.addReplicaInstance(instance, [options])
    
  • Примеры

  • Реплика чтения по умолчанию

  • Определение источника репликации для реплики чтения

  • Определение метода восстановления для реплик чтения

  • Аутентификация на основе сертификатов

Примеры

В примерах в этом и последующих разделах предполагается простой кластер из трёх экземпляров: один первичный и два вторичных.

  • host1:4100: primary.

  • host2:4101: secondary.

  • host3:4102: secondary.

Реплика чтения по умолчанию

Этот раздел описывает добавление реплики чтения в кластер. По умолчанию реплика чтения копирует данные с первичного экземпляра.

В следующем примере добавляется экземпляр host4:4110 в кластер с меткой RReplica1:

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1'})
      
Примечание

Метки должны быть уникальными в пределах кластера и могут содержать только символы латинского алфавита, цифры, _ (подчеркивание), . (точка), - (дефис) или : (двоеточие).

Определение источника репликации для реплики чтения

Параметр replicationSources команды addReplicaInstance позволяет указать один или несколько предпочитаемых источников репликации для реплики чтения. Этот параметр принимает следующие значения:

  • primary: Определяет первичный экземпляр кластера как источник репликации. В случае переключения первичного экземпляра реплика чтения ожидает, пока будет выбран новый первичный экземпляр, после чего возобновляет репликацию с новым первичным источником.

  • secondary: Определяет один из вторичных экземпляров кластера как источник репликации. Выбор осуществляется механизмом Group Replication. Источник всегда будет вторичным членом кластера, за исключением случая, когда кластер состоит из одного члена. В этом случае реплика чтения использует единственный другой член в качестве источника.

  • hostname:port: Определяет конкретного члена кластера (первичный или вторичный) как источник репликации.

  • Список хостов через запятую: Определяет взвешенный список членов кластера (первичный или вторичный) в качестве потенциальных источников репликации. Первый экземпляр в списке имеет наивысший приоритет; когда канал репликации реплики чтения активирован, это первая попытка подключения. Другие члены списка подключаются в случае переключения или неудачи попытки подключения.

Следующий пример определяет вторичный экземпляр host2:4101 в качестве источника:

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101']})
      

Также возможно указать несколько источников репликации, предоставив список хостов через запятую, используя формат host:port. Список взвешен, при этом первый элемент имеет наибольший вес. Это позволяет определить список резервных источников. Если первый указанный источник недоступен, реплика чтения пытается восстановить репликацию со вторым указанным источником и так далее.

Следующий пример определяет вторичный экземпляр host2:4101 как первый источник и host3:4102 как следующий:

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101','host3:4102']]})
      

Вы можете использовать тот же параметр для определения только первичных или только вторичных источников, не определяя отдельных экземпляров. Например:

Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: 'secondary']})
      

определяет источники репликации только как вторичные. Для определения источника репликации только как первичный, используйте replicationSources: 'primary'.

По умолчанию список источников управляется MySQL Group Replication, который по умолчанию использует первичные источники.

Вы можете протестировать эту операцию, используя параметр dryRun. Включив этот параметр, установив его значение в true, выполняется команда, но изменения не вносятся. Это позволяет протестировать ваши изменения.

Примечание

Также можно установить replicationSources и label реплики чтения с помощью метода cluster.setInstanceOption().

Если целевой экземпляр является репликой чтения, метод cluster.setInstanceOption() принимает только параметры tags (зарезервированные теги, только), replicationSources и label.

Определение метода восстановления для реплик чтения

recoveryMethod определяет, как данные реплики чтения приобретаются во время развертывания.

  • clone: Используется для полной замены состояния целевого экземпляра полным снимком другого члена кластера перед началом распределенного восстановления. Требуется MySQL 8.0.17 или более поздняя версия.

    Если cloneDonor определён, указанный экземпляр используется как источник.

    Если replicationSources установлено в значение primary или secondary, первичный экземпляр кластера используется как источник.

    Если replicationSources содержит один или несколько именованных членов кластера, первый из списка используется как источник, если доступен. Если первый недоступен, используется второй и так далее.

  • incremental: Использует распределенное восстановление состояния для применения недостающих транзакций, скопированных с другого члена кластера. Клонирование отключено.

  • auto: Значение по умолчанию. Group Replication выбирает, будет ли создан полный снимок, основываясь на поддержке целевого сервера и заданном значении. Если невозможно безопасно определить безопасный способ продолжения, отображается запрос. Если взаимодействие отключено, операция отменяется.

В дополнение к параметру recoveryMethod: clone, addReplicaInstance предоставляет параметр cloneDonor, позволяющий определить конкретный экземпляр, который нужно клонировать в новую реплику чтения. Если cloneDonor не определён, но выбран метод восстановления clone, либо явно указав clone, либо если auto выбрал клонирование как лучший метод предоставления данных, кластер выбирает лучший экземпляр для клонирования. Используемый процесс идентичен процессу, используемому Cluster.addInstance(). Подробнее см. Раздел 8.4.6.1, «Работа с кластером, использующим MySQL Clone».

В следующем примере добавляется новая реплика чтения host5:4113 с меткой RReplica5, используя вторичный экземпляр host2:4101 в качестве источника данных. Данные host2:4101 клонируются в новую реплику чтения.

JS> cluster.addReplicaInstance('host5:4113',{label: 'RReplica5', recoveryMethod: "clone", cloneDonor: "host2:4101"})
      

Успешная команда возвращает информацию, похожую на следующую:

Setting up 'host5:4113' as a Read Replica of Cluster 'myCluster'.

Validating instance configuration at host5:4113...

This instance reports its own address as host5:4113

Instance configuration is suitable.
* Checking transaction state of the instance...


Clone based recovery selected through the recoveryMethod option

* Waiting for the donor to synchronize with PRIMARY...
** Transactions replicated  ############################################################  100%


Monitoring Clone based state recovery of the new member. Press ^C to abort the operation.
Clone based state recovery is now in progress.

NOTE: A server restart is expected to happen as part of the clone process. If the
server does not support the RESTART command or does not come back after a
while, you may need to manually start it back.

* Waiting for clone to finish...
NOTE: host5:4113 is being cloned from host2:4101
** Stage DROP DATA: Completed
** Clone Transfer
    FILE COPY  ############################################################  100%  Completed
    PAGE COPY  ############################################################  100%  Completed
    REDO COPY  ============================================================    0%  In Progress

NOTE: host5:4113 is shutting down...

* Waiting for server restart... ready
* host5:4113 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 8.64 GB transferred in 11 sec (785.30 MB/s)

* Configuring Read-Replica managed replication channel...
** Changing replication source of host5:4113 to host1:4100

* Waiting for Read-Replica 'host5:4113' to synchronize with Cluster...
** Transactions replicated  ############################################################  100%


'host5:4113' successfully added as a Read-Replica of Cluster 'myCluster'.
      

Аутентификация на основе сертификатов

Аутентификация на основе сертификатов для реплик чтения определяется следующим образом:

  • Параметр certSubject команды cluster.addReplicaInstance(): определяет субъект сертификата экземпляра, используемый, если значение параметра memberAuthType кластера является CERT_SUBJECT или CERT_SUBJECT_PASSWORD.

  • Значение memberSslMode кластера используется для настройки типа аутентификации канала репликации реплики чтения.

  • Метод выполняет проверку подключения, используя заданный параметр memberSslMode, перед обновлением топологии.

  • Если значение memberAuthType кластера является CERT_SUBJECT или CERT_SUBJECT_PASSWORD, метод проверяет сертификат сервера.

cluster.options() был обновлён, чтобы вернуть certSubject в массиве topology.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-9.2-en/mysql-shell-read-replicas-creating.html

Spec-Zone.ru

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