9.6 Интеграция MySQL Router с InnoDB ClusterSet
MySQL Router маршрутизирует трафик клиентского приложения к соответствующим кластерам в развертывании InnoDB ClusterSet. Вы можете задать глобальную политику для экземпляров MySQL Router, используемых с развертыванием InnoDB ClusterSet, и переопределить её настройками для отдельных экземпляров MySQL Router.
При запуске экземпляра MySQL Router для развертывания InnoDB ClusterSet он получает полную топологию ClusterSet и может соответствующим образом управлять трафиком записи и чтения. Если происходит контролируемое переключение или аварийное отключение, экземпляры MySQL Router, подключенные к InnoDB ClusterSet, осведомлены об этом и направляют трафик на новый основной кластер, за исключением тех экземпляров, которые вы настроите на отправку трафика в конкретный кластер. Если кластер становится недействительным, экземпляры MySQL Router прекращают трафик чтения и записи в него, за исключением тех экземпляров, которые вы настроили на продолжение отправки трафика чтения в этой ситуации.
Для каждого экземпляра MySQL Router, используемого с InnoDB ClusterSet, вы можете настроить его на следование за основным кластером или подключение только к определённому целевому InnoDB Cluster. Вы можете переключаться между этими режимами онлайн с помощью MySQL Shell.
- Следовать за основным
В этом режиме MySQL Router направляет трафик приложения, как записи, так и чтения, в кластер в развертывании InnoDB ClusterSet, который в настоящее время является основным кластером. Этот режим является стандартным.
- Целевой кластер с именем
В этом режиме MySQL Router направляет трафик приложения в указанный вами InnoDB Cluster. Это может быть основной кластер в развертывании InnoDB ClusterSet или кластер реплики. Если целевой кластер в настоящее время является основным кластером, MySQL Router открывает порт записи, и приложения могут записывать в экземпляр. Если целевой кластер в настоящее время является кластером чтения-только реплики, MySQL Router разрешает только трафик чтения и запрещает трафик записи. Если это состояние изменится из-за переключения или отказоустойчивости к целевому кластеру или от него, MySQL Router соответствующим образом изменит разрешённые типы запросов. Этот режим полезен, если приложение выполняет только запросы чтения, которые могут быть выполнены на кластере реплики, и вы хотите сохранить этот трафик, направленный в локальный кластер.
Вы также можете настроить MySQL Router на разрешение или запрет трафика чтения для кластера, который был помечен как INVALIDATED. Кластер в этом состоянии не функционирует в рамках развертывания InnoDB ClusterSet и не может принимать записи. Хотя у кластера нет, обязательно технических проблем, его данные устаревают. По умолчанию MySQL Router запрещает чтение и запись в недействительный кластер (настройка drop_all), но вы можете разрешить чтение (настройка accept_ro).
Для запуска MySQL Router для InnoDB ClusterSet необходимо использовать учётную запись администратора InnoDB Cluster или учётную запись конфигурации сервера InnoDB Cluster, которая также имеет необходимые разрешения. Затем MySQL Router использует учётную запись администратора MySQL Router для подключения к экземплярам в развертывании InnoDB ClusterSet. Вам необходимо указать имя пользователя и пароль для обеих учётных записей во время операции запуска. Более подробную информацию см. в разделе 9.3 «Учётные записи пользователей для InnoDB ClusterSet».
Если вы используете существующий InnoDB Cluster в качестве основного кластера в своём развертывании InnoDB ClusterSet и уже запустили MySQL Router для этого кластера, выполните соответствующие части этого процесса, чтобы снова запустить его с помощью параметра --force для InnoDB ClusterSet, а затем остановите и перезапустите MySQL Router. Настройки в файле статической конфигурации экземпляра MySQL Router должны быть обновлены для InnoDB ClusterSet.
Для интеграции MySQL Router с развертыванием InnoDB ClusterSet выполните следующие действия:
Если вы еще этого не сделали, установите экземпляры MySQL Router, соответствующие вашей топологии. Рекомендуемая развертка MySQL Router — на том же хосте, что и клиентское приложение. При использовании развертывания в песочнице все работает на одном хосте, поэтому вы развертываете MySQL Router на том же хосте. При использовании производственной развертки мы рекомендуем развернуть по одному экземпляру MySQL Router на каждую машину, используемую для размещения одного из ваших клиентских приложений. Также возможно развернуть MySQL Router на общей машине, через которую подключаются ваши экземпляры приложений. Инструкции см. в Установка MySQL Router.
-
Подключитесь к любому активному экземпляру сервера в развертывании InnoDB ClusterSet, используя учетную запись администратора InnoDB Cluster. Вы также можете использовать учетную запись конфигурации сервера InnoDB Cluster, у которой также есть необходимые разрешения. Получите объект
ClusterSetс помощью командыdba.getClusterSet()или. Важно получить объектcluster.getClusterSet()ClusterSet, когда вы подключены к экземпляру сервера с помощью соответствующей учетной записи. По умолчанию учетная запись пользователя, хранящаяся в объекте, используется для некоторых операций, независимо от учетной записи, которую вы указываете при подключении. Например:mysql-js>
\connect admin2@127.0.0.1:3310... mysql-js>myclusterset = dba.getClusterSet()<ClusterSet:testclusterset>В этом примере:
-
— строка подключения в формате URI для любого экземпляра сервера, онлайн в кластере.admin2@127.0.0.1:3310Строка подключения в формате URI состоит из следующих элементов:
— имя пользователя для учетной записи администратора InnoDB Cluster.admin2— хост и порт экземпляра сервера, отображаемые командой127.0.0.1:3310.cluster.status()Возвращаемый объект
ClusterSetприсваивается переменнойmyclusterset.
-
-
Проверьте работоспособность развертывания InnoDB ClusterSet, выполнив команду
в MySQL Shell, подключившись к любому серверу-члену кластера. Например:clusterSet.status()mysql-js>
myclusterset.status({extended: 1})Выберите расширенный вывод, чтобы увидеть подробный статус кластеров в топологии InnoDB ClusterSet. Это предоставит вам хост и порт для каждого сервера-члена, так что вы сможете выбрать один для начальной настройки MySQL Router. Более подробную информацию см. в разделе 9.7 «Статус и топология InnoDB ClusterSet».
-
Для каждого экземпляра MySQL Router выполните команду mysqlrouter в соответствующей оболочке на экземпляре, где установлен MySQL Router, для начальной настройки MySQL Router относительно InnoDB ClusterSet. В этом примере используется параметр
force, поскольку MySQL Router ранее был настроен относительно первичного InnoDB Cluster:$>
mysqlrouter --bootstrap icadmin@127.0.0.1:3310 --account=myRouter1 --name='Rome1' --forcePlease enter MySQL password for icadmin: # Bootstrapping system MySQL Router instance... Please enter MySQL password for myRouter1: - Creating account(s) (only those that are needed, if any) - Verifying account (using it to run SQL queries that would be run by Router) - Storing account in keyring - Creating configuration C:/Program Files/MySQL/MySQL Router 8.0/mysqlrouter.conf # MySQL Router configured for the ClusterSet 'testclusterset' After this MySQL Router has been started with the generated configuration > net start mysqlrouter or > C:\Program Files\MySQL\MySQL Router 8.0\bin\mysqlrouter.exe -c C:/Program Files/MySQL/MySQL Router 8.0/mysqlrouter.conf ClusterSet 'testclusterset' can be reached by connecting to: ## MySQL Classic protocol - Read/Write Connections: localhost:6446 - Read/Only Connections: localhost:6447 ## MySQL X protocol - Read/Write Connections: localhost:6448 - Read/Only Connections: localhost:6449В этом примере:
-
— строка подключения в формате URI для любого экземпляра сервера-члена, онлайн в развертывании InnoDB ClusterSet. Экземпляр может быть в первичном кластере или в кластере реплик. Если экземпляр не является первичным сервером в первичном кластере, InnoDB ClusterSet перенаправит транзакцию на этот сервер, при условии, что развертывание InnoDB ClusterSet работает корректно.icadmin@127.0.0.1:3310Строка подключения в формате URI состоит из следующих элементов:
— имя пользователя для учетной записи администратора InnoDB Cluster, которая была создана с помощью командыicadminв первичном кластере, а затем реплицирована в кластеры реплик. При операции начальной настройки от вас запросят пароль для учетной записи. Пароль для учетной записи администратора InnoDB Cluster одинаков на всех экземплярах серверов в развертывании InnoDB ClusterSet.cluster.setupAdminAccount()— хост и порт экземпляра сервера-члена, отображаемые командой127.0.0.1:3310.clusterSet.status()— имя пользователя для учетной записи администратора MySQL Router, которая была создана с помощью командыmyRouter1в первичном кластере. Учетная запись одинакова на всех экземплярах серверов в развертывании InnoDB ClusterSet. При операции начальной настройки от вас запросят пароль для учетной записи.cluster.setupRouterAccount()--nameможет использоваться для присвоения нестандартного имени экземпляру MySQL Router, чтобы его легко было идентифицировать в выводе команд статуса InnoDB ClusterSet.--forceтребуется, если вы настраиваете MySQL Router повторно для существующего InnoDB Cluster, где он ранее был настроен.
MySQL Router подключается к экземпляру сервера и извлекает метаданные InnoDB ClusterSet. Процесс аналогичен процессу начальной настройки MySQL Router относительно отдельного InnoDB Cluster. Более подробную информацию о процессе см. в разделе 7.3 «Развертывание MySQL Router».
-
-
После начальной настройки каждого экземпляра MySQL Router проверьте, что он теперь правильно настроен относительно развертывания InnoDB ClusterSet, выполнив команду
в MySQL Shell, подключившись к любому серверу-члену в InnoDB ClusterSet. Команда возвращает детали всех зарегистрированных экземпляров MySQL Router или указанного экземпляра маршрутизатора. Например:clusterSet.listRouters()mysql-js>
myclusterset.listRouters(){ "domainName": "testclusterset", "routers": { "mymachine::Rome1": { "hostname": "mymachine", "lastCheckIn": 2021-10-15 11:58:37, "roPort": 6447, "roXPort": 6449, "rwPort": 6446, "rwXPort": 6448, "targetCluster": "primary", "version": "8.0.27" }, "mymachine2::Rome2": { "hostname": "mymachine2", "lastCheckIn": 2021-10-15 11:58:37, "roPort": 6447, "roXPort": 6449, "rwPort": 6446, "rwXPort": 6448, "targetCluster": "primary", "version": "8.0.27" } } }Дополнительную информацию см. в разделе «Статус MySQL Router для InnoDB ClusterSet».
-
Чтобы увидеть параметры маршрутизации, установленные для каждого экземпляра MySQL Router, и глобальную политику для развертывания InnoDB ClusterSet, выполните команду
в MySQL Shell, подключившись к любому серверу-члену в развертывании InnoDB ClusterSet. Например:clusterSet.routingOptions()mysql-js>
myclusterset.routingOptions(){ "domainName": "testclusterset", "global": { "invalidated_cluster_policy": "drop_all", "target_cluster": "primary" }, "routers": { "mymachine::Rome1": { "target_cluster": "primary" "invalidated_cluster_policy": "accept_ro" }, "mymachine2::Rome2": {} } }По умолчанию экземпляр MySQL Router отправляет трафик в первичный кластер и запрещает трафик чтения и записи в кластер, помеченный как
INVALIDATED. Дополнительную информацию и объяснение вывода командысм. в разделе «Статус MySQL Router для InnoDB ClusterSet».clusterSet.routingOptions() -
Если вы хотите изменить глобальную политику маршрутизации или политику маршрутизации для отдельного экземпляра MySQL Router, выполните команду
в MySQL Shell, подключившись к любому серверу-члену в развертывании InnoDB ClusterSet. Вы можете задать только один параметр маршрутизации за раз. Экземпляру MySQL Router требуется несколько секунд, чтобы принять изменения в политике маршрутизации.clusterSet.setRoutingOption()Например, эта команда, выданная для InnoDB ClusterSet
myclusterset, изменяет целевой кластер для экземпляра MySQL Router на кластерclustertwo:mysql-js>
myclusterset.setRoutingOption('mymachine::Rome1', 'target_cluster', 'clustertwo')Routing option 'target_cluster' successfully updated in router 'Rome1'.В этом примере
— переменная для объектаmyclustersetClusterSet,— имя экземпляра MySQL Router, аRome1— имя конкретного целевого кластера.clustertwoЧтобы установить политику маршрутизации для экземпляра обратно на следование первичному, выполните эту команду:
mysql-js>
myclusterset.setRoutingOption('mymachine::Rome1', 'target_cluster', 'primary')Routing option 'target_cluster' successfully updated in router 'Rome1'.Чтобы очистить политику маршрутизации для экземпляра, используйте команду
для установки соответствующей политики на значениеclusterSet.setRoutingOption()null. Например:mysql-js>
myclusterset.setRoutingOption('mymachine::Rome1', 'target_cluster', null)Routing option 'target_cluster' successfully updated in router 'Rome1'.Более подробную информацию об имеющихся параметрах маршрутизации см. в разделе 7.4 «Параметры маршрутизации».
Чтобы установить глобальную политику маршрутизации, не указывайте экземпляр MySQL Router, а только имя политики и значение. Дополнительную информацию и объяснение доступных параметров маршрутизации см. в разделе «Статус MySQL Router для InnoDB ClusterSet».
Когда вы готовы начать прием подключений, настройте приложения для использования портов, на которых MySQL Router прослушивает трафик для развертывания InnoDB ClusterSet. Затем запустите экземпляры MySQL Router с помощью соответствующей оболочки или скрипта на серверах, где установлен MySQL Router. См. Запуск MySQL Router.
© 2025 Oracle
Licensed under the GPLv2 License.