Глава 1. Общая информация

MySQL Router стандартный блок для высоконадежных (HA) решений. Это упрощает разработку приложений с интеллектуальными связями направления с серверами MySQL для лучшей работы и надежности.

MySQL Router 8 полностью поддерживает MySQL 5.7 и MySQL 8, это заменяет MySQL Router 2.x. Если вы в настоящее время используете 2.0 или 2.1, тогда мы рекомендуем модернизировать вашу установку до MySQL Router 8.

1.1. Направление для кластера MySQL InnoDB

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

См. InnoDB Cluster.

Обзор

Для клиентских приложений, чтобы работать с отказоустойчивостью, они должны знать о топологии кластера InnoDB и знать, какой экзепляр MySQL PRIMARY. В то время как возможно для запросов осуществить эту логику, MySQL Router может обеспечить и обращаться с этой функциональностью для вас.

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

Развертывание Router с кластером MySQL InnoDB

Модель рекомендуемого развертывания для MySQL Router с кластером InnoDB, это Router на том же самом хосте, где приложение.

Шаги для развертывания MySQL Router с кластером InnoDB после формирования кластера:

  1. Установить MySQL Router.

  2. Настроить и протестировать InnoDB.

    Самонастройка автоматически формирует MySQL Router для существующего кдастера InnoDB, применяя --bootstrap и другие параметры командной строки. Во время автонастройки роутер соединяется с кластером, получает свои метаданные и формируется для использования. Самонастройка опциональна.

    См. главу 3.

  3. Настройте MySQL Router для автоматического запуска.

    Настройте свою систему, чтобы автоматически начать MySQL Router, когда хост перезагружается, процесс подобен тому, как сервер MySQL настраивается на автозапуск. Для дополнительных деталей посмотрите главу 5.1 .

Например, после создания кластера MySQL InnoDB, вы могли бы настроить MySQL Router:

shell> mysqlrouter --bootstrap localhost:3310 --directory /opt/myrouter --user snoopy

Этот пример привязывает MySQL Router к существующему кластеру InnoDB, где:

См. --bootstrap и связанные возможности для способов изменить процесс автоконфигурации. Например, передача --conf-use-sockets позволяет сокетные соединения Unix, потому что только связи TCP/IP позволены по умолчанию.

Автонастройка и group_replication_single_primary_mode

При автонастройке доступные порты и сокеты затронуты опцией group_replication_single_primary_mode MySQL Server.

Этот документ относится к поведению самонастройки по умолчанию. Другие параметры конфигурации MySQL Router могут затронуть это поведение, и произведенные значения конфигурации могут быть вручную изменены после самонастройки.

Например:

С group_replication_single_primary_mode =ON все связи с портами 6446 и 64460 идут на единственный primary, все связи с портами 6447 и 64470 идут на secondary с использованием циклического графика.

shell> mysqlrouter --bootstrap localhost:3310

Classic MySQL protocol connections to cluster 'myCluster':
- Read/Write Connections: localhost:6446
- Read/Only Connections: localhost:6447

X protocol connections to cluster 'myCluster':
- Read/Write Connections: localhost:64460
- Read/Only Connections: localhost:64470

С group_replication_single_primary_mode =OFF все связи с портами 6446 и 64460 идут на primaries, используя циклический график.

shell> mysqlrouter --bootstrap localhost:3310

Classic MySQL protocol connections to cluster 'myCluster':
- Read/Write Connections: localhost:6446

X protocol connections to cluster 'myCluster':
- Read/Write Connections: localhost:64460

1.2. Метаданные и статус кластера

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

MySQL Router держит список серверов MySQL онлайн, или топологию и статус формируемого кластера MySQL InnoDB. Первоначально, список загружается из конфигурационного файла роутера. Этот список был произведен с серверами кластера InnoDB, когда кластер был настроен, используя опцию --bootstrap.

Чтобы сохранять кэш свежим, компонент кэша метаданных держит открытую связь с одним из серверов кластера InnoDB, который содержит метаданные. Это запрашивает базу данных метаданных и статусные данные из исполнительной схемы MySQL. Метаданные изменяются каждый раз, когда кластер InnoDB изменяется, например, при добавлении или удалении сервера MySQL, используя MySQL Shell, и таблицы performance_schema обновляются в режиме реального времени плагином MySQL Group Replication каждый раз, когда изменение состояния кластера обнаружено. Например, если у одного из серверов MySQL было неожиданное закрытие.

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

Соединения приложения к серверу MySQL, который закрывается, автоматически закрываются. Они должны снова соединиться с маршрутизатором, который перенаправляет их к рабочему серверу MySQL.

1.3. Направление связи

Направление связи означает перенаправление подключения MySQL к доступному серверу MySQL. Пакеты MySQL идут в полном объеме без контроля. Для развертывания в качестве примера, используя основное направление связи, посмотрите раздел 3.3.

Приложения соединяются с MySQL Router, но не напрямую с MySQL Server, если связь прерывается, то приложения должны быть разработаны, чтобы повторить связь, потому что MySQL Router выбирает новый сервер MySQL после неудачных попыток. Это также называют простым направлением связи, потому что оно требует от приложения повторить связь. Таким образом, если связь MySQL Router с сервером MySQL прервана, приложение сталкивается с неудачей связи. Однако новая попытка подключения приводит в действие роутер, чтобы найти и соединиться с другим сервером MySQL.

Серверы и стратегии направления определяются в конфигурационном файле. Например, следующий раздел говорит MySQL Router слушать на порту 7002 localhost, затем перенаправлять те связи экземпляру MySQL, определенному опцией destinations, включая серверы, работающие на localhost на портах 3306, 3307 и 3308. Мы также используем опцию routing_strategy, чтобы использовать циклическую форму выравнивания нагрузки. Для получения дополнительной информации посмотрите раздел 4.3

[routing:simple_redirect]
bind_port = 7002
routing_strategy = round-robin
destinations = localhost:3306,localhost:3307,localhost:3308

Эта секция в качестве примера названа routing:simple_redirect. Первая часть, routing, это имя секции, используемое внутренне, чтобы определить который плагин загрузить. Вторая часть, simple_redirect, дополнительный ключ секции, чтобы дифференцироваться между другими стратегиями направления.

Когда сервер больше не достижим, MySQL Router двигается в следующее место назначения сервера в списке и вернется позже к первому месту назначения сервера, если список исчерпан согласно циклической стратегии.

До MySQL Router 8.0 теперь устаревшая опция mode использовалась вместо опции routing_strategy, которая была добавлена в MySQL Router 8.0.

1.4. Прикладные соображения

Использование MySQL Router не требует определенных библиотек или интерфейсов. Кроме управления экземпляром MySQL Router, пишите свое приложение, как будто MySQL Router это типичный MySQL.

Единственная разница, используя MySQL Router то, как вы устанавливаете связи с сервером MySQL. Должны быть обновлены приложения, используя единственное подключение MySQL при запуске, которое не проверяет на ошибки связи. Это вызвано тем, что MySQL Router перенаправляет связи, когда связь предпринята, и не читает пакеты и не выполняет анализ. Если сервер MySQL падает, роутер возвращает ошибку связи.

По этим причинам приложение должно быть написано, чтобы проверить на ошибки связи и, если они выявлены, повторить связь. Если эта техника будет использоваться в вашем приложении, то использование MySQL Router не потребует никакого дополнительного усилия.

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

Ситуации

Есть несколько возможных сценариев для MySQL Router:

Технологический процесс с маршрутизатором MySQL

Технологический процесс для использования MySQL Router:

  1. MySQL Client или Connector соединяются с MySQL Router, например, через порт 6446.

  2. Маршрутизатор проверяет на доступный сервер MySQL.
  3. Маршрутизатор открывает связь с подходящим сервером MySQL.
  4. Маршрутизатор перенаправляет пакеты между приложением и сервером MySQL.
  5. Маршрутизатор отсоединяет приложение, если подключенный сервер MySQL отвалился. Приложение может тогда повторить соединение с роутером, а он тогда выбирает иной доступный сервер MySQL.

Использование связей MySQL Router

Приложение соединяется с MySQL Router, и роутер соединяет его с доступным сервером MySQL.

Этот пример демонстрирует, что связь прозрачно соединяется с одним из экземпляров кластера InnoDB. Поскольку этот пример использует кластер InnoDB, у которого все экзепляры работают на том же самом хосте, мы проверяем переменную статуса port, чтобы видеть, какой экзепляр MySQL связан.

Установите связь с MySQL Router через клиент MySQL:

shell> mysql -u root -h 127.0.0.1 -P 6446 -p

Эти номера портов зависят от вашей конфигурации, но сравните порты в этом примере:

mysql> select @@port;
+--------+
| @@port |
+--------+
| 3310   |
+--------+
1 row in set (0.00 sec)

Подводя итог, клиент (приложение), связано с портом 6446, но связано с экземпляром MySQL на порте 3310.

Советы

Следующее рекомендации для использования MySQL Router.

1.5. Что нового в MySQL Router 8.0

Эта секция суммирует многие новые опции, добавленные к MySQL Router 8.0 относительно MySQL Router 2.1.

Нумерация версий

MySQL Router 8.0.3 является первым выпуском ветки 8.0.x, чтобы использовать новую нумерацию и является преемником MySQL Router 2.1.4.

MySQL Connector и прочие клиенты MySQL теперь синхронизируют первую цифру своего номера версии с (самой высокой) версией сервера MySQL, которую они поддерживают. Это изменение облегчает и делает интуитивным решение, которую версию клиента использовать для которой версии сервера. Точно так же MySQL Router теперь использует тот же самый номер версии как у MySQL Server.

Изменения и новые возможности

Дополнительные изменения

Для полного списка всех изменений, введенных в MySQL Router 8.0, см. MySQL Router 8.0 Release Notes.