在存算分离架构下,可以将一个或多个计算节点 (BE) 组成一个计算集群 (Compute Cluster)。本文档介绍如何使用计算集群,其中涉及的操作包括:

  • 查看所有计算集群
  • 计算集群授权
  • 在用户级别绑定计算集群 (default_cloud_cluster) 以达到用户级别的隔离效果

计算集群操作 - 图1备注

本文涉及的 cluster 均表示计算集群。

查看所有计算集群

可通过 show clusters 查看当前仓库拥有的所有计算集群。

  1. > mysql show clusters;
  2. +-------------------------------+------------+------------+
  3. | cluster | is_current | users |
  4. +-------------------------------+------------+------------+
  5. | regression_test_cluster_name0 | FALSE | root, jack |
  6. | regression_test_cluster_name5 | FALSE | |
  7. +-------------------------------+------------+------------+
  8. 2 rows in set (0.01 sec)
  9. mysql SET PROPERTY 'default_cloud_cluster' = 'regression_test_cluster_name5';
  10. Query OK, 0 rows affected (0.01 sec)

授予计算集群访问权限

使用 MySQL Client 创建一个新用户。

语法

  1. GRANT USAGE_PRIV ON CLUSTER {cluster_name} TO {user}

示例

  1. // 使用 Root 账号在 MySQL Client 中创建 Jack 用户
  2. mysql CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
  3. Query OK, 0 rows affected (0.01 sec)
  4. mysql GRANT USAGE_PRIV ON CLUSTER regression_test_cluster_name0 TO jack;
  5. Query OK, 0 rows affected (0.01 sec)
  6. // 使用 Jack 登录 MySQL Client
  7. mysql use d1@regression_test_cluster_name0;
  8. Database changed
  9. mysql show grants for jack\G
  10. *************************** 1. row ***************************
  11. UserIdentity: 'jack'@'%'
  12. Password: Yes
  13. GlobalPrivs: Admin_priv (false)
  14. CatalogPrivs: NULL
  15. DatabasePrivs: internal.information_schema: Select_priv (false)
  16. TablePrivs: NULL
  17. ResourcePrivs: NULL
  18. CloudCluster: regression_test_cluster_name0: Usage_priv (false)
  19. CloudStage: NULL
  20. 1 row in set (0.00 sec)
  21. mysql select * from t1;
  22. +------+------+-------+
  23. | id | name | score |
  24. +------+------+-------+
  25. | 1 | aaa | 20 |
  26. | 2 | bbb | 320 |
  27. | 3 | ccc | 30 |
  28. | 4 | ddd | 120 |
  29. | 5 | eee | 30 |
  30. | 6 | fff | 30 |
  31. | 7 | ggg | 90 |
  32. | 8 | hhh | 30 |
  33. +------+------+-------+
  34. 8 rows in set (12.70 sec)
  35. mysql insert into t1 (id, name, score) values (8, "hhh", 30);
  36. Query OK, 1 row affected (7.22 sec)
  37. {'label':'insert_6f40c1713baf4d61_9c33c0962c68ab07', 'status':'VISIBLE', 'txnId':'5462662627547136'}

若向 Jack 用户授权一个不存在的计算集群,系统不会报错,而会在执行相应的 use @cluster 时报错。

  1. mysql GRANT USAGE_PRIV ON CLUSTER not_exist_cluster TO jack;
  2. Query OK, 0 rows affected (0.05 sec)
  3. mysql show grants for jack\G
  4. *************************** 1. row ***************************
  5. UserIdentity: 'jack'@'%'
  6. Password: Yes
  7. GlobalPrivs: Admin_priv (false)
  8. CatalogPrivs: NULL
  9. DatabasePrivs: internal.information_schema: Select_priv (false)
  10. TablePrivs: NULL
  11. ResourcePrivs: NULL
  12. CloudCluster: not_exist_cluster: Usage_priv (false)
  13. CloudStage: NULL
  14. 1 row in set (0.00 sec)
  15. 切换到 Jack 账号,执行 use @not_exist_cluster,将出现提示 not_exist_cluster 不存在的报错提示
  16. mysql use information_schema@not_exist_cluster;
  17. No connection. Trying to reconnect...
  18. Connection id: 1
  19. Current database: *** NONE ***
  20. ERROR 5091 (42000): Cluster not_exist_cluster not exist

撤销计算集群访问权限

语法

  1. REVOKE USAGE_PRIV ON CLUSTER {cluster_name} FROM {user}

示例

  1. // 使用 Root 账号在 MySQL Client 中创建 Jack 用户
  2. mysql REVOKE USAGE_PRIV ON CLUSTER regression_test_cluster_name0 FROM jack;
  3. Query OK, 0 rows affected (0.01 sec)
  4. mysql show grants for jack\G
  5. *************************** 1. row ***************************
  6. UserIdentity: 'jack'@'%'
  7. Password: Yes
  8. GlobalPrivs: Admin_priv (false)
  9. CatalogPrivs: NULL
  10. DatabasePrivs: internal.information_schema: Select_priv (false)
  11. TablePrivs: NULL
  12. ResourcePrivs: NULL
  13. CloudCluster: NULL
  14. CloudStage: NULL
  15. 1 row in set (0.01 sec)

设置默认计算集群

用户可从多个计算集群选择设置为默认计算集群。

语法

为当前用户设置默认计算集群:

  1. SET PROPERTY 'default_cloud_cluster' = '{clusterName}';

为其他用户设置默认计算集群(此操作需要 Admin 权限):

  1. SET PROPERTY FOR {user} 'default_cloud_cluster' = '{clusterName}';

查看当前用户默认计算集群,返回结果中default_cloud_cluster 的值即为默认计算集群:

  1. SHOW PROPERTY;

查看其他用户默认计算集群,此操作需要当前用户具备相关权限,返回结果中default_cloud_cluster 的值即为默认计算集群:

  1. SHOW PROPERTY FOR {user};

查看当前仓库下所有可用的计算集群:

  1. SHOW CLUSTERS;

计算集群操作 - 图2备注

  • 若当前用户拥有 Admin 角色,例如:CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin",则:
    • 可以为自身以及其他用户设置默认计算集群;
    • 可以查看自身以及其他用户的 PROPERTY
  • 若当前用户无 Admin 角色,例如:CREATE USER jack1 IDENTIFIED BY '123456',则:
    • 可以为自身设置默认计算集群;
    • 可以查看自身的 PROPERTY
    • 无法查看所有计算集群,因该操作需要 GRANT ADMIN 权限。
  • 若当前用户未配置默认计算集群,现有系统在执行数据读写操作时将会触发错误。为解决这一问题,用户可通过执行 use @cluster 命令来指定当前 Context 所使用的计算集群,或者使用 SET PROPERTY 语句来设置默认计算集群。
  • 若当前用户已配置默认计算集群,但随后该集群被删除,则在执行数据读写操作时同样会触发错误。用户可通过执行 use @cluster 命令来重新指定当前 Context 所使用的计算集群,或者利用 SET PROPERTY 语句来更新默认集群设置。

示例

  1. // 设置当前用户的默认计算集群
  2. mysql SET PROPERTY 'default_cloud_cluster' = 'regression_test_cluster_name0';
  3. Query OK, 0 rows affected (0.02 sec)
  4. // 展示当前用户的默认计算集群
  5. mysql show PROPERTY;
  6. +------------------------+-------------------------------+
  7. | Key | Value |
  8. +------------------------+-------------------------------+
  9. | cpu_resource_limit | -1 |
  10. | default_cloud_cluster | regression_test_cluster_name0 |
  11. | exec_mem_limit | -1 |
  12. | load_mem_limit | -1 |
  13. | max_query_instances | -1 |
  14. | max_user_connections | 100 |
  15. | quota.high | 800 |
  16. | quota.low | 100 |
  17. | quota.normal | 400 |
  18. | resource.cpu_share | 1000 |
  19. | resource.hdd_read_iops | 80 |
  20. | resource.hdd_read_mbps | 30 |
  21. | resource.io_share | 1000 |
  22. | resource.ssd_read_iops | 1000 |
  23. | resource.ssd_read_mbps | 30 |
  24. | resource_tags | |
  25. | sql_block_rules | |
  26. +------------------------+-------------------------------+
  27. 17 rows in set (0.00 sec)
  28. // 使用 Root 账号在 MySQL Client 中创建 Jack 用户
  29. mysql CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
  30. Query OK, 0 rows affected (0.01 sec)
  31. // 为 jack 用户设置默认计算集群
  32. mysql SET PROPERTY FOR jack 'default_cloud_cluster' = 'regression_test_cluster_name1';
  33. Query OK, 0 rows affected (0.00 sec)
  34. // 查看其他用户的默认计算集群
  35. mysql show PROPERTY for jack;
  36. +------------------------+-------------------------------+
  37. | Key | Value |
  38. +------------------------+-------------------------------+
  39. | cpu_resource_limit | -1 |
  40. | default_cloud_cluster | regression_test_cluster_name1 |
  41. | exec_mem_limit | -1 |
  42. | load_mem_limit | -1 |
  43. | max_query_instances | -1 |
  44. | max_user_connections | 100 |
  45. | quota.high | 800 |
  46. | quota.low | 100 |
  47. | quota.normal | 400 |
  48. | resource.cpu_share | 1000 |
  49. | resource.hdd_read_iops | 80 |
  50. | resource.hdd_read_mbps | 30 |
  51. | resource.io_share | 1000 |
  52. | resource.ssd_read_iops | 1000 |
  53. | resource.ssd_read_mbps | 30 |
  54. | resource_tags | |
  55. | sql_block_rules | |
  56. +------------------------+-------------------------------+
  57. 17 rows in set (0.00 sec)

若用户意图设置为默认计算集群的计算集群不存在,系统会报错并提示用户使用 SHOW CLUSTERS 命令来查看当前仓库下所有有效的计算集群。SHOW CLUSTERS 命令将返回一个结果集,其中:

  • Cluster 列表示计算集群名称。
  • is_current 列表示当前用户是否使用此计算集群。
  • Users 列表示该计算集群被以下用户设置为默认计算集群。
  1. mysql SET PROPERTY 'default_cloud_cluster' = 'not_exist_cluster';
  2. ERROR 5091 (42000): errCode = 2, detailMessage = Cluster not_exist_cluster not exist, use SQL 'SHOW CLUSTERS' to get a valid cluster
  3. mysql show clusters;
  4. +-------------------------------+------------+------------+
  5. | cluster | is_current | users |
  6. +-------------------------------+------------+------------+
  7. | regression_test_cluster_name0 | FALSE | root, jack |
  8. | regression_test_cluster_name5 | FALSE | |
  9. +-------------------------------+------------+------------+
  10. 2 rows in set (0.01 sec)
  11. mysql SET PROPERTY 'default_cloud_cluster' = 'regression_test_cluster_name5';
  12. Query OK, 0 rows affected (0.01 sec)

默认计算集群的选择机制

当用户未明确设置默认计算集群时,系统将自动为用户选择一个具有 Active 后端且用户具有使用权限的计算集群。在特定会话中确定默认计算集群后,默认计算集群将在该会话期间保持不变,除非用户显式更改了默认设置。

在不同次的会话中,若发生以下情况,系统可能会自动更改用户的默认计算集群:

  • 用户失去了在上次会话中所选择默认计算集群的使用权限
  • 有集群被添加或移除
  • 上次所选择的默认计算集群不再具有 Active 后端

其中,情况一和情况二必定会导致系统自动选择的默认计算集群更改,情况三可能会导致更改。

切换计算集群

用户可在存算分离架构中指定使用的数据库和计算集群。

语法

  1. USE { [catalog_name.]database_name[@cluster_name] | @cluster_name }

若数据库或计算集群名称包含是保留关键字,需用反引号将相应的名称 ``` 包围。

示例

指定使用数据库 test_database

  1. USE test_database
  2. 或者
  3. USE `test_database`

指定使用计算集群 test_cluster

  1. USE @test_cluster
  2. 或者
  3. USE @`test_cluster`

同时指定使用数据库 test_database 和计算集群 test_cluster

  1. USE test_database@test_cluster
  2. USE `test_database`@`test_cluster`