Les clusters ClickHouse auto-gérés présentent souvent des problèmes d'instabilité, une faible évolutivité, des mises à niveau complexes et une reprise après sinistre limitée. C'est pourquoi de nombreux clients migrent leurs clusters ClickHouse auto-gérés vers un service PaaS cloud. Cette rubrique explique comment migrer d'un cluster ClickHouse auto-géré vers un cluster ApsaraDB for ClickHouse édition compatible communautaire.
Prérequis
-
Cluster cible :
Le cluster doit être une édition compatible communautaire.
Un compte de base de données et un mot de passe sont nécessaires. Pour créer un compte ClickHouse, consultez Gérer les comptes d'un cluster édition compatible communautaire.
Le compte doit disposer du niveau d'autorisations le plus élevé. Pour accorder des autorisations, consultez Modifier les autorisations.
-
Cluster auto-géré :
Un compte de base de données et un mot de passe sont requis.
Le compte doit posséder des autorisations de lecture sur les bases de données et les tables, ainsi que des autorisations pour exécuter des commandes SYSTEM.
-
Le cluster cible et le cluster auto-géré doivent pouvoir communiquer via le réseau.
Si le cluster auto-géré et le cluster cible se trouvent dans le même VPC, vous devez également ajouter les adresses IP de tous les nœuds du cluster cible et le bloc CIDR IPv4 de son vSwitch à la liste d'autorisation du cluster auto-géré.
Pour configurer une liste d'autorisation pour un cluster ApsaraDB for ClickHouse, consultez Configurer une liste d'autorisation.
Pour configurer une liste d'autorisation dans un cluster auto-géré, reportez-vous à la documentation produit correspondante.
Pour afficher les adresses IP de tous les nœuds du cluster ApsaraDB for ClickHouse, exécutez
SELECT * FROM system.clusters;.-
Pour obtenir le bloc CIDR IPv4 du vSwitch de votre cluster ApsaraDB for ClickHouse, procédez comme suit :
Dans la console ApsaraDB for ClickHouse, accédez à la page Cluster Information du cluster cible. Dans la section Network Information, récupérez l'VSwitch ID.
Dans la liste des vSwitch, utilisez l'Instance ID pour trouver le vSwitch cible et obtenir son IPv4 CIDR.
Si votre cluster auto-géré et le cluster cible se trouvent dans des VPC différents, ou si le cluster auto-géré est hébergé dans un centre de données local ou sur une autre plateforme cloud, vous devez d'abord établir la connectivité réseau. Pour plus d'informations, consultez Comment établir une connexion réseau entre un cluster cible et une source de données ?.
Validation de la migration
Avant de lancer la migration des données, nous vous recommandons vivement de créer un environnement de test afin de valider la compatibilité métier, les performances et le plan de migration. Une fois cette validation terminée, vous pourrez procéder à la migration des données dans votre environnement de production. Cette étape cruciale permet d'identifier et de résoudre en amont les problèmes potentiels, garantissant ainsi une migration fluide et évitant toute perturbation de votre environnement de production.
Créez une tâche de migration pour transférer les données. Pour connaître la procédure détaillée, reportez-vous à cette rubrique.
Pour plus d'informations sur la compatibilité de la migration cloud, l'analyse des goulots d'étranglement des performances et la garantie du succès de la migration, consultez Analyse et solutions pour la compatibilité et les goulots d'étranglement des performances lors de la migration d'un cluster ClickHouse auto-géré vers le cloud.
Choisir une solution
|
Solution de migration |
Avantages |
Inconvénients |
Cas d'utilisation |
|
Offre une interface visuelle. Aucune migration manuelle des métadonnées n'est requise. |
Prend uniquement en charge la migration complète et incrémentielle de l'ensemble du cluster. Impossible de migrer des bases de données, des tables ou des données historiques spécifiques. |
Migration d'un cluster entier. |
|
|
Permet de contrôler précisément les bases de données et les tables à migrer. |
Implique des étapes complexes et une migration manuelle des métadonnées. |
|
Procédure
Migration via la console
Limites
Le cluster de destination doit exécuter la version 21.8 ou ultérieure.
Remarques
Pendant la migration
-
Durant la migration, le processus de fusion (merge) est suspendu dans le cluster de destination, mais se poursuit dans le cluster auto-géré.
RemarqueSi une tâche de migration s'exécute pendant une longue durée, un excès de métadonnées peut s'accumuler dans le cluster de destination. Nous recommandons de limiter la durée des tâches de migration à 5 jours maximum. Les tâches dépassant cette limite sont automatiquement annulées.
Le cluster de destination doit être le cluster
default. Si votre cluster auto-géré utilise un nom différent, le service convertit automatiquement la définition duclusterdans les tables distribuées endefault.
Périmètre de migration
-
Objets pris en charge
-
Bases de données, dictionnaires de données et vues matérialisées.
-
Ce service prend en charge la migration des dictionnaires de données créés via SQL, mais pas ceux créés via XML.
Pour le vérifier, exécutez l'instruction suivante :
SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Si l'instruction retourne des lignes, cela indique que vous possédez des dictionnaires de données créés au format XML. Lorsqu'un dictionnaire de données accède à un service externe, assurez-vous que ce service est disponible et que le cluster figure bien dans sa liste d'autorisation. Si la source de données d'un dictionnaire est une table interne du cluster ClickHouse actuel et que le paramètre
HOSTdans la définition est une adresse IP, l'accès au dictionnaire peut échouer après la migration en raison d'un changement d'adresse IP. Vous devrez alors reconfirmer le paramètreHOSTdu cluster ClickHouse actuel et recréer manuellement le dictionnaire de données.
-
Schémas de table : Tous les schémas de table, à l'exception des tables utilisant les moteurs Kafka et RabbitMQ.
Données : Migration incrémentielle des données provenant des tables de la famille MergeTree.
-
-
Objets et données non pris en charge
Tables utilisant les moteurs Kafka et RabbitMQ, ainsi que leurs données.
Données issues de tables autres que MergeTree, telles que les tables externes et les tables Log.
ImportantVous devez migrer manuellement les éléments non pris en charge listés ci-dessus.
-
Limites de volume de données
Données froides : La migration des données froides est lente. Pour éviter les échecs dus à des durées de migration trop longues, nous recommandons de purger les données froides de votre cluster auto-géré afin que le volume total ne dépasse pas 1 To.
Données chaudes : Si le volume de données chaudes dépasse 10 To, la tâche de migration risque d'échouer.
Si votre volume de données dépasse ces limites, envisagez d'utiliser plutôt la solution de migration manuelle.
Impact sur le cluster
-
Cluster auto-géré :
La lecture des données depuis le cluster auto-géré augmente sa consommation de CPU et de mémoire.
Les opérations DDL ne sont pas autorisées.
-
Cluster de destination :
L'écriture de données dans le cluster de destination augmente sa consommation de CPU et de mémoire.
Les opérations DDL sont interdites sur les bases de données et les tables en cours de migration.
Cette restriction ne s'applique pas aux autres bases de données et tables.
Le processus de fusion est interrompu uniquement pour les bases de données et les tables en cours de migration.
Le cluster redémarre avant le début de la tâche de migration.
Une fois la migration terminée, le cluster effectue fréquemment des opérations de fusion. Cela accroît l'utilisation des E/S et peut entraîner une latence plus élevée pour les requêtes métier. Anticipez l'impact potentiel de cette latence accrue. Vous devez calculer la durée spécifique des opérations de fusion. Pour obtenir des instructions, consultez Calculer la durée de fusion après la migration.
Procédure
Étape 1 : Vérifier le cluster et activer les tables système
Avant de migrer les données, modifiez le fichier config.xml de votre cluster auto-géré pour activer la migration incrémentielle. Les modifications requises dépendent de l'activation ou non des tables system.part_log et system.query_log.
Si les tables système ne sont pas activées
Si vous n'avez pas activé system.part_log et system.query_log, ajoutez les configurations suivantes au fichier config.xml.
system.part_log
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
system.query_log
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
Si les tables système sont activées
-
Assurez-vous que les configurations de
system.part_logetsystem.query_logdans le fichier config.xml correspondent au contenu suivant. Des incohérences peuvent provoquer l'échec ou le ralentissement de la migration des données.system.part_log
<part_log> <database>system</database> <table>part_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </part_log>system.query_log
<query_log> <database>system</database> <table>query_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log> Après avoir modifié la configuration, exécutez les instructions
drop table system.part_logetdrop table system.query_log. L'insertion de données dans une table métier recrée automatiquement les tablessystem.part_logetsystem.query_log.
Étape 2 : Configurer la compatibilité du cluster de destination
Configurez le cluster de destination pour qu'il soit compatible avec le cluster auto-géré. Cette étape minimise les modifications applicatives requises après la migration.
-
Obtenez et comparez les numéros de version du cluster de destination et du cluster auto-géré.
Connectez-vous au cluster de destination et au cluster auto-géré, puis exécutez l'instruction suivante sur chacun d'eux pour obtenir leurs numéros de version. Pour plus d'informations sur la connexion à ApsaraDB for ClickHouse, consultez Se connecter à une base de données.
SELECT version(); -
Si les versions diffèrent, connectez-vous au cluster de destination et définissez le paramètre de compatibilité pour qu'il corresponde à la version du cluster auto-géré. Cela garantit une cohérence maximale des fonctionnalités. Voici un exemple :
SET GLOBAL compatibility = '22.8';
Étape 3 : (Facultatif) Activer le moteur MaterializedMySQL
Si votre cluster auto-géré contient des tables utilisant le moteur MaterializedMySQL, exécutez l'instruction suivante pour activer ce moteur.
SET GLOBAL allow_experimental_database_materialized_mysql = 1;
La communauté ClickHouse ne maintient plus le moteur MaterializedMySQL. Après la migration vers le cloud, nous recommandons d'utiliser Data Transmission Service (DTS) pour synchroniser les données MySQL.
Comme le moteur MaterializedMySQL n'est plus maintenu, Data Transmission Service (DTS) utilise des tables ReplacingMergeTree au lieu de tables MaterializedMySQL lorsqu'il synchronise des données MySQL vers ApsaraDB for ClickHouse. Pour plus d'informations, consultez Compatibilité MaterializedMySQL.
Pour plus d'informations sur l'utilisation de DTS afin de migrer des données MySQL vers ApsaraDB for ClickHouse, consultez les rubriques suivantes :
Étape 4 : Enregistrer et nettoyer les tables de moteur Kafka/RabbitMQ
Avant de démarrer la migration, notez les définitions de toutes les tables de moteur Kafka/RabbitMQ et de leurs vues matérialisées en aval dans le cluster auto-géré, gérez les tables implicites, puis supprimez ces tables pour éviter les erreurs de migration.
-
Connectez-vous au cluster auto-géré et interrogez toutes les tables de moteur 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 (RENAME) pour éviter toute 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 de moteur 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>;
Veillez à conserver toutes les instructions DDL enregistrées. Vous en aurez besoin pour reconstruire ces tables ultérieurement, tant sur le cluster auto-géré que sur le cluster de destination. 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 CREATE MATERIALIZED VIEW.
Étape 5 : Créer une tâche de migration de données
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition et cliquez sur l'ID du cluster de destination.
Dans le volet de navigation de gauche, choisissez .
-
Sur la page des tâches de migration, cliquez sur Create Migration Task.
-
Configurez les instances source et de destination.
Définissez les paramètres suivants et cliquez sur Test Connectivity and Proceed.
RemarqueSi le test de connexion réussit, passez à l'étape suivante. En cas d'échec, reconfigurez les instances source et de destination en suivant les indications affichées.
Paramètres du cluster source
Paramètre
Description
Exemple
Source Access Method
Sélectionnez Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance.
Express Connect, VPN Gateway, Smart Access Gateway, or Self-managed ClickHouse Clusters on an ECS Instance
Cluster Name
Nom du cluster source.
Le nom ne peut contenir que des chiffres et des lettres minuscules.
source
Source Cluster Name
Exécutez
SELECT * FROM system.clusters;pour obtenir le Source Cluster Name.default
VPC IP Address
Adresse IP et PORT (adresse TCP) de chaque shard du cluster, séparés par des virgules.
ImportantVous ne pouvez pas utiliser le nom de domaine VPC ou l'adresse SLB d'un cluster ApsaraDB for ClickHouse.
Format :
IP:PORT,IP:PORT,......La méthode pour obtenir l'adresse IP et le PORT du cluster varie selon le scénario de migration des données.
Migration inter-comptes ou inter-régions
Vous pouvez utiliser l'instruction SQL suivante pour obtenir l'adresse IP et le PORT du cluster auto-géré :
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = 'default' and replica_num = 1;Ici,
replica_num=1sélectionne le premier ensemble de réplicas. Vous pouvez également choisir d'autres ensembles de réplicas ou sélectionner un réplica par shard.Migration ClickHouse hors Alibaba Cloud
Si l'adresse IP ne peut pas être facilement mappée vers Alibaba Cloud, vous pouvez utiliser l'instruction SQL suivante pour obtenir l'adresse IP et le PORT du cluster auto-géré :
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;Les paramètres sont décrits comme suit :
-
cluster_name : nom du cluster de destination.
-
replica_num=1sélectionne le premier ensemble de réplicas. Vous pouvez également choisir d'autres ensembles de réplicas ou sélectionner un réplica par shard.
Si l'adresse IP et le port sont mappés vers Alibaba Cloud via une traduction réseau, vous devez configurer l'adresse IP et le port mappés correspondants.
192.168.0.5:9000,192.168.0.6:9000
Database Account
Compte de base de données du cluster source.
test
Database Password
Mot de passe du compte de base de données du cluster source.
test
Paramètres du cluster de destination
Paramètre
Description
Exemple
Database Account
Compte de base de données du cluster de destination.
test
Database Password
Mot de passe du compte de base de données du cluster de destination.
test
-
-
Confirmez le contenu de la migration.
Vérifiez attentivement les informations relatives aux données à migrer sur la page, puis cliquez sur Next: Pre-detect and Start Synchronization.
-
Le système exécute une pré-vérification du lien de migration en arrière-plan et démarre la tâche.
Le système effectue une Instance Status Detection, une Storage Space Detection et une Local Table and Distributed Table Detection sur les clusters source et de destination.
-
Si la pré-vérification réussit :
Après le succès de la pré-vérification, la page indique que trois contrôles ont été validés : Instance status check, Storage space check et Local table and distributed table check. Le haut de la page affiche une durée estimée de migration de 2 minutes et décrit les impacts durant la migration :
L'instance source reste accessible en lecture et écriture, mais les opérations DDL sont impossibles.
L'instance de destination est accessible en lecture, mais les tables migrées ne peuvent pas faire l'objet d'écritures.
Lorsque le temps restant est inférieur à 10 minutes, vous devez arrêter les écritures pour déclencher la fin de la migration.
Les tables non-MergeTree conservent uniquement leur structure après la mise à l'échelle, sans migration des données.
Examinez attentivement l'impact du processus de migration des données sur les instances.
-
Cliquez sur Completed.
ImportantAprès avoir cliqué sur Complete, le système crée et démarre la tâche, dont le statut passe à Running. Vous pouvez consulter la tâche dans la liste des tâches.
Après la création de la tâche, vous devez la surveiller. Lors de la dernière phase de la migration, vous devez interrompre les opérations d'écriture sur le cluster auto-géré et migrer les schémas de base de données et de tables restants. Pour plus d'informations, consultez Surveiller la tâche de migration et arrêter les écritures sur le cluster auto-géré.
-
Si la pré-vérification échoue : Suivez les instructions du message d'erreur et relancez la tâche de migration des données. Le tableau suivant décrit les éléments de pré-vérification et leurs exigences. Pour plus d'informations sur les messages d'erreur de pré-vérification et leurs solutions, consultez Erreurs et solutions de pré-vérification de la migration.
Élément de contrôle
Exigence
Instance Status Detection
La tâche de migration des données ne peut pas démarrer si des tâches de gestion (telles que l'extension, la mise à niveau ou la réduction) sont en cours d'exécution sur le cluster source ou de destination.
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 auto-géré.
Local Table and Distributed Table Detection
Si une table locale du cluster auto-géré n'a pas de table distribuée correspondante ou en possède plusieurs, le contrôle échoue. Pour résoudre ce problème, supprimez les tables distribuées excédentaires ou créez une table distribuée unique pour la table locale.
-
-
Étape 6 : Évaluer la faisabilité 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, vous devez vérifier la vitesse d'écriture réelle du cluster de destination pour évaluer la faisabilité de la migration. Une migration réussie exige que la vitesse d'écriture du cluster de destination puisse suivre celle du cluster source. Procédez comme suit :
Consultez la métrique TairPDBShardingIOBandwidth du cluster de destination pour déterminer sa vitesse d'écriture réelle. Pour savoir comment consulter TairPDBShardingIOBandwidth, reportez-vous à Consulter les données 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 de fortes chances de réussir. Passez à l'Étape 7.
Si la vitesse d'écriture du cluster de destination est inférieure à celle du cluster source : La migration risque d'échouer. Nous vous recommandons d'annuler la tâche de migration et d'utiliser la migration manuelle.
Étape 7 : Surveiller la migration et arrêter les écritures
Connectez-vous à la console ApsaraDB for ClickHouse.
Dans la liste des instances Community Edition, cliquez sur l'ID du cluster de destination.
Dans le volet de navigation, cliquez sur .
-
Sur la page de liste des migrations d'instances, vous pouvez :
-
Consulter le statut et la phase d'exécution de la tâche de migration.
ImportantLorsque la phase d'exécution atteint Data Migration (c'est-à-dire que la migration du schéma de table est terminée), passez immédiatement à l'Étape 8 pour reconstruire les tables de moteur Kafka/RabbitMQ sur le cluster auto-géré et reprendre l'ingestion incrémentielle des données.
Surveillez attentivement les Running Information de la tâche cible. En vous basant sur le temps restant estimé dans la colonne Running Information, suivez l'Étape 9 pour arrêter les écritures sur le cluster auto-géré et gérer les tables de moteur Kafka et RabbitMQ.
-
Dans la colonne Actions, cliquez sur View Details pour ouvrir la page de détails de la tâche. Cette page contient les informations suivantes :
RemarqueSi la tâche de migration est terminée (son statut est Completed ou Canceled), le contenu de la page View Details est effacé. Vous pouvez consulter la liste des schémas de tables migrés sur le cluster de destination en exécutant l'instruction SQL suivante :
SELECT `database`, `name`, `engine_full` FROM `system`.`tables` WHERE `database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema');Tous les schémas de tables migrés et leur statut de migration.
Tous les schémas de bases de données migrés et leur statut de migration.
Tous les messages d'erreur relatifs aux échecs de migration de bases de données et de tables.
Le tableau suivant décrit les statuts des tâches de migration.
Statut de la tâche
Description
Running
Préparation de l'environnement et des ressources pour la migration.
Initializing
Initialisation de la tâche de migration.
Configuration Migration
Migration de la configuration du cluster.
Schema Migration
Migration de toutes les bases de données, des tables de la famille MergeTree et des tables Distributed.
Data Migration
Migration incrémentielle des données des tables de la famille MergeTree.
Other Schema Migration
Migration des schémas des vues matérialisées et des tables non-MergeTree.
Data Check
Vérification de la cohérence du volume de données des tables terminées dans le cluster de destination par rapport au cluster auto-géré. En cas d'incohérence, la tâche peut échouer. Nous vous recommandons de redémarrer la migration.
Post-migration Configuration
Configuration des paramètres système pour le cluster de destination, tels que le nettoyage des ressources de migration et la réactivation des écritures sur l'instance source.
Completed
La tâche de migration est terminée.
Canceled
La tâche de migration est annulée.
-
Étape 8 : Reconstruire les tables de moteur Kafka/RabbitMQ sur le cluster auto-géré
Une fois que la tâche de migration entre dans la phase de migration des données (c'est-à-dire que la migration du schéma de table est terminée), utilisez les instructions DDL précédemment sauvegardées pour reconstruire les tables de moteur Kafka/RabbitMQ et leurs vues matérialisées en aval sur le cluster auto-géré. Une fois reconstruites, les données incrémentielles reprennent leur flux 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.
-- Rebuild Kafka/RabbitMQ engine tables on the self-managed 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 9 : Arrêter les écritures et effectuer la bascule
Lorsque le temps restant estimé pour la migration est inférieur à 10 minutes ou que la progression atteint 99 %, effectuez les étapes de bascule suivantes :
-
Arrêtez les écritures métier. Sur le cluster auto-géré, supprimez les tables de moteur Kafka/RabbitMQ précédemment reconstruites ainsi que 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>; Attendez que la progression de la migration atteigne 100 % et que la migration soit totalement terminée.
-
Connectez-vous au cluster de destination et utilisez les instructions DDL précédemment sauvegardées pour reconstruire les tables de moteur Kafka/RabbitMQ et leurs vues matérialisées en aval.
ImportantSi 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.
-- Rebuild Kafka/RabbitMQ engine tables on the destination 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>; Vérifiez que le pipeline de données sur le cluster de destination fonctionne correctement et que les données affluent normalement.
Étape 10 : Terminer la migration
Après avoir arrêté les écritures sur le cluster auto-géré, vous pouvez Complete the task. Cette étape migre les données restantes, effectue une vérification du volume de données et migre les schémas de bases de données et de tables restants. Vous pouvez consulter le contenu migré dans les détails de la tâche.
Si la vérification des données échoue, la tâche de migration reste bloquée à la phase de vérification du volume de données. Nous recommandons d'annuler la migration et de créer une nouvelle tâche. Pour plus d'informations sur l'annulation d'une tâche de migration, consultez Autres opérations.
Une migration de données prolongée peut entraîner une accumulation excessive de métadonnées dans le cluster de destination. Nous recommandons de limiter la durée des tâches de migration à 5 jours maximum. Les tâches dépassant cette limite sont automatiquement annulées.
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster de destination.
Dans le volet de navigation de gauche, cliquez sur .
Pour la tâche de migration cible, cliquez sur Complete Migration dans la colonne Actions.
Dans la boîte de dialogue Complete Migration, cliquez sur OK.
Étape 11 : Migrer les données des tables non-MergeTree
La tâche de migration transfère uniquement le schéma des tables non-MergeTree (telles que les tables externes et les tables Log), en les créant dans le cluster de destination sans aucune donnée métier. Vous devez migrer les données métier manuellement. Procédez comme suit :
-
Connectez-vous au cluster auto-géré et exécutez l'instruction suivante pour identifier les tables non-MergeTree nécessitant une migration de données.
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') )) Connectez-vous au cluster de destination et utilisez la fonction remote pour migrer les données de la table. Pour des instructions détaillées, consultez Migrer des données à l'aide de la fonction remote.
Autres opérations
Lorsqu'une tâche de migration se termine, son Migration Status passe à Completed. La liste des tâches ne se met pas à jour instantanément ; actualisez donc la page périodiquement pour consulter le statut le plus récent.
|
Actions |
Description |
Impact |
Scénario |
|
Cancel Migration |
Annule la tâche de force et ignore la vérification du volume de données, sans migrer les schémas de bases de données et de tables restants. |
|
Utilisez cette option lorsque la migration affecte négativement votre cluster auto-géré et que vous devez rétablir immédiatement les opérations d'écriture. |
|
Stop Migration |
Arrête immédiatement la migration des données, mais termine la migration des schémas de bases de données et de tables restants. La vérification du volume de données est ignorée. |
La migration des données sera incomplète, mais les schémas de bases de données et de tables sur l'instance de destination seront complets. |
Utilisez cette option pour tester un jeu de données partiellement migré sans interrompre les écritures sur le cluster auto-géré. |
Arrêter la migration
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.
Dans le volet de navigation de gauche, choisissez .
Dans la colonne Actions de la tâche de migration cible, cliquez sur Stop Migration.
Dans la boîte de dialogue Stop Migration, cliquez sur OK.
Annuler la migration
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.
Dans le volet de navigation de gauche, choisissez .
Dans la colonne Actions de la tâche de migration cible, cliquez sur Cancel Migration.
Dans la boîte de dialogue Cancel Migration, cliquez sur OK.
Migration manuelle
Méthode 1 : Utiliser les commandes BACKUP et RESTORE
Pour plus d'informations, consultez Utiliser les commandes BACKUP et RESTORE pour sauvegarder et restaurer des données.
Méthode 2 : Utiliser l'instruction INSERT FROM SELECT
Étape 1 : Migrer les métadonnées
La migration des métadonnées ClickHouse consiste principalement à migrer le DDL de création des tables.
Si vous devez installer l'outil clickhouse-client, assurez-vous que sa version correspond à celle de l'instance ApsaraDB for ClickHouse de destination. Vous trouverez le lien de téléchargement sur clickhouse-client.
-
Affichez la liste des bases de données du cluster auto-géré.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases" > database.listParamètres :
Paramètre
Description
old host
Adresse du cluster auto-géré.
old port
Port du cluster auto-géré.
old user name
Compte utilisé pour se connecter au cluster auto-géré. Ce compte doit disposer des autorisations de lecture/écriture DML, des autorisations de paramètres et des autorisations DDL.
old password
Mot de passe du compte.
RemarqueLa base de données
systemest une base de données système et ne nécessite pas de migration. Excluez-la. -
Affichez la liste des tables du cluster auto-géré.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>" > table.listParamètres :
Paramètre
Description
database_name
Nom de la base de données.
Vous pouvez également interroger directement tous les noms de bases de données et de tables à partir des tables système.
SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';RemarqueSi un nom de table interrogé commence par
.inner., il s'agit d'une représentation interne d'une vue matérialisée qui ne nécessite pas de migration. Excluez-le. -
Exportez le DDL de création de toutes les tables d'une base de données spécifique depuis le cluster auto-géré.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SELECT concat(create_table_query, ';') FROM system.tables WHERE database='<database_name>' FORMAT TabSeparatedRaw" > tables.sql -
Importez le DDL de création des tables dans l'instance ApsaraDB for ClickHouse de destination.
RemarqueAvant d'importer le DDL de création des tables, vous devez créer la base de données correspondante dans l'instance ApsaraDB for ClickHouse.
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" -d '<database_name>' --multiquery < tables.sqlParamètres :
Paramètre
Description
new host
Adresse de l'instance ApsaraDB for ClickHouse de destination.
new port
Port de l'instance ApsaraDB for ClickHouse de destination.
new user name
Compte utilisé pour se connecter à l'instance ApsaraDB for ClickHouse de destination. Ce compte doit disposer des autorisations de lecture/écriture DML, des autorisations de paramètres et des autorisations DDL.
new password
Mot de passe du compte.
Étape 2 : Migrer les données
Fonction remote
-
-
Sur l'instance ApsaraDB for ClickHouse de destination, exécutez l'instruction SQL suivante pour migrer les données.
INSERT INTO <new_database>.<new_table> SELECT * FROM remote('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;RemarquePour la version 20.8, utilisez d'abord la fonction
remoteRawpour la migration des données. Si la migration échoue, vous pouvez demander une mise à niveau de la version mineure.INSERT INTO <new_database>.<new_table> SELECT * FROM remoteRaw('<old_endpoint>', <old_database>.<old_table>, '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, max_result_rows = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824;Paramètres :
ImportantUtilisez le paramètre
_partition_idpour filtrer les données. Cela réduit l'utilisation des ressources.Paramètre
Description
new_database
Nom de la base de données dans l'instance ApsaraDB for ClickHouse de destination.
new_table
Nom de la table dans l'instance ApsaraDB for ClickHouse de destination.
old_endpoint
Endpoint de l'instance source.
ClickHouse auto-géré
Format de l'endpoint :
Adresse IP d'un nœud de l'instance source:port.ImportantLe port doit être le port TCP.
ApsaraDB for ClickHouse
Utilisez l'endpoint interne VPC de l'instance source, et non l'endpoint public.
ImportantLes ports 3306 et 9000 sont des valeurs fixes.
-
Instance Community Edition :
-
Format de l'endpoint :
Adresse interne VPC:3306. -
Exemple :
cc-2zeqhh5v7y6q*.clickhouse.ads.aliyuncs.com:3306
-
-
Instance Enterprise :
-
Format de l'endpoint :
Adresse interne VPC:9000. -
Exemple :
cc-bp1anv7jo84ta*clickhouse.clickhouseserver.rds.aliyuncs.com:9000
-
old_database
Nom de la base de données du cluster auto-géré.
old_table
Nom de la table du cluster auto-géré.
username
Compte du cluster auto-géré.
password
Mot de passe du compte du cluster auto-géré.
max_execution_time
Temps d'exécution maximal d'une requête. Définissez la valeur à 0 pour aucune limite de temps.
max_bytes_to_read
Nombre maximal d'octets qu'une requête peut lire depuis les données source. Définissez la valeur à 0 pour aucune limite.
log_query_threads
Indique s'il faut journaliser les informations sur les threads lors de l'exécution des requêtes. Définissez la valeur à 0 pour désactiver la journalisation.
max_result_rows
Nombre maximal de lignes dans le résultat de la requête. Définissez la valeur à 0 pour aucune limite.
min_insert_block_size_rows
Nombre minimal de lignes par partie de données lors d'une seule écriture. Définissez la valeur à 4294967296 (maximum) pour désactiver la limite de lignes. Ce paramètre fonctionne conjointement avec min_insert_block_size_bytes pour éviter un excès de petites parties.
min_insert_block_size_bytes
Taille minimale en octets par partie de données lors d'une seule écriture. Définissez la valeur à 1073741824 (1 Go) pour éviter un excès de petites parties et prévenir l'erreur « Too many partitions for a single INSERT block ».
_partition_id
ID de la partition de données.
-
Exportation et importation de fichiers
Exportez les données de la base de données du cluster auto-géré vers un fichier, puis importez ce fichier dans l'instance ApsaraDB for ClickHouse de destination.
-
Exportation et importation CSV
-
Exportez les données de la base de données du cluster auto-géré vers un fichier CSV.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="select * from <database_name>.<table_name> FORMAT CSV" > table.csv -
Importez le fichier CSV dans l'instance ApsaraDB for ClickHouse de destination.
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" --query="insert into <database_name>.<table_name> FORMAT CSV" < table.csv
-
-
Flux via un pipe Linux
clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>" --query="select * from <database_name>.<table_name> FORMAT CSV" | clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>" --query="INSERT INTO <database_name>.<table_name> FORMAT CSV"
Erreurs et solutions de vérification de la migration
|
Message d'erreur |
Description |
Solution |
|
Missing unique distributed table or sharding_key not set. |
Une |
Créez une |
|
The corresponding distributed table is not unique. |
Une |
Supprimez les |
|
MergeTree table on a multi-replica cluster. |
Le |
|
|
Data reserved table on destination cluster. |
La table à migrer existe déjà et contient des données sur le |
Supprimez la table correspondante du |
|
Columns of distributed table and local table conflict |
Les colonnes de la |
Reconstruisez la |
|
Insufficient storage space. |
L' |
Augmentez l' |
|
Missing system table. |
Une |
Modifiez le fichier de configuration |
|
The table is incomplete across different nodes. |
La table est manquante sur certains |
Créez des tables portant le même nom sur différents |
Calcul de la durée de fusion après la migration
Après la migration, le cluster de destination effectue temporairement des opérations de fusion fréquentes. Cela accroît l'utilisation des E/S et peut entraîner une latence plus élevée pour les requêtes de service. Si vos services sont sensibles à la latence de lecture et d'écriture, envisagez de mettre à niveau le type d'instance et le niveau de performance ESSD pour raccourcir cette période de forte utilisation des E/S. Pour plus d'informations, consultez Mise à l'échelle verticale, extension et réduction des clusters compatibles communautaires.
Utilisez les formules suivantes pour calculer la durée de fusion après la migration :
Ces formules s'appliquent aussi bien aux clusters à réplica unique qu'aux clusters maître-réplica.
-
Durée totale estimée des opérations de fusion fréquentes =
MAX(durée de fusion des données chaudes, durée de fusion des données froides)Durée de fusion des données chaudes =
volume de données chaudes sur un seul nœud * 2 / MIN(bande passante du type d'instance, bande passante du disque * n)Durée de fusion des données froides =
(volume de données froides / nombre de nœuds) / MIN(bande passante du type d'instance, bande passante de lecture OSS) + (volume de données froides / nombre de nœuds) / MIN(bande passante du type d'instance, bande passante d'écriture OSS)
La liste suivante décrit les paramètres utilisés dans les formules :
Volume de données chaudes sur un seul nœud : Vous pouvez consulter cette valeur dans la ligne Disk Usage - Single-Node Statistics. Pour plus d'informations, consultez Consulter les informations de surveillance du cluster.
-
Bande passante du type d'instance
RemarqueCes valeurs de bande passante ne sont pas absolues et varient selon les types de machines utilisés par le backend ApsaraDB for ClickHouse. Les valeurs fournies sont des minimums et servent uniquement de référence.
Spécification
Bande passante (Mo/s)
Standard 8 cœurs 32 Go
250
Standard 16 cœurs 64 Go
375
Standard 24 cœurs 96 Go
500
Standard 32 cœurs 128 Go
625
Standard 64 cœurs 256 Go
1250
Standard 80 cœurs 384 Go
2000
Standard 104 cœurs 384 Go
2000
Bande passante du disque : Trouvez cette valeur dans la ligne Maximum throughput per disk (MB/s) du tableau Niveau de performance ESSD.
n : Nombre de disques sur un seul nœud. Exécutez la commande suivante pour obtenir cette valeur :
SELECT count() FROM system.disks WHERE type = 'local';Volume de données froides : Vous pouvez consulter cette valeur dans la ligne clickhouse_cold_storage_data. Pour plus d'informations, consultez Consulter les informations de surveillance du cluster.
Nombre de nœuds : Nombre de nœuds dans le cluster. Exécutez la commande suivante pour obtenir cette valeur :
SELECT count() FROM system.clusters WHERE cluster = 'default' and replica_num=1;Bande passante de lecture OSS : Trouvez cette valeur dans la colonne Total Intranet and Internet Download Bandwidth du tableau Bande passante OSS.
Bande passante d'écriture OSS : Trouvez cette valeur dans la colonne Total Intranet and Internet Upload Bandwidth du tableau Bande passante OSS.
FAQ
-
Q : Comment résoudre l'erreur « Too many partitions for single INSERT block (more than 100) » ?
R : Cette erreur survient lorsqu'une seule opération INSERT dépasse la limite max_partitions_per_insert_block, fixée à 100 par défaut. Dans ClickHouse, chaque opération d'écriture crée une partie de données, et une partition peut contenir une ou plusieurs parties de données. Si une seule opération INSERT écrit des données dans trop de partitions, elle crée un nombre excessif de parties de données. Cela peut dégrader considérablement les performances de fusion et de requête. ClickHouse impose cette limite pour prévenir la dégradation des performances.
Pour résoudre ce problème, vous pouvez ajuster le nombre de partitions ou modifier le paramètre max_partitions_per_insert_block.
Ajustez le schéma de la table et la méthode de partitionnement, ou évitez d'insérer des données dans trop de partitions différentes lors d'une seule opération.
-
Si vous devez insérer des données dans de nombreuses partitions à la fois, vous pouvez augmenter la limite en modifiant le paramètre max_partitions_per_insert_block. La syntaxe est la suivante :
SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;RemarqueLa communauté ClickHouse recommande d'utiliser la valeur par défaut de 100. Ne définissez pas cette valeur trop haut, car cela pourrait dégrader les performances. Après l'importation des données par lots, nous vous recommandons de rétablir la valeur par défaut.
-
Q : Pourquoi la connexion de mon instance ApsaraDB for ClickHouse de destination à ma base de données ClickHouse auto-gérée échoue-t-elle ?
R : Ce problème survient si votre base de données ClickHouse auto-gérée se trouve derrière un pare-feu ou utilise une liste d'autorisation. Pour le résoudre, ajoutez le bloc CIDR IPv4 du vSwitch du cluster ApsaraDB for ClickHouse à la liste d'autorisation de votre base de données auto-gérée. Pour savoir comment obtenir le bloc CIDR IPv4 du vSwitch du cluster ApsaraDB for ClickHouse, consultez Afficher le bloc CIDR IPv4.
-
Q : Lors de la mise à l'échelle ou de la migration d'une instance multi-réplicas, pourquoi les tables non répliquées (non-Replicated) ne sont-elles pas autorisées ? Si elles existent, comment résoudre ce problème ?
R : La raison de cette restriction et la solution sont les suivantes :
-
Raison : Une instance multi-réplicas nécessite des tables répliquées (Replicated) pour synchroniser les données entre les réplicas. Sans tables répliquées, la configuration multi-réplicas est inefficace. L'outil de migration sélectionne aléatoirement un réplica comme source de données et migre ses données vers l'instance de destination.
Si des tables non répliquées existent, les données ne sont pas synchronisées entre les réplicas, ce qui signifie que chaque réplica détient des données isolées. Comme l'outil de migration ne migre les données que depuis un seul réplica, ce processus entraîne une perte de données. Par exemple, comme illustré dans la figure suivante, la table MergeTree sur le réplica 0 (r0) contient les données 1, 2 et 3. La table MergeTree sur le réplica 1 (r1) contient les données 4 et 5. Si l'outil de migration sélectionne r0 comme source, seules les données 1, 2 et 3 sont migrées vers l'instance de destination.
-
Solution : Si vous pouvez supprimer les tables non répliquées dans l'instance source, nous vous recommandons de le faire. Sinon, vous devez remplacer les tables non répliquées par des tables répliquées. Procédez comme suit :
Connectez-vous à l'instance source.
Créez une table répliquée. Le schéma de la table doit être identique à celui de la table non répliquée que vous souhaitez remplacer, à l'exception du moteur.
-
Migrez manuellement les données de la table non répliquée vers la nouvelle table répliquée. L'instruction de migration est la suivante :
ImportantVous devez effectuer cette migration pour chaque réplica. Par exemple, vous devez exécuter l'instruction sur r0 et r1.
Vous pouvez obtenir l'adresse IP du nœud pour l'instruction en exécutant
SELECT * FROM system.clusters;.INSERT INTO <destination_database>.<new_replicated_table> SELECT * FROM remote('<node_IP_address>:3003', '<source_database>', '<non_replicated_table_to_replace>', '<username>', '<password>') [WHERE _partition_id = '<partition_id>'] SETTINGS max_execution_time = 0, max_bytes_to_read = 0, log_query_threads = 0, min_insert_block_size_rows = 4294967296, min_insert_block_size_bytes = 1073741824; Échangez les noms de la table non répliquée et de la table répliquée.
EXCHANGE TABLES <source_database>.<non_replicated_table_to_replace> AND <destination_database>.<new_replicated_table> ON CLUSTER default;
-