RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Глава 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, где:

  • localhost:3310 член кластера InnoDB, PRIMARY или автонастройка перенаправят к a PRIMARY в кластере.

  • Поскольку применена дополнительная опция --directory, этот пример создает отдельную установку со всеми произведенными каталогами и файлами в /opt/myrouter/. Эти файлы включают start.sh, stop.sh, log/ и полностью функциональный конфигурационный файл MySQL Router mysqlrouter.conf.
  • Только пользователь системы хоста snoopy имеет доступ к /opt/myrouter/*.

См. --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 (по умолчанию): порты Read-Write (primary) и Read-Only (secondary) формируются.

  • С group_replication_single_primary_mode =OFF: настроены только порты Read-Write (primary).

Например:

С 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:

  • Как разработчик, я хочу приложение соединить с сервисом, таким образом, это получает связь с, по умолчанию, текущим primary кластера репликации группы.

  • Как администратор, я хочу настроить много сервисов, таким образом, MySQL Router слушает на различном порте для каждого высоконадежного сервиса.
  • Как администратор, я хочу быть в состоянии управлять обслуживанием направления связи на порт 3306, таким образом, это более очевидно для пользователя или применения.
  • Как администратор, я хочу формировать способ для обслуживания каждого направления связи, таким образом, я могу определить, возвращен primary или secondary.

Технологический процесс с маршрутизатором 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.

  • Установите и управляйте MySQL Router на том же самом хосте, где работает приложение. Для списка причин см. главу 3.

  • Свяжите роутер с localhost через bind_port = 127.0.0.1:<port> в конфигурационном файле. Альтернативно, в Linux, отключите соединения по протоколу TCP (см. --conf-skip-tcp) и ограничьте это только использованием сокетных соединений Unix (см. --conf-use-sockets).

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.

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

  • Дополнительная опция конфигурации routing_strategy добавлена. Доступные значения: first-available, next-available, round-robin и round-robin-with-fallback.

    Ранее эти стратегии были описаны как режимы планирования, где режим read-write был умолчанием для стратегии first-available, а режим read-only был умолчанием для стратегии round-robin. Это сохраняет предыдущее поведение для этих способов.

  • Добавлены опции автонастройки --ssl-key и --ssl-cert. Они непосредственно копируют свои аналоги из клиента MySQL и определяют клиентский сертификат и приватный ключ, чтобы облегчить клиентскую идентификацию. Это полезно, когда учетная запись root, используемая во время автонастройки, была создана с REQUIRE X509, который требует, чтобы клиент подтвердил подлинность.
  • Добавлены новые опции конфигурационного файла метаданных connect_timeout и read_timeout. Они определяются под пространством имен [DEFAULT] и затрагивают внутренние операции, такие как связи сервера метаданных.
  • Автонастройка теперь принимает любого члена кластера InnoDB, автоматически находит и снова соединяется с перезаписываемыми primary. Прежде были приняты только primary.
  • Автонастройка теперь принимает опцию --config и читает определение [logger] level.
  • Максимальное число параллельных связей клиента было увеличено от приблизительно 500 до более чем 5000, предел, теперь зависящий от операционной системы. Чтобы достигнуть этого, select(), основанный на вызовах событий, заменен poll() (или WSAPoll() в Windows).
  • Новая утилита mysqlrouter_plugin_info была добавлена, чтобы помочь отладить плагины MySQL Router. Это предоставляет такую информацию, как версия модуля, описание, версия ABI, требования и указатели функции.

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

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

Поиск

 

Найди своих коллег!

Вы можете направить письмо администратору этой странички, Алексею Паутову. mailto:alexey.v.pautov@mail.ru