6.10.6 Тестирование высокой доступности кластера InnoDB
Для проверки работоспособности высокой доступности кластера InnoDB, имитируйте непредвиденную остановку, убив экземпляр. Кластер обнаружит, что экземпляр покинул кластер, и переконфигурирует себя. Способ переконфигурации кластера зависит от того, используете ли вы кластер с одним или несколькими первичными серверами, и от роли экземпляра в кластере.
В режиме с одним первичным сервером:
Если текущий первичный сервер покидает кластер, один из вторичных экземпляров избирается новым первичным сервером, при этом экземпляры ранжируются по наименьшему значению. MySQL Router перенаправляет соединения чтения-записи на вновь избранный первичный сервер.
Если текущий вторичный сервер покидает кластер, MySQL Router прекращает перенаправление соединений только для чтения на этот экземпляр.
Дополнительную информацию см. в ...
В режиме с несколькими первичными серверами:
Если текущий экземпляр «чтения/записи» покидает кластер, MySQL Router перенаправляет соединения чтения-записи на другие первичные серверы. Если экземпляр, который покинул кластер, был последним первичным сервером в кластере, то кластер полностью недоступен, и вы не можете подключиться ни к одному порту MySQL Router.
Дополнительную информацию см. в ...
Существует несколько способов имитации выхода экземпляра из кластера, например, вы можете принудительно остановить сервер MySQL на экземпляре или использовать AdminAPI dba.killSandboxInstance() при тестировании среды разработки. В этом примере используется однопервичный кластер среды разработки с тремя экземплярами сервера, и экземпляр, прослушивающий порт 3310, является текущим первичным сервером. Экземпляр неожиданно покидает кластер, имитируется killing экземпляра:
Например, выполнив следующую команду JavaScript:
mysql-js> dba.killSandboxInstance(3310)
Или, выполнив следующую команду Python:
mysql-py> dba.kill_sandbox_instance(3310)
Кластер обнаруживает изменения и автоматически выбирает нового первичного сервера.
Предполагая, что ваша сессия подключена к порту 6446, стандартному порту для классического протокола MySQL для чтения-записи, MySQL Router должен обнаружить изменение топологии кластера и перенаправить вашу сессию на вновь избранный первичный сервер. Для проверки этого переключитесь на SQL-режим в MySQL Shell, используя команду \sql, и выберите переменную экземпляра, чтобы проверить, на какой экземпляр была перенаправлена ваша сессия.
Первое утверждение завершается ошибкой, поскольку соединение с исходным первичным сервером было потеряно, что означает закрытие текущей сессии. MySQL Shell автоматически переподключается, и при повторном выполнении команды подтверждается новый порт.
mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> SELECT @@port;
ERROR: 2013 (HY000): Lost connection to MySQL server during query
The global session got disconnected.
Attempting to reconnect to 'root@localhost:6446'...
The global session was successfully reconnected.
mysql-sql> SELECT @@port;
+--------+
| @@port |
+--------+
| 3330 |
+--------+
1 row in set (0.00 sec)
В этом примере экземпляр на порту 3330 был выбран новым первичным сервером. Этот выбор демонстрирует, что кластер InnoDB предоставляет автоматическое переключение, MySQL Router автоматически переподключил нас к новому первичному экземпляру, и что мы имеем высокую доступность.
© 2025 Oracle
Licensed under the GPLv2 License.