Une instance ApsaraDB for SelectDB peut contenir plusieurs clusters de calcul. Chaque cluster constitue un pool de ressources de calcul indépendant permettant de diriger différentes charges de travail vers des clusters distincts, par exemple pour isoler le trafic de lecture du trafic d'écriture ou séparer les traitements en ligne des traitements hors ligne.
Cette rubrique explique comment lister les clusters, basculer de l'un à l'autre, accorder ou révoquer l'accès utilisateur et définir un cluster par défaut.
En production, évitez de renommer les clusters sauf nécessité absolue. Les noms de cluster apparaissent dans les requêtes et les URL JDBC. Le changement de nom d'un cluster invalide toutes les permissions précédemment accordées.
Lister les clusters
La commande SHOW CLUSTERS retourne tous les clusters de calcul de l'instance actuelle.
Syntaxe
SHOW CLUSTERS;
Exemple de sortie
+---------------+------------+-------------+
| cluster | is_current | users |
+---------------+------------+-------------+
| test_cluster | FALSE | admin, jack |
| test_cluster1 | FALSE | |
+---------------+------------+-------------+
| Colonne | Description |
|---|---|
cluster |
Nom du cluster |
is_current |
Indique si l'utilisateur actuel utilise ce cluster |
users |
Utilisateurs pouvant définir ce cluster comme valeur par défaut |
Basculer vers un cluster
Utilisez USE pour sélectionner la base de données et le cluster de calcul de la session en cours.
Syntaxe
USE { [catalog_name.]database_name[@cluster_name] | @cluster_name }
Paramètres
| Paramètre | Description |
|---|---|
catalog_name |
Nom du catalogue |
database_name |
Nom de la base de données |
cluster_name |
Nom du cluster |
Si le nom d'une base de données ou d'un cluster est un mot-clé réservé, placez-le entre accents graves. Exemple :
USE @`interval`
Exemples
Basculer uniquement vers un cluster spécifique :
USE @test_cluster;
Basculer vers une base de données et un cluster spécifiques :
USE test_database@test_cluster;
Spécifier la base de données et le cluster dans une URL Java Database Connectivity (JDBC) :
jdbc:mysql://selectdb-cn-****:9030/test_database@test_cluster
Accorder l'accès à un cluster
Accordez le privilège USAGE_PRIV sur un cluster à un utilisateur pour lui permettre d'y exécuter des requêtes.
Syntaxe
GRANT USAGE_PRIV ON CLUSTER {cluster_name} TO {user}
Paramètres
| Paramètre | Description |
|---|---|
cluster_name |
Nom du cluster |
user |
Nom d'utilisateur |
Exemple 1 : Accorder l'accès à un cluster existant
Accordez à jack l'accès à test_cluster et vérifiez le résultat :
GRANT USAGE_PRIV ON CLUSTER test_cluster TO jack;
SHOW GRANTS FOR jack\G;
Sortie attendue :
UserIdentity: 'jack'@'%'
Password: Yes
GlobalPrivs: Admin_priv (false)
CatalogPrivs: NULL
DatabasePrivs: internal.information_schema: Select_priv (false)
TablePrivs: NULL
ResourcePrivs: NULL
CloudCluster: test_cluster: Usage_priv (false)
CloudStage: NULL
Exemple 2 : Accorder l'accès à un cluster inexistant
La commande GRANT réussit même si le cluster n'existe pas. Le privilège est enregistré, mais toute tentative d'utilisation du cluster échoue lors de l'exécution.
GRANT USAGE_PRIV ON CLUSTER not_exist_cluster TO jack;
SHOW GRANTS FOR jack\G;
Le champ CloudCluster affiche le privilège :
CloudCluster: not_exist_cluster: Usage_priv (false)
Toute tentative d'utilisation du cluster retourne une erreur :
USE information_schema@not_exist_cluster;
ERROR 5091 (42000): Cluster not_exist_cluster not exist
Révoquer l'accès à un cluster
Supprimez le privilège USAGE_PRIV d'un utilisateur sur un cluster.
Syntaxe
REVOKE USAGE_PRIV ON CLUSTER {cluster_name} FROM {user}
Paramètres
| Paramètre | Description |
|---|---|
cluster_name |
Nom du cluster |
user |
Nom d'utilisateur |
Exemple
Révoquez l'accès de jack à test_cluster et vérifiez le résultat :
REVOKE USAGE_PRIV ON CLUSTER test_cluster FROM jack;
SHOW GRANTS FOR jack\G;
Sortie attendue — CloudCluster est désormais NULL :
UserIdentity: 'jack'@'%'
Password: Yes
GlobalPrivs: Admin_priv (false)
CatalogPrivs: NULL
DatabasePrivs: internal.information_schema: Select_priv (false)
TablePrivs: NULL
ResourcePrivs: NULL
CloudCluster: NULL
CloudStage: NULL
Définir un cluster par défaut
Définir un cluster par défaut dispense les utilisateurs de spécifier @cluster_name dans chaque requête ; le système dirige alors automatiquement leurs requêtes vers ce cluster.
Sélection automatique du cluster par défaut
En l'absence de cluster par défaut explicite, le système sélectionne automatiquement un cluster disposant d'un backend actif auquel l'utilisateur a accès. Cette sélection reste stable au sein d'une même session, mais peut changer entre deux sessions dans les cas suivants :
L'utilisateur perd l'accès au cluster par défaut précédent (la sélection change obligatoirement).
Un cluster est créé ou supprimé (la sélection change obligatoirement).
Le cluster par défaut précédent ne dispose plus d'aucun backend actif (la sélection peut changer).
Pour éviter tout comportement inattendu, vérifiez régulièrement que le cluster par défaut souhaité reste accessible.
Syntaxe
-- Set a default cluster for the current user
SET PROPERTY 'default_cloud_cluster' = '{clusterName}';
-- Set a default cluster for another user (requires admin)
SET PROPERTY FOR {user} 'default_cloud_cluster' = '{clusterName}';
Paramètres
| Paramètre | Description |
|---|---|
clusterName |
Nom du cluster |
user |
Nom d'utilisateur. La modification des propriétés d'un autre utilisateur nécessite des permissions d'administrateur. |
Exemple 1 : Définir un cluster par défaut pour l'utilisateur actuel
SET PROPERTY 'default_cloud_cluster' = 'test_cluster';
SHOW PROPERTY;
Sortie attendue :
+------------------------+-------------------------------+
| Key | Value |
+------------------------+-------------------------------+
| cpu_resource_limit | -1 |
| default_cloud_cluster | test_cluster |
| exec_mem_limit | -1 |
| load_mem_limit | -1 |
| max_query_instances | -1 |
| max_user_connections | 100 |
| quota.high | 800 |
| quota.low | 100 |
| quota.normal | 400 |
| resource.cpu_share | 1000 |
| resource.hdd_read_iops | 80 |
| resource.hdd_read_mbps | 30 |
| resource.io_share | 1000 |
| resource.ssd_read_iops | 1000 |
| resource.ssd_read_mbps | 30 |
| resource_tags | |
| sql_block_rules | |
+------------------------+-------------------------------+
Exemple 2 : Définir un cluster par défaut pour un autre utilisateur (droits administrateur requis)
Créez un utilisateur avec le rôle administrateur, puis vérifiez son cluster par défaut :
CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
SHOW PROPERTY FOR jack;
Sortie attendue :
+------------------------+-------------------------------+
| Key | Value |
+------------------------+-------------------------------+
| cpu_resource_limit | -1 |
| default_cloud_cluster | test_cluster1 |
| exec_mem_limit | -1 |
| load_mem_limit | -1 |
| max_query_instances | -1 |
| max_user_connections | 100 |
| quota.high | 800 |
| quota.low | 100 |
| quota.normal | 400 |
| resource.cpu_share | 1000 |
| resource.hdd_read_iops | 80 |
| resource.hdd_read_mbps | 30 |
| resource.io_share | 1000 |
| resource.ssd_read_iops | 1000 |
| resource.ssd_read_mbps | 30 |
| resource_tags | |
| sql_block_rules | |
+------------------------+-------------------------------+
Exemple 3 : Définir un cluster inexistant comme valeur par défaut
Si le cluster spécifié n'existe pas, la commande échoue immédiatement :
SET PROPERTY 'default_cloud_cluster' = 'not_exist_cluster';
ERROR 5091 (42000): errCode = 2, detailMessage = Cluster not_exist_cluster not exist, use SQL 'SHOW CLUSTERS' to get a valid cluster
Exécutez SHOW CLUSTERS pour afficher tous les clusters disponibles :
SHOW CLUSTERS;
+---------------+------------+-------------+
| cluster | is_current | users |
+---------------+------------+-------------+
| test_cluster | FALSE | admin, jack |
| test_cluster1 | FALSE | |
+---------------+------------+-------------+
FAQ
Le message « No cloud cluster name selected. » s'affiche lors de la connexion. Que faire ?
Accordez à l'utilisateur le privilège USAGE_PRIV sur au moins un cluster. Consultez la section Accorder l'accès à un cluster.