在存算分离架构下,可以将一个或多个计算节点 (BE) 组成一个计算集群 (Compute Cluster)。本文档介绍如何使用计算集群,其中涉及的操作包括:
- 查看所有计算集群
- 计算集群授权
- 在用户级别绑定计算集群 (
default_cloud_cluster) 以达到用户级别的隔离效果
备注
本文涉及的 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)
10. mysql SET PROPERTY 'default_cloud_cluster' = 'regression_test_cluster_name5';
11. 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)
5. mysql GRANT USAGE_PRIV ON CLUSTER regression_test_cluster_name0 TO jack;
6. Query OK, 0 rows affected (0.01 sec)
8. // 使用 Jack 登录 MySQL Client
9. mysql use d1@regression_test_cluster_name0;
10. Database changed
12. mysql show grants for jack\G
13. *************************** 1. row ***************************
14. UserIdentity: 'jack'@'%'
15. Password: Yes
16. GlobalPrivs: Admin_priv (false)
17. CatalogPrivs: NULL
18. DatabasePrivs: internal.information_schema: Select_priv (false)
19. TablePrivs: NULL
20. ResourcePrivs: NULL
21. CloudCluster: regression_test_cluster_name0: Usage_priv (false)
22. CloudStage: NULL
23. 1 row in set (0.00 sec)
25. mysql select * from t1;
26. +------+------+-------+
27. | id | name | score |
28. +------+------+-------+
29. | 1 | aaa | 20 |
30. | 2 | bbb | 320 |
31. | 3 | ccc | 30 |
32. | 4 | ddd | 120 |
33. | 5 | eee | 30 |
34. | 6 | fff | 30 |
35. | 7 | ggg | 90 |
36. | 8 | hhh | 30 |
37. +------+------+-------+
38. 8 rows in set (12.70 sec)
40. mysql insert into t1 (id, name, score) values (8, "hhh", 30);
41. Query OK, 1 row affected (7.22 sec)
42. {'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)
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: not_exist_cluster: Usage_priv (false)
14. CloudStage: NULL
15. 1 row in set (0.00 sec)
17. 切换到 Jack 账号,执行 use @not_exist_cluster,将出现提示 not_exist_cluster 不存在的报错提示
19. mysql use information_schema@not_exist_cluster;
20. No connection. Trying to reconnect...
21. Connection id: 1
22. Current database: *** NONE ***
24. 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)
5. mysql show grants for jack\G
6. *************************** 1. row ***************************
7. UserIdentity: 'jack'@'%'
8. Password: Yes
9. GlobalPrivs: Admin_priv (false)
10. CatalogPrivs: NULL
11. DatabasePrivs: internal.information_schema: Select_priv (false)
12. TablePrivs: NULL
13. ResourcePrivs: NULL
14. CloudCluster: NULL
15. CloudStage: NULL
16. 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;
备注
- 若当前用户拥有 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)
5. // 展示当前用户的默认计算集群
6. mysql show PROPERTY;
7. +------------------------+-------------------------------+
8. | Key | Value |
9. +------------------------+-------------------------------+
10. | cpu_resource_limit | -1 |
11. | default_cloud_cluster | regression_test_cluster_name0 |
12. | exec_mem_limit | -1 |
13. | load_mem_limit | -1 |
14. | max_query_instances | -1 |
15. | max_user_connections | 100 |
16. | quota.high | 800 |
17. | quota.low | 100 |
18. | quota.normal | 400 |
19. | resource.cpu_share | 1000 |
20. | resource.hdd_read_iops | 80 |
21. | resource.hdd_read_mbps | 30 |
22. | resource.io_share | 1000 |
23. | resource.ssd_read_iops | 1000 |
24. | resource.ssd_read_mbps | 30 |
25. | resource_tags | |
26. | sql_block_rules | |
27. +------------------------+-------------------------------+
28. 17 rows in set (0.00 sec)
30. // 使用 Root 账号在 MySQL Client 中创建 Jack 用户
31. mysql CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
32. Query OK, 0 rows affected (0.01 sec)
34. // 为 jack 用户设置默认计算集群
35. mysql SET PROPERTY FOR jack 'default_cloud_cluster' = 'regression_test_cluster_name1';
36. Query OK, 0 rows affected (0.00 sec)
38. // 查看其他用户的默认计算集群
39. mysql show PROPERTY for jack;
40. +------------------------+-------------------------------+
41. | Key | Value |
42. +------------------------+-------------------------------+
43. | cpu_resource_limit | -1 |
44. | default_cloud_cluster | regression_test_cluster_name1 |
45. | exec_mem_limit | -1 |
46. | load_mem_limit | -1 |
47. | max_query_instances | -1 |
48. | max_user_connections | 100 |
49. | quota.high | 800 |
50. | quota.low | 100 |
51. | quota.normal | 400 |
52. | resource.cpu_share | 1000 |
53. | resource.hdd_read_iops | 80 |
54. | resource.hdd_read_mbps | 30 |
55. | resource.io_share | 1000 |
56. | resource.ssd_read_iops | 1000 |
57. | resource.ssd_read_mbps | 30 |
58. | resource_tags | |
59. | sql_block_rules | |
60. +------------------------+-------------------------------+
61. 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
4. mysql show clusters;
5. +-------------------------------+------------+------------+
6. | cluster | is_current | users |
7. +-------------------------------+------------+------------+
8. | regression_test_cluster_name0 | FALSE | root, jack |
9. | regression_test_cluster_name5 | FALSE | |
10. +-------------------------------+------------+------------+
11. 2 rows in set (0.01 sec)
13. mysql SET PROPERTY 'default_cloud_cluster' = 'regression_test_cluster_name5';
14. 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`
