Spec-Zone.ru › MySQL Shell 8.4

8.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. Вы можете изменять эти режимы онлайн с помощью MySQL Shell.

Следование за первичным кластером

В этом режиме MySQL Router направляет трафик приложения, как записи, так и чтения, в кластер в развертывании InnoDB ClusterSet, который в настоящее время является первичным кластером. Этот режим является по умолчанию.

Целевой кластер с именем

В этом режиме MySQL Router направляет трафик приложения в указанный вами кластер InnoDB. Это может быть первичный кластер в развертывании 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. Необходимо указать имя пользователя и пароль для обеих этих учётных записей во время операции инициализации. Дополнительную информацию см. в Разделе 8.3 «Учётные записи пользователей для InnoDB ClusterSet».

Важно

Если вы используете существующий InnoDB Cluster в качестве первичного кластера в своём развертывании InnoDB ClusterSet и уже инициализировали MySQL Router для этого кластера, следуйте соответствующим частям этого процесса, чтобы снова инициализировать его с помощью варианта --force для InnoDB ClusterSet, затем остановите и перезапустите MySQL Router. Настройки в файле статической конфигурации экземпляра MySQL Router необходимо обновить для InnoDB ClusterSet.

Чтобы интегрировать MySQL Router с развертыванием InnoDB ClusterSet, следуйте этому процессу:

  1. Если вы еще этого не сделали, установите экземпляры MySQL Router соответствующим образом для вашей топологии. Рекомендуемая развертывание MySQL Router — на том же хосте, что и клиентское приложение. При использовании развертывания в песочнице все работает на одном хосте, поэтому вы развертываете MySQL Router на том же хосте. При использовании производственного развертывания мы рекомендуем развернуть один экземпляр MySQL Router на каждой машине, используемой для размещения одного из ваших клиентских приложений. Также возможно развернуть MySQL Router на общей машине, через которую подключаются ваши экземпляры приложений. Инструкции см. в .

  2. Подключитесь к любому активному экземпляру сервера-члена в развертывании 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>
    

    В этом примере:

    • admin2@127.0.0.1:3310 — строка подключения в формате URI для любого экземпляра сервера-члена, который онлайн в кластере.

      Строка подключения в формате URI состоит из следующих элементов:

    • admin2 — имя пользователя для учетной записи администратора InnoDB Cluster.

    • 127.0.0.1:3310 — хост и порт для экземпляра сервера-члена, как отображается командой cluster.status().

    • Возвращенный объект ClusterSet присваивается переменной myclusterset.

  3. Проверьте, что развертывание InnoDB ClusterSet работает нормально, выполнив clusterSet.status() в MySQL Shell, подключившись к любому серверу-члену в кластере. Например:

    mysql-js> myclusterset.status({extended: 1})
    

    Выберите расширенный вывод, чтобы увидеть подробный статус кластеров в топологии InnoDB ClusterSet. Это даст вам хост и порт для каждого сервера-члена, так что вы можете выбрать один для начальной настройки MySQL Router. Подробнее см. Раздел 8.7, «Статус и топология InnoDB ClusterSet».

  4. Для каждого экземпляра 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' --force
    Please 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
    
    

    В этом примере:

    • icadmin@127.0.0.1:3310 — строка подключения в формате URI для любого экземпляра сервера-члена, который онлайн в развертывании InnoDB ClusterSet. Экземпляр может быть в основном кластере или в кластере реплик. Если экземпляр не является основным сервером в основном кластере, InnoDB ClusterSet будет перенаправлять транзакцию на этот сервер, при условии, что развертывание InnoDB ClusterSet работает нормально.

      Строка подключения в формате URI состоит из следующих элементов:

    • icadmin — имя пользователя для учетной записи администратора InnoDB Cluster, которая была создана с помощью команды cluster.setupAdminAccount() в основном кластере, а затем реплицирована в кластеры реплик. Операция начальной настройки запросит у вас пароль от учетной записи. Пароль от учетной записи администратора InnoDB Cluster одинаковый на всех экземплярах серверов в развертывании InnoDB ClusterSet.

    • 127.0.0.1:3310 — хост и порт для экземпляра сервера-члена, как отображается командой clusterSet.status().

    • myRouter1 — имя пользователя для учетной записи администратора MySQL Router, которая была создана с помощью команды cluster.setupRouterAccount() в основном кластере. Учетная запись одинаковая на всех экземплярах серверов в развертывании InnoDB ClusterSet. Операция начальной настройки запросит у вас пароль от учетной записи.

    • --name может использоваться для присвоения нестандартного имени экземпляру MySQL Router, чтобы его можно было легко идентифицировать в выводе команд статуса InnoDB ClusterSet.

    • --force требуется, если вы настраиваете MySQL Router повторно для существующего InnoDB Cluster, где он был настроен ранее.

    MySQL Router подключается к экземпляру сервера и извлекает метаданные InnoDB ClusterSet. Процесс такой же, как при настройке MySQL Router для отдельных InnoDB Cluster. Подробнее о процессе см. в Раздел 6.10.3, «Развертывание MySQL Router».

  5. После начальной настройки каждого экземпляра MySQL Router проверьте, что он теперь правильно настроен для развертывания InnoDB ClusterSet, выполнив clusterSet.listRouters() в MySQL Shell, подключившись к любому серверу-члену в InnoDB ClusterSet. Команда возвращает подробности обо всех зарегистрированных экземплярах MySQL Router или указанного экземпляра роутера. Например:

    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.

  6. Чтобы увидеть параметры маршрутизации, установленные для каждого экземпляра MySQL Router, и глобальную политику для развертывания InnoDB ClusterSet, выполните clusterSet.routingOptions() в MySQL Shell, подключившись к любому серверу-члену в развертывании InnoDB ClusterSet. Например:

    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().

  7. Если вы хотите изменить глобальную политику маршрутизации или политику маршрутизации для отдельного экземпляра MySQL Router, выполните clusterSet.setRoutingOption() в MySQL Shell, подключившись к любому серверу-члену в развертывании InnoDB ClusterSet. Вы можете установить только один параметр маршрутизации за раз. Экземпляру MySQL Router требуется несколько секунд, чтобы получить изменения в политике маршрутизации.

    Например, эта команда, выпущенная для InnoDB ClusterSet myclusterset, изменяет целевой кластер для экземпляра MySQL Router на кластер clustertwo:

    mysql-js> myclusterset.setRoutingOption('mymachine::Rome1', 'target_cluster', 'clustertwo')
    Routing option 'target_cluster' successfully updated in router 'Rome1'.
    

    В этом примере, myclusterset — переменная для объекта ClusterSet, Rome1 — имя экземпляра MySQL Router, а 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'.
    

    Подробнее об доступных вариантах маршрутизации см. в Раздел 6.10.4, «Параметры маршрутизации».

    Чтобы установить глобальную политику маршрутизации, не указывайте экземпляр MySQL Router, только имя политики и значение. Подробнее см. Статус MySQL Router для InnoDB ClusterSet и объяснение доступных вариантов маршрутизации.

  8. Когда вы готовы начать прием подключений, настройте приложения на использование портов, на которых MySQL Router прослушивает трафик для развертывания InnoDB ClusterSet. Затем запустите экземпляры MySQL Router с помощью подходящей оболочки или скрипта на серверах, где установлен MySQL Router. См. .

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-shell-8.4-en/innodb-clusterset-router.html

Spec-Zone.ru

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