Spec-Zone.ru › MySQL Router 8.4

3.2 Ознакомление с MySQL Router в песочнице

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

Настройка песочницы MySQL Server

Начните с запуска трех MySQL Server. Это можно сделать различными способами, включая:

  • Использование интерфейса AdminAPI MySQL Shell, предоставляемого InnoDB Cluster. Это рекомендуемый и самый простой подход, документированный в этом разделе. Дополнительную информацию см. в.

    Для скриптового подхода см.

  • Установка трех экземпляров MySQL Server на трех разных хостах или на одном хосте.

  • Использование скрипта mysql-test-run.pl, который входит в состав фреймворка MySQL Test Suite. Дополнительную информацию см. в MySQL Test Suite.

В следующем примере используется метод AdminAPI для настройки нашей песочницы кластера. Это краткий обзор, поэтому см. в руководстве по InnoDB Cluster для получения дополнительных деталей. Предполагается, что у вас установлены текущие версии MySQL Shell, MySQL Server и MySQL Router.

Развертывание песочницы кластера

В этом примере используется MySQL Shell AdminAPI для настройки InnoDB Cluster с тремя экземплярами MySQL (один первичный и два вторичных) и автономным MySQL Router с сгенерированным конфигурационным файлом. Вывод был сокращен с использованием «…».

$> mysqlsh

mysql-js> dba.deploySandboxInstance(3310)
  ...
mysql-js> dba.deploySandboxInstance(3320)
  ...
mysql-js> dba.deploySandboxInstance(3330)
  ...

mysql-js> \connect root@localhost:3310
  ...

mysql-js> cluster = dba.createCluster("myCluster")
  ...

mysql-js> cluster.addInstance("root@localhost:3320")
  ...
mysql-js> cluster.addInstance("root@localhost:3330")
  ...

mysql-js> cluster.status()
{
  "clusterName": "myCluster",
  "defaultReplicaSet": {
      "name": "default",
      "primary": "127.0.0.1:3310",
      "ssl": "REQUIRED",
      "status": "OK",
      "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
      "topology": {
          "127.0.0.1:3310": {
              "address": "127.0.0.1:3310",
              "memberRole": "PRIMARY",
              "mode": "R/W",
              "readReplicas": {},
              "replicationLag": null,
              "role": "HA",
              "status": "ONLINE",
              "version": "8.0.27"
          },
          "127.0.0.1:3320": {
              "address": "127.0.0.1:3320",
              "memberRole": "SECONDARY",
              "mode": "R/O",
              "readReplicas": {},
              "replicationLag": null,
              "role": "HA",
              "status": "ONLINE",
              "version": "8.0.27"
          },
          "127.0.0.1:3330": {
              "address": "127.0.0.1:3330",
              "memberRole": "SECONDARY",
              "mode": "R/O",
              "readReplicas": {},
              "replicationLag": null,
              "role": "HA",
              "status": "ONLINE",
              "version": "8.0.27"
          }
      },
      "topologyMode": "Single-Primary"
  },
  "groupInformationSourceMember": "127.0.0.1:3310"
}

mysql-js> \q

Bye!

Настройка Router

Далее настройте MySQL Router для перенаправления на эти экземпляры MySQL. Мы будем использовать загрузку (используя --bootstrap) и создадим автономную установку MySQL Router с использованием --directory. Это использует плагин кэширования метаданных для безопасного хранения учетных данных.

$> mysqlrouter --bootstrap root@localhost:3310 --directory /tmp/router

Please enter MySQL password for root:
# Bootstrapping MySQL Router instance at '/tmp/router'...

- 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
- Adjusting permissions of generated files
- Creating configuration /tmp/router/mysqlrouter.conf

# MySQL Router configured for the InnoDB Cluster 'myCluster'

After this MySQL Router has been started with the generated configuration

    $ mysqlrouter -c /tmp/router/mysqlrouter.conf

InnoDB Cluster 'myCluster' 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

$> cd /tmp/router

$> ./start.sh

MySQL Router теперь настроен и запущен и использует кластер myCluster, который мы настроили ранее.

Тестирование Router

Теперь подключитесь к MySQL Router, как к любому другому MySQL Server, подключившись к соответствующему порту MySQL Router.

В следующем примере подключается к MySQL Router на порту 6446, который мы настроили для чтений и записей:

$> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

+--------+
| @@port |
+--------+
|   3310 |
+--------+

Как показано, мы подключились к MySQL Router по порту 6446, но видим, что подключение идет к нашему экземпляру MySQL по порту 3310 (наш PRIMARY). Теперь давайте подключимся к экземпляру MySQL с только чтением:

$> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

+--------+
| @@port |
+--------+
|   3320 |
+--------+

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

$> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

+--------+
| @@port |
+--------+
|   3330 |
+--------+

Как показано, наше второе подключение с только чтением к порту 6447 подключилось к другому вторичному экземпляру MySQL, в данном случае к порту 3330, а не к 3320.

Теперь протестируем переключение при отказе, сначала остановив первичный экземпляр MySQL (порт 3310), к которому мы подключились выше.

$> mysqlsh --uri root@127.0.0.1:6446

mysql-js> dba.killSandboxInstance(3310)

The MySQL sandbox instance on this host in
/home/philip/mysql-sandboxes/3310 will be killed

Killing MySQL instance...

Instance localhost:3310 successfully killed.

Вы можете продолжить проверку подключения с помощью MySQL Shell, но давайте используем тот же пример клиента mysql, что и выше:

$> mysql -u root -h 127.0.0.1 -P 6446 -p
mysql> SELECT @@port;

+--------+
| @@port |
+--------+
|   3320 |
+--------+

$> mysql -u root -h 127.0.0.1 -P 6447 -p
mysql> SELECT @@port;

+--------+
| @@port |
+--------+
|   3330 |
+--------+

Как видно, несмотря на подключение к тем же портам (6446 для первичного и 6447 для вторичного), базовые порты изменились. Наш новый первичный сервер изменился с порта 3310 на 3320, а наш вторичный — с 3320 на 3330.

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

Router также по умолчанию включает REST API в сгенерированном mysqlrouter.conf при загрузке, и по умолчанию следующий URL отображает swagger.json для вашей локальной настройки: https://127.0.0.1:8443/api/20190715/swagger.json. См. также Глава 6, REST API MySQL Router.

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

Spec-Zone.ru

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