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.