Ваше руководство по возможности управления кластером DistSQL — обновление возможностей Apache ShardingSphere

С тех пор как в версию Apache ShardingSphere 5.0.0-Beta был включен DistSQL, проект стал все более любим разработчиками и операционными командами за такие его преимущества, как динамические эффекты, отсутствие перезапуска и элегантный синтаксис, близкий к стандартному SQL.

В обновлениях 5.0.0 и 5.1.0 сообщество ShardingSphere снова добавило в DistSQL изящный синтаксис, привнеся больше практических возможностей.

В этом посте соавторы сообщества поделятся последними функциями DistSQL с точки зрения «управления кластером».

Кластер ShardingSphere

В типичном кластере, состоящем из ShardingSphere-Proxy, есть несколько вычислительных узлов и узлов хранения, как показано на рисунке ниже:

Чтобы было проще понять, в ShardingSphere мы называем Proxy вычислительным узлом, а управляемые Proxy ресурсы распределенной базы данных (такие как ds_0, ds_1) — ресурсами или узлами хранения.

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

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

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

Механизм балансировки нагрузки также может быть добавлен между приложением и вычислительным узлом.

Управление вычислительными узлами
Управление вычислительными узлами подходит для режима кластера. Более подробную информацию о режимах работы ShardingSphere можно найти в разделе Подробное руководство по режимам работы Apache ShardingSphere.

Подготовка кластера
В качестве примера возьмем автономное моделирование трех вычислительных узлов Proxy. Чтобы использовать этот режим, следуйте приведенной ниже конфигурации:

mode:
type: Cluster
repository:
type: ZooKeeper
props:
namespace: governance_ds
server-lists: localhost:2181
retryIntervalMilliseconds: 500
timeToLiveSeconds: 60
maxRetries: 3
operationTimeoutMilliseconds: 500
overwrite: false
Войти в полноэкранный режим Выход из полноэкранного режима

Выполните команду загрузки отдельно:

sh %SHARDINGSPHERE_PROXY_HOME%/bin/start.sh 3307
sh %SHARDINGSPHERE_PROXY_HOME%/bin/start.sh 3308
sh %SHARDINGSPHERE_PROXY_HOME%/bin/start.sh 3309
Войти в полноэкранный режим Выход из полноэкранного режима

После успешного запуска трех экземпляров Proxy кластер вычислительных узлов готов.

SHOW INSTANCE LIST

Используйте клиент для подключения к любому вычислительному узлу, например 3307:

mysql -h 127.0.0.1 -P 3307 -u root -p
View the list of instances:

mysql> SHOW INSTANCE LIST;
+----------------+-----------+------+---------+
| instance_id    | host      | port | status  |
+----------------+-----------+------+---------+
| 10.7.5.35@3309 | 10.7.5.35 | 3309 | enabled |
| 10.7.5.35@3308 | 10.7.5.35 | 3308 | enabled |
| 10.7.5.35@3307 | 10.7.5.35 | 3307 | enabled |
+----------------+-----------+------+---------+
Войти в полноэкранный режим Выйти из полноэкранного режима

Вышеуказанные поля означают:

DISABLE INSTANCE

Оператор DISABLE INSTANCE используется для перевода указанного вычислительного узла в отключенное состояние.

💡 Примечание:
оператор не завершает процесс целевого экземпляра, а только виртуально деактивирует его.

DISABLE INSTANCE поддерживает следующие формы синтаксиса:

DISABLE INSTANCE 10.7.5.35@3308;
#or
DISABLE INSTANCE IP=10.7.5.35, PORT=3308;
Войти в полноэкранный режим Выйти из полноэкранного режима

Пример:

mysql> DISABLE INSTANCE 10.7.5.35@3308;
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW INSTANCE LIST;
+----------------+-----------+------+----------+
| instance_id    | host      | port | status   |
+----------------+-----------+------+----------+
| 10.7.5.35@3309 | 10.7.5.35 | 3309 | enabled  |
| 10.7.5.35@3308 | 10.7.5.35 | 3308 | disabled |
| 10.7.5.35@3307 | 10.7.5.35 | 3307 | enabled  |
+----------------+-----------+------+----------+
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения выражения DISABLE INSTANCE, повторив запрос, вы увидите, что статус экземпляра порта 3308 был обновлен до disabled , что указывает на то, что вычислительный узел был отключен.

Если есть клиент, подключенный к 10.7.5.35@3308 , выполнение любого оператора SQL приведет к исключению:

1000 - Circuit break mode is ON.
💡Примечание:
Не разрешается отключать текущий вычислительный узел. Если вы отправите 10.7.5.35@3309 в DISABLE INSTANCE 10.7.5.35@3309 , вы получите запрос на исключение.

ENABLE INSTANCE

Оператор ENABLE INSTANCE используется для установки указанного вычислительного узла во включенное состояние. ENABLE INSTANCE поддерживает следующие формы синтаксиса:

ENABLE INSTANCE 10.7.5.35@3308;
#or
ENABLE INSTANCE IP=10.7.5.35, PORT=3308;
Войти в полноэкранный режим Выйти из полноэкранного режима

Пример:

mysql> SHOW INSTANCE LIST;
+----------------+-----------+------+----------+
| instance_id    | host      | port | status   |
+----------------+-----------+------+----------+
| 10.7.5.35@3309 | 10.7.5.35 | 3309 | enabled  |
| 10.7.5.35@3308 | 10.7.5.35 | 3308 | disabled |
| 10.7.5.35@3307 | 10.7.5.35 | 3307 | enabled  |
+----------------+-----------+------+----------+
mysql> ENABLE INSTANCE 10.7.5.35@3308;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW INSTANCE LIST;
+----------------+-----------+------+----------+
| instance_id    | host      | port | status   |
+----------------+-----------+------+----------+
| 10.7.5.35@3309 | 10.7.5.35 | 3309 | enabled  |
| 10.7.5.35@3308 | 10.7.5.35 | 3308 | enabled  |
| 10.7.5.35@3307 | 10.7.5.35 | 3307 | enabled  |
+----------------+-----------+------+----------+
Войти в полноэкранный режим Выйти из полноэкранного режима

После выполнения оператора ENABLE INSTANCE вы можете повторить запрос и увидеть, что состояние экземпляра порта 3308 было восстановлено до enabled.

Как управлять параметрами вычислительного узла

В предыдущей статье Integrating SCTL into RAL — Making Apache ShardingSphere Perfect for Database Management мы рассказали об эволюции SCTL (ShardingSphere Control Language) в RAL (Resource & Rule Administration Language) и новом синтаксисе SHOW VARIABLE и SET VARIABLE.

Однако в версии 5.0.0-Beta категория VARIABLE DistSQL RAL содержит только три следующих утверждения:

SET VARIABLE TRANSACTION_TYPE = xx; (LOCAL, XA, BASE)
SHOW VARIABLE TRANSACTION_TYPE;
SHOW VARIABLE CACHED_CONNECTIONS;
Войти в полноэкранный режим Выйти из полноэкранного режима

Прислушавшись к отзывам сообщества, мы заметили, что запрос и изменение конфигурации props в Proxy (расположенной в server.yaml) также является частой операцией. Поэтому, начиная с версии 5.0.0 GA, мы добавили поддержку конфигурации props в DistSQL RAL.

SHOW VARIABLE

Сначала рассмотрим, как настроить реквизиты:

props:
max-connections-size-per-query: 1
kernel-executor-size: 16  # Infinite by default.
proxy-frontend-flush-threshold: 128  # The default value is 128.
proxy-opentracing-enabled: false
proxy-hint-enabled: false
sql-show: false
check-table-metadata-enabled: false
show-process-list-enabled: false
# Proxy backend query fetch size. A larger value may increase the memory usage of ShardingSphere Proxy.
# The default value is -1, which means set the minimum value for different JDBC drivers.
proxy-backend-query-fetch-size: -1
check-duplicate-table-enabled: false
proxy-frontend-executor-size: 0 # Proxy frontend executor size. The default value is 0, which means let Netty decide.
# Available options of proxy backend executor suitable: OLAP(default), OLTP. The OLTP option may reduce time cost of writing packets to client, but it may increase the latency of SQL execution
# and block other clients if client connections are more than `proxy-frontend-executor-size`, especially executing slow SQL.
proxy-backend-executor-suitable: OLAP
proxy-frontend-max-connections: 0 # Less than or equal to 0 means no limitation.
sql-federation-enabled: false
# Available proxy backend driver type: JDBC (default), ExperimentalVertx
proxy-backend-driver-type: JDBC
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь вы можете выполнять интерактивные запросы, используя следующий синтаксис:

SHOW VARIABLE PROXY_PROPERTY_NAME;

Пример:

mysql> SHOW VARIABLE MAX_CONNECTIONS_SIZE_PER_QUERY;
+--------------------------------+
| max_connections_size_per_query |
+--------------------------------+
| 1                              |
+--------------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLE SQL_SHOW;
+----------+
| sql_show |
+----------+
| false    |
+----------+
1 row in set (0.00 sec)
Войти в полноэкранный режим Выйти из полноэкранного режима

……
💡 Примечание:
В синтаксисе DistSQL ключи параметров разделяются символами подчеркивания.

SHOW ALL VARIABLES

Поскольку параметров в Proxy много, вы также можете запросить все значения параметров через SHOW ALL VARIABLES :

mysql> SHOW ALL VARIABLES;
+---------------------------------------+----------------+
| variable_name                         | variable_value |
+---------------------------------------+----------------+
| sql_show                              | false          |
| sql_simple                            | false          |
| kernel_executor_size                  | 0              |
| max_connections_size_per_query        | 1              |
| check_table_metadata_enabled          | false          |
| proxy_frontend_database_protocol_type |                |
| proxy_frontend_flush_threshold        | 128            |
| proxy_opentracing_enabled             | false          |
| proxy_hint_enabled                    | false          |
| show_process_list_enabled             | false          |
| lock_wait_timeout_milliseconds        | 50000          |
| proxy_backend_query_fetch_size        | -1             |
| check_duplicate_table_enabled         | false          |
| proxy_frontend_executor_size          | 0              |
| proxy_backend_executor_suitable       | OLAP           |
| proxy_frontend_max_connections        | 0              |
| sql_federation_enabled                | false          |
| proxy_backend_driver_type             | JDBC           |
| agent_plugins_enabled                 | false          |
| cached_connections                    | 0              |
| transaction_type                      | LOCAL          |
+---------------------------------------+----------------+
21 rows in set (0.01 sec)
Войти в полноэкранный режим Выход из полноэкранного режима

SET VARIABLE

Динамическое управление ресурсами и правилами — особое преимущество DistSQL. Теперь вы также можете динамически обновлять параметры реквизита с помощью оператора SET VARIABLE. Например:

#Enable SQL log output
SET VARIABLE SQL_SHOW = true;
#Turn on hint function
SET VARIABLE PROXY_HINT_ENABLED = true;
#Open federal query
SET VARIABLE SQL_FEDERATION_ENABLED = true;
……
Войти в полноэкранный режим Выход из полноэкранного режима

💡 Примечание:

Следующие параметры могут быть изменены с помощью оператора SET VARIABLE, но новое значение вступает в силу только после перезапуска Proxy:

  • kernel_executor_size
  • proxy_frontend_executor_size
  • proxy_backend_driver_type

Следующие параметры доступны только для чтения и не могут быть изменены:

  • cached_connections

Другие параметры вступают в силу сразу после изменения.

Как управлять узлами хранения данных

В ShardingSphere узлы хранения не связаны напрямую с вычислительными узлами. Поскольку один узел хранения может одновременно играть разные роли в разных схемах для реализации различной бизнес-логики. Узлы хранения всегда связаны со схемой.

В DistSQL управление узлами хранения осуществляется с помощью утверждений RESOURCE, связанных со схемой, в том числе:

  • ADD RESOURCE
  • ALTER RESOURCE
  • DROP RESOURCE
  • SHOW SCHEMA RESOURCES

Подготовка схемы

DROP DATABASE IF EXISTS sharding_db;
CREATE DATABASE sharding_db;
USE sharding_db;
Вход в полноэкранный режим Выход из полноэкранного режима

ADD RESOURCE

ADD RESOURCE поддерживает следующие формы синтаксиса:

Укажите HOST, PORT, DB.

ADD RESOURCE resource_0 (
HOST=127.0.0.1,
PORT=3306,
DB=db0,
USER=root,
PASSWORD=root
);
Вход в полноэкранный режим Выйти из полноэкранного режима

Укажите URL

ADD RESOURCE resource_1 (
URL="jdbc:mysql://127.0.0.1:3306/db1?serverTimezone=UTC&useSSL=false",
USER=root,
PASSWORD=root
);
Войти в полноэкранный режим Выйти из полноэкранного режима

Приведенные выше две формы синтаксиса поддерживают параметр расширения PROPERTIES, который используется для указания конфигурации атрибутов пула соединений между прокси и узлом хранения, например:

ADD RESOURCE resource_2 (
HOST=127.0.0.1,
PORT=3306,
DB=db2,
USER=root,
PASSWORD=root,
PROPERTIES("maximumPoolSize"=10)
),resource_3 (
URL="jdbc:mysql://127.0.0.1:3306/db3?serverTimezone=UTC&useSSL=false",
USER=root,
PASSWORD=root,
PROPERTIES("maximumPoolSize"=10,"idleTimeout"="30000")
);
Войти в полноэкранный режим Выйти из полноэкранного режима

💡 Примечание: Указание параметров соединения JDBC, таких как useSSL, поддерживается только в форме URL.

ALTER RESOURCE

ALTER RESOURCE используется для изменения информации о соединении узлов хранения, например, для изменения размера пула соединений, изменения параметров соединения JDBC и т.д.

Синтаксически, ALTER RESOURCE идентичен ADD RESOURCE.

ALTER RESOURCE resource_2 (
HOST=127.0.0.1,
PORT=3306,
DB=db2,
USER=root,
PROPERTIES("maximumPoolSize"=50)
),resource_3 (
URL="jdbc:mysql://127.0.0.1:3306/db3?serverTimezone=GMT&useSSL=false",
USER=root,
PASSWORD=root,
PROPERTIES("maximumPoolSize"=50,"idleTimeout"="30000")
);
Вход в полноэкранный режим Выход из полноэкранного режима

💡 Примечание: Поскольку изменение узла хранения может привести к изменению метаданных или исключению данных приложения, ALTER RESOURCE нельзя использовать для изменения целевой базы данных соединения. Можно изменить только следующие значения:

  • имя пользователя
  • пароль пользователя
  • Параметры JDBC

DROP RESOURCE

DROP RESOURCE используется для удаления узлов хранения из схемы без удаления каких-либо данных в узле хранения. Пример оператора выглядит следующим образом:

DROP RESOURCE resource_0, resource_1;

💡 Примечание: Для обеспечения корректности данных узел хранения, на который ссылается правило, не может быть удален.

t_order является таблицей шардинга, и ее фактические таблицы распределены в resource_0 и resource_1. Когда на resource_0 и resource_1 ссылаются правила шардинга t_order, они не могут быть удалены.

SHOW SCHEMA RESOURCES

SHOW SCHEMA RESOURCES используется для запроса узлов хранения в схемах и поддерживает следующие формы синтаксиса:

#Query the storage node in the current schema
SHOW SCHEMA RESOURCES;
#Query the storage node in the specified schema
SHOW SCHEMA RESOURCES FROM sharding_db;
Войти в полноэкранный режим Выйти из полноэкранного режима

Пример:

Добавьте 4 узла хранения с помощью вышеупомянутой команды ADD RESOURCE, а затем выполните запрос:

На самом деле в результате запроса имеется большое количество столбцов, но здесь мы покажем только часть из них.

Выше мы познакомили вас со способами динамического управления узлами хранения с помощью DistSQL.

По сравнению с изменением файлов YAML, выполнение запросов DistSQL происходит в режиме реального времени, и нет необходимости перезапускать прокси-сервер или вычислительный узел, что делает онлайн-операции более безопасными.

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

Управление кластером Apache ShardingSphere является очень мощным.

Заключение

Если у вас есть вопросы или предложения по Apache ShardingSphere, пожалуйста, откройте проблему в списке проблем на GitHub. Если вы хотите внести свой вклад в проект, приглашаем вас присоединиться к сообществу Apache ShardingSphere.

Проблема на GitHub:https://github.com/apache/shardingsphere/issues

Вопросы — apache/shardingsphere
Новый вопрос Есть вопрос по этому проекту? Зарегистрируйте бесплатный аккаунт на GitHub, чтобы открыть проблему и связаться с…
github.com

Ссылка

*1. ShardingSphere-Proxy Quickstart: *https://shardingsphere.apache.org/document/5.1.0/cn/quick-start/shardingsphere-proxy-quick-start/

2.DistSQL RDL:https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/distsql/syntax/rdl/resource-definition/

3.DistSQL RQL:https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/distsql/syntax/rql/resource-query/

4.DistSQL RAL:https://shardingsphere.apache.org/document/current/en/user-manual/shardingsphere-proxy/distsql/syntax/ral/

Ссылки на проект Apache ShardingSphere:
ShardingSphere Github

ShardingSphere Twitter

ShardingSphere Slack

Руководство для контрибьюторов

Авторы
Лонгтао Джианг

Инженер по разработке промежуточного ПО SphereEx и коммиттер Apache ShardingSphere

Цзян работает над DistSQL и функциями безопасности R&D.

Чэнсян Лань

Инженер по разработке ПО SphereEx Middleware & коммиттер Apache ShardingSphere

Лан вносит свой вклад в разработку DistSQL и R&D.

Оцените статью
Procodings.ru
Добавить комментарий