Spec-Zone.ru › MySQL Shell 9.2

8.11.3 Изменение или удаление реплик чтения

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

  • Удаление реплик чтения

  • Восстановление реплики чтения в кластере

  • Маршрутизация реплик чтения

Удаление реплик чтения

Для удаления реплики чтения из кластера используйте Cluster.removeInstance(). Эта операция выполняет следующие действия:

  • Удаляет пользователя репликации из кластера.

  • Удаляет реплику чтения из метаданных кластера.

  • Останавливает канал репликации и сбрасывает конфигурацию реплики чтения до значений по умолчанию.

Примечание

Если Cluster.removeInstance() выполняется на узле кластера, который также является источником для реплики чтения, запускается процесс переключения и реплика чтения пытается подключиться к другому источнику. Если другой источник недоступен, канал репликации останавливается. Удаленный узел кластера также удаляется из списка источников реплики чтения.

Следующий пример удаляет реплику чтения host4:4110 из кластера:

Cluster.removeInstance("host4:4110")
Removing Read-Replica 'ipaddress:4110' from the Cluster 'myCluster'.

* Waiting for the Read-Replica to synchronize with the Cluster...
** Transactions replicated  ############################################################  100%

* Stopping and deleting the Read-Replica managed replication channel...

Read-Replica 'ipaddress:4110' successfully removed from the Cluster 'myCluster'.
      

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

Cluster.removeInstance("host4:4110", {timeout:30})
      

Это определяет таймаут в 30 секунд для процесса синхронизации. Если процесс синхронизации не завершается в течение 30 секунд, операция removeInstance отменяется, и реплика чтения не удаляется из кластера.

Значение таймаута по умолчанию равно 0 (ноль), или таймаут отсутствует.

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

Восстановление реплики чтения в кластере

Для восстановления реплики чтения в кластере используйте Cluster.rejoinInstance().

Cluster.rejoinInstance(instance [, options])
      

Для восстановления реплики чтения в кластере экземпляр должен соответствовать следующим требованиям:

  • Целевой экземпляр должен быть членом кластера.

  • Целевой экземпляр должен соответствовать предварительным условиям для реплики чтения. См. Раздел 8.11.1, «Предварительные условия».

  • Множество GTID целевого экземпляра не должно отличаться от множества GTID кластера. Это не относится, если recoveryMethod: clone.

Примечание

Если все настроенные источники реплики чтения недоступны или больше не являются частью кластера, операция rejoinInstance() завершится неудачей. В этом случае вы должны обновить источники репликации реплики чтения, используя Cluster.setInstanceOption().

Этот процесс аналогичен восстановлению узла кластера в кластере, за исключением следующих моментов:

  • Значение recoveryMethod clone и опция cloneDonor доступны только для реплик чтения.

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

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

Cluster.rejoinInstance('host4:4110')
      

При восстановлении реплики чтения транзакции синхронизируются с первичным узлом. Вы можете определить таймаут, в секундах, для процесса репликации транзакций. Следующий пример устанавливает таймаут в 60 секунд для процесса синхронизации транзакций:

Cluster.rejoinInstance('host4:4110', {timeout: 60})
      

Это определяет таймаут в 60 секунд для процесса синхронизации. Если процесс синхронизации не завершается в течение 60 секунд, операция rejoinInstance отменяется, и реплика чтения не восстанавливается в кластере.

Значение таймаута по умолчанию равно 0 (ноль), или таймаут отсутствует.

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

Примечание

Невозможно использовать rejoinInstance для восстановления реплики чтения, которая была удалена из кластера с помощью removeInstance. removeInstance удаляет реплику чтения из кластера и удаляет метаданные реплики чтения.

Для восстановления такого экземпляра необходимо использовать addReplicaInstance.

Маршрутизация реплик чтения

Политика маршрутизации по умолчанию для кластера направляет весь трафик только для чтения на вторичные узлы. Cluster.setRoutingOption() позволяет установить политику маршрутизации на одно из следующих значений с помощью опции read_only_targets:

  • all: все реплики чтения и вторичные узлы кластера используются для трафика только для чтения.

  • read_replicas: только реплики чтения используются для трафика только для чтения.

  • secondaries: только вторичные узлы кластера используются для трафика только для чтения.

Следующий пример устанавливает политику маршрутизации только для чтения для маршрутизатора с именем machine1::router1 на реплики чтения:

Cluster.setRoutingOption("machine1::router1", "read_only_targets", "read_replicas")
      

Для просмотра текущей политики маршрутизации маршрутизатора с именем machine1::router1 выполните следующее:

Cluster.routingOptions("machine1::router1")
      

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

Spec-Zone.ru

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