Pour changer la version d'un cluster Alibaba Cloud ClickHouse community-compatible edition, utilisez la fonctionnalité de migration d'instance dans la console Alibaba Cloud ClickHouse. Cette fonctionnalité prend en charge la migration complète et incrémentielle des données afin de garantir leur intégrité.
Prérequis
-
Les clusters source et de destination doivent répondre aux exigences suivantes :
-
Il s'agit de clusters de l'édition compatible avec la communauté.
RemarquePour migrer d'un cluster de l'édition compatible avec la communauté vers un cluster de l'édition Enterprise, ou inversement, consultez la rubrique Migrer un cluster ClickHouse de l'édition compatible avec la communauté vers un cluster de l'édition Enterprise.
Les deux clusters sont à l'état Running.
Vous disposez d'un compte de base de données et d'un mot de passe pour chaque cluster.
Les deux clusters appliquent la même politique de stockage hiérarchisé pour les données chaudes et froides.
-
Les deux clusters utilisent le même VPC, se trouvent dans la même région et leurs adresses IP figurent dans les listes d'autorisation respectives. Si cette condition n'est pas remplie, résolvez d'abord le problème de connectivité réseau. Pour plus d'informations, consultez la rubrique Résoudre les problèmes de connectivité réseau entre un cluster de destination et une source de données.
RemarquePour afficher l'adresse IP d'une instance Alibaba Cloud ClickHouse, exécutez la commande
SELECT * FROM system.clusters;. Pour savoir comment configurer une liste d'autorisation, consultez la rubrique Configurer une liste d'autorisation.
-
-
Le cluster de destination doit également respecter les conditions suivantes :
La version est supérieure ou égale à celle du cluster source. Pour connaître la dernière version disponible, consultez la rubrique Édition compatible avec la communauté.
-
L'espace disque disponible (hors stockage froid) représente au moins 1,2 fois l'espace disque utilisé (hors stockage froid) du cluster source.
Chaque table locale du cluster source doit disposer d'une table distribuée unique.
Notes d'utilisation
-
Vitesse de migration : généralement, la vitesse de migration pour un seul nœud du cluster de destination dépasse 20 Mo/s. Si la vitesse d'écriture des données pour un seul nœud du cluster source est également supérieure à 20 Mo/s, évaluez si la vitesse de migration du cluster de destination peut suivre celle d'écriture du cluster source. Dans le cas contraire, la migration risque de ne jamais se terminer.
-
Pendant la migration, le cluster de destination suspend les opérations de fusion, mais le cluster source continue de les exécuter.
-
Les éléments pris en charge incluent les clusters, les bases de données, les tables, les dictionnaires de données, les vues matérialisées, les autorisations utilisateur et les configurations de cluster.
-
Seuls les dictionnaires de données créés à l'aide d'instructions SQL sont migrés. Les dictionnaires de données créés via des fichiers XML ne sont pas pris en charge.
Pour vérifier cela, exécutez la commande suivante :
SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Si un résultat est renvoyé, cela signifie qu'il existe des dictionnaires de données créés à l'aide de fichiers XML. Si un dictionnaire de données accède à un service externe, assurez-vous que ce service est disponible et que sa liste d'autorisation est configurée pour permettre l'accès depuis le cluster. Si la source de données d'un dictionnaire est une table interne de l'instance Alibaba Cloud ClickHouse actuelle et que le paramètre
HOSTest défini sur une adresse IP, le dictionnaire risque de ne plus fonctionner après la migration en raison du changement d'adresse IP. Dans ce cas, confirmez la nouvelle valeurHOSTde l'instance Alibaba Cloud ClickHouse et recréez manuellement le dictionnaire de données.
-
Les tables utilisant le moteur Kafka ou RabbitMQ ne sont pas migrées.
-
Volume de données :
Données froides : la migration des données froides est relativement lente. Nous vous recommandons de supprimer les données froides inutiles du cluster source afin que la taille totale ne dépasse pas 1 To. Sinon, une migration prolongée risque d'échouer.
Données chaudes : si la taille totale des données chaudes dépasse 10 To, la tâche de migration risque fort d'échouer. Nous déconseillons l'utilisation de cette méthode de migration dans ce scénario.
Si vos données ne satisfont pas à ces conditions, envisagez une migration manuelle.
Contenu de la migration :
Pour éviter que les données ne soient dispersées entre les clusters source et de destination, supprimez les tables utilisant les moteurs Kafka et RabbitMQ du cluster source avant de les créer dans le cluster de destination. Vous pouvez également utiliser des groupes de consommateurs différents.
Pour les tables autres que MergeTree, telles que les tables externes et les tables Log, seuls les schémas de table sont migrés.
Si le cluster source contient des tables autres que MergeTree, ces tables du cluster de destination ne contiendront que les schémas et aucune donnée métier après la migration. Pour migrer les données métier de ces tables, utilisez la fonction remote. Pour plus d'informations, consultez la rubrique Migrer des données à l'aide de la fonction remote.
Impact sur les clusters
-
Cluster source : pendant la migration, vous pouvez lire et écrire des données dans le cluster source. Toutefois, les opérations DDL, telles que la création, la suppression ou la modification des métadonnées des bases de données et des tables, ne sont pas prises en charge.
ImportantPour garantir l'achèvement de la migration, les écritures de données dans le cluster source sont automatiquement suspendues dans la fenêtre d'arrêt des écritures configurée lorsque le temps restant estimé est inférieur ou égal à 10 minutes.
Les écritures de données reprennent automatiquement sur le cluster source une fois toutes les données migrées dans la fenêtre d'arrêt des écritures, ou à la fin de cette fenêtre, même si la migration n'est pas terminée.
Cluster de destination : une fois la migration terminée, le cluster de destination effectue des opérations de fusion fréquentes pendant un certain temps. Cela augmente l'utilisation des E/S et peut entraîner une latence plus élevée pour vos requêtes métier. Nous vous recommandons de prendre en compte l'impact potentiel de cette augmentation de latence. Calculez vous-même la durée de fusion. Pour plus d'informations, consultez la rubrique Calculer la durée de fusion après la migration.
Procédure
Effectuez les opérations suivantes sur le cluster de destination, et non sur le cluster source.
Étape 1 : Enregistrer et nettoyer les tables des moteurs Kafka/RabbitMQ
Si le cluster source ne contient pas de tables utilisant les moteurs Kafka/RabbitMQ, ignorez les étapes 1, 5, 6 et 7, et commencez directement par l'étape 2.
Avant de démarrer la migration, enregistrez les définitions de toutes les tables utilisant les moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval dans le cluster source, gérez les tables implicites, puis supprimez ces tables pour éviter les erreurs de migration.
-
Connectez-vous au cluster source et interrogez toutes les tables des moteurs Kafka et RabbitMQ ainsi que leurs dépendances en aval.
/* create_table_query: table definition dependencies_database: database of the table that depends on this table dependencies_table: table that depends on this table From dependencies_database and dependencies_table, you can identify the materialized views that depend on Kafka/RabbitMQ tables */ SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka'); -
Consultez la définition de la vue matérialisée pour vérifier si sa table cible est une table implicite.
/* View the materialized view definition. If the target table of the materialized view is an implicit table, pay special attention: Dropping the materialized view will also drop the implicit table, causing data loss. Example: If CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] does not specify TO, the system automatically creates an implicit table, possibly in the format '.inner_id.<TABLE_UUID>' or '.inner.<TABLE>' */ SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>'; -
Si la table cible d'une vue matérialisée est une table implicite, renommez la table cible avec un nouveau nom pour éviter la perte de données lors de la suppression ultérieure de la vue matérialisée.
-- Rename the implicit target table to a new name to protect data RENAME TABLE <DATABASE>.`.inner_id.<TABLE_UUID>` TO <DATABASE>.<new_target_table_name>; -
Supprimez les tables des moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval.
-- Drop materialized views first DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- Then drop Kafka/RabbitMQ engine tables DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Assurez-vous de sauvegarder toutes les instructions DDL enregistrées. Vous en aurez besoin pour reconstruire ces tables à la fois sur le cluster source et sur le cluster de destination ultérieurement. Si vous avez effectué une opération RENAME, utilisez la clause TO pointant vers la table cible renommée lors de la reconstruction de la vue matérialisée. Pour plus d'informations, consultez la documentation CREATE MATERIALIZED VIEW.
Étape 2 : Créer une tâche de migration
Connectez-vous à la console Alibaba Cloud ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster de destination.
Dans le volet de navigation de gauche, cliquez sur .
-
Cliquez sur Create Migration Task.
-
Configurez les instances source et de destination.
Saisissez les informations requises et cliquez sur Test Connectivity and Proceed.
RemarqueSi le test de connexion réussit, passez à l'étape suivante. Si le test échoue, reconfigurez les instances source et de destination selon les instructions affichées.
Source Instance : sélectionnez la source access method (par exemple Express Connect/VPN Gateway/Smart Access Gateway/ECS-hosted ClickHouse), puis spécifiez Instance Region, Cluster Name, Source Cluster Name, VPC IP Address, Database Account et Database Password.
Destination Instance : spécifiez Instance Region, Instance ID, Database Account et Database Password.
-
Confirmez le contenu de la migration.
Vérifiez le contenu de la migration, puis cliquez sur Next: Pre-detect and Start Synchronization.
-
Le système effectue une vérification préalable et démarre la tâche.
Le système effectue la Instance Status Detection, la Storage Space Detection et la Local Table and Distributed Table Detection sur les instances source et de destination.
-
Si la vérification préalable réussit :
Passez en revue l'impact sur les instances pendant la migration.
-
Définissez le Time of Stopping Data Writing.
RemarqueLes écritures dans le cluster source doivent être arrêtées durant les 10 dernières minutes de la migration pour garantir la cohérence des données.
Pour assurer un taux de réussite élevé, nous vous recommandons de définir la durée d'arrêt des écritures sur au moins 30 minutes.
Une tâche de migration doit être achevée dans les cinq jours suivant sa création. Par conséquent, la date de fin du Time of Stopping Data Writing doit être antérieure ou égale à
current date + 5 days.Pour minimiser l'impact sur votre activité, nous vous recommandons de définir la fenêtre d'arrêt des écritures pendant vos heures creuses.
-
Cliquez sur Completed.
RemarqueAprès avoir cliqué sur ce bouton, la tâche est créée et démarrée.
-
Si la vérification préalable échoue, suivez les instructions pour résoudre les problèmes et réessayez la migration des données. Le tableau ci-dessous décrit les éléments de vérification préalable et leurs exigences.
|
**Check item**
|
**Requirement**
| | --- | --- | |
**Instance Status Detection**
|
Assurez-vous qu'aucune tâche de gestion, telle que la mise à l'échelle ou les modifications de configuration, n'est en cours d'exécution sur le cluster source ou de destination. Vous ne pouvez pas démarrer la migration si une tâche est en cours.
| |
**Storage Space Detection**
|
L'espace de stockage disponible du cluster de destination doit représenter au moins 1,2 fois l'espace de stockage utilisé du cluster source.
| |
**Local Table and Distributed Table Detection**
|
La vérification échoue si une table locale du cluster source n'a pas de table distribuée correspondante ou si la table distribuée n'est pas unique. Vous devez supprimer les tables distribuées supplémentaires ou créer une table distribuée unique pour chaque table locale.
|
-
-
Étape 3 : Évaluer l'achèvement de la migration
Si la vitesse d'écriture du cluster source est inférieure à 20 Mo/s, vous pouvez ignorer cette étape.
Si la vitesse d'écriture du cluster source est supérieure à 20 Mo/s, vérifiez la vitesse d'écriture réelle du cluster de destination pour évaluer si la migration peut s'achever. La vitesse d'écriture du cluster de destination doit suivre celle du cluster source. Pour ce faire, suivez ces étapes :
Vérifiez le débit disque du cluster de destination pour déterminer sa vitesse d'écriture réelle. Pour plus d'informations, consultez la rubrique Afficher les informations de surveillance du cluster.
-
Comparez les vitesses d'écriture des clusters de destination et source.
Si la vitesse d'écriture du cluster de destination est supérieure à celle du cluster source, la migration a fortement de chances de réussir. Passez à l'étape 4.
Si la vitesse d'écriture du cluster de destination est inférieure à celle du cluster source, la migration a fortement de chances d'échouer. Nous vous recommandons d'annuler la tâche de migration et d'effectuer une migration manuelle.
Étape 4 : Afficher la tâche de migration
Sur la page Instance Status Detection, cliquez sur l'onglet Storage Space Detection, puis cliquez sur l'ID du cluster de destination.
-
Dans le volet de navigation de gauche, cliquez sur Local Table and Distributed Table Detection > Migration from ClickHouse.
Sur la page de liste des migrations d'instances, affichez le Migration Status, les Running Information et la Data Write-Stop Window de la tâche.
RemarqueLorsque le temps restant estimé dans la colonne Running Information est inférieur ou égal à 10 minutes et que le Migration Status est Migrating, un arrêt des écritures est déclenché sur le cluster source pour garantir la cohérence des données. Les règles sont les suivantes :
Si l'heure de déclenchement se situe dans la fenêtre d'arrêt des écritures configurée, les écritures dans le cluster source sont arrêtées.
Si l'heure de déclenchement se situe en dehors de la fenêtre d'arrêt des écritures configurée mais est antérieure ou égale à
task start (that is, task creation) date + 5 days, vous pouvez modifier la fenêtre d'arrêt des écritures pour poursuivre la migration.Si l'heure de déclenchement se situe en dehors de la fenêtre d'arrêt des écritures configurée et est postérieure à
task start (that is, task creation) date + 5 days, la migration échoue. Vous devez annuler la tâche de migration, effacer les données migrées du cluster de destination et créer une nouvelle tâche de migration.
ImportantSi le cluster source contient des tables utilisant les moteurs Kafka/RabbitMQ : lorsque la tâche de migration entre dans la phase de data migration (c'est-à-dire que la migration du schéma de table est terminée), effectuez l'étape 5 pour reconstruire les tables des moteurs Kafka/RabbitMQ sur le cluster source afin que les données incrémentielles recommencent à circuler et soient synchronisées vers le cluster de destination.
Peu avant la fenêtre d'arrêt des écritures configurée, effectuez l'étape 6 pour supprimer les tables des moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval sur le cluster source, afin d'éviter que l'accumulation de messages pendant la période d'arrêt des écritures ne provoque une incohérence des données.
Étape 5 : Reconstruire les tables des moteurs Kafka/RabbitMQ sur le cluster source
Une fois que la tâche de migration est entrée dans la phase de data migration (c'est-à-dire que la migration du schéma de table est terminée), utilisez les instructions DDL précédemment enregistrées pour reconstruire les tables des moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval sur le cluster source. Une fois reconstruites, les données incrémentielles recommencent à circuler et sont automatiquement synchronisées vers le cluster de destination.
Si vous avez précédemment effectué une opération RENAME sur des tables cibles implicites, utilisez la clause TO pointant vers la table cible renommée lors de la reconstruction de la vue matérialisée. Pour plus d'informations, consultez la documentation CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables on the source cluster
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (pointing to the renamed target table)
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;
Étape 6 : Supprimer les tables des moteurs Kafka/RabbitMQ sur le cluster source
Peu avant la fenêtre d'arrêt des écritures configurée, supprimez les tables des moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval sur le cluster source pour arrêter les écritures de données incrémentielles et garantir la cohérence de la synchronisation finale des données.
-- Delete materialized views first
DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;
-- Then delete Kafka/RabbitMQ engine tables
DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;
Étape 7 : Reconstruire les tables des moteurs Kafka/RabbitMQ sur le cluster de destination
Une fois la tâche de migration terminée, utilisez les instructions DDL précédemment enregistrées pour reconstruire les tables des moteurs Kafka/RabbitMQ et leurs vues matérialisées en aval sur le cluster de destination afin de restaurer le pipeline de consommation des données incrémentielles.
Si vous avez précédemment effectué une opération RENAME sur des tables cibles implicites, utilisez la clause TO pointant vers la table cible renommée lors de la reconstruction de la vue matérialisée. Pour plus d'informations, consultez la documentation CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables on the destination cluster
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;
Étape 8 : (Facultatif) Annuler la tâche de migration
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster de destination.
Dans le volet de navigation de gauche, cliquez sur Data Migration and Synchronization > Migration from ClickHouse.
Dans la colonne Actions de la tâche de migration, cliquez sur Cancel Migration.
-
Dans la boîte de dialogue Cancel Migration, cliquez sur OK.
RemarqueAprès l'annulation de la migration, la liste des tâches n'est pas mise à jour immédiatement. Actualisez la page périodiquement pour vérifier l'état de la tâche.
Une fois la tâche annulée, son Migration Status passe à Completed.
Avant de démarrer une nouvelle migration, vous devez effacer les données migrées du cluster de destination pour éviter la duplication des données.
Étape 9 : (Facultatif) Modifier la fenêtre d'arrêt des écritures
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster de destination.
Dans le volet de navigation de gauche, cliquez sur Data Migration and Synchronization > Clusters.
Dans la colonne Clusters of Community-compatible Edition de la tâche de migration, cliquez sur Data Migration and Synchronization.
-
Dans la boîte de dialogue Migration from ClickHouse, sélectionnez un nouveau Actions.
RemarqueLes règles de définition du Modify Data Write-Stop Time Window sont identiques à celles de la création d'une tâche de migration.
Cliquez sur Modify Data Write-Stop Time Window.
Documentation connexe
Pour savoir comment migrer des données d'un cluster ClickHouse autogéré vers Alibaba Cloud ClickHouse, consultez la rubrique Migrer des données d'un cluster ClickHouse autogéré vers un cluster Alibaba Cloud ClickHouse de l'édition compatible avec la communauté.