Les clusters ClickHouse auto-gérés souffrent souvent d'instabilité, d'une mauvaise évolutivité, de mises à niveau complexes et d'une reprise après sinistre insuffisante. Par conséquent, de plus en plus de 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 en édition compatible avec la communauté.
Prérequis
-
Cluster cible :
Le cluster doit être en édition compatible avec la communauté.
Vous devez disposer d'un compte de base de données et d'un mot de passe. Pour créer un compte ClickHouse, consultez la section Gérer les comptes pour un cluster en édition compatible avec la communauté.
Le compte doit disposer des autorisations les plus élevées. Pour accorder des autorisations, consultez la section Modifier les autorisations.
-
Cluster auto-géré :
Vous devez disposer d'un compte de base de données et d'un mot de passe.
Le compte doit disposer d'autorisations en lecture sur les bases de données et les tables, ainsi que des autorisations nécessaires pour exécuter les 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 la section Configurer une liste d'autorisation.
Pour configurer une liste d'autorisation dans un cluster auto-géré, reportez-vous à la documentation du produit concerné.
Pour afficher les adresses IP de tous les nœuds du cluster ApsaraDB for ClickHouse, exécutez la commande
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 récupérer 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 la section Comment établir une connexion réseau entre un cluster cible et une source de données ?.
Validation de la migration
Avant de commencer la migration des données, nous vous recommandons vivement de créer un environnement de test pour valider la compatibilité métier, les performances et le plan de migration. Une fois la validation terminée, vous pouvez effectuer la migration des données dans votre environnement de production. Cette étape cruciale vous permet d'identifier et de résoudre les problèmes potentiels dès le début, 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 les étapes détaillées, consultez cette rubrique.
Pour plus d'informations sur la compatibilité de la migration vers le cloud, l'analyse des goulots d'étranglement liés aux performances et la garantie du succès de la migration, consultez la section Analyse et solutions pour la compatibilité et les goulots d'étranglement liés aux performances lors de la migration d'un ClickHouse auto-géré vers le cloud.
Choisir une solution
Solution de migration | Avantages | Inconvénients | Cas d'utilisation |
Fournit une interface visuelle. Vous n'avez pas besoin de migrer manuellement les métadonnées. | Prend uniquement en charge la migration complète et incrémentielle de l'ensemble du cluster. Vous ne pouvez pas migrer des bases de données, des tables ou des données historiques spécifiques. | Migration d'un cluster entier. | |
Vous permet de contrôler 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.
Notes
Pendant la migration
-
Pendant la migration, le processus de fusion est suspendu dans le cluster de destination, mais il se poursuit dans le cluster autogéré.
RemarqueSi une tâche de migration s'exécute pendant une longue période, des métadonnées excessives peuvent s'accumuler dans le cluster de destination. Nous vous recommandons de ne pas dépasser une durée de 5 jours pour les tâches de migration. Les tâches dépassant 5 jours sont automatiquement annulées.
Le cluster de destination doit être le cluster
default. Si votre cluster autogéré utilise un nom différent, le service convertit automatiquement la définitionclusterdans les tables distribuées endefault.
Portée de la 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 avec SQL, mais pas ceux créés avec XML.
Pour vérifier cela, exécutez l'instruction suivante :
SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Si l'instruction renvoie des lignes, cela indique que vous disposez de dictionnaires de données créés à l'aide de XML. Lorsqu'un dictionnaire de données accède à un service externe, assurez-vous que le service externe est disponible et que le cluster est ajouté à sa liste d'autorisation. Si la source de données d'un dictionnaire de données est une table interne dans le 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 une migration en raison d'un changement d'adresse IP. Vous devez reconfirmer l'adresseHOSTdu cluster ClickHouse actuel et cré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 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 provenant 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 causés par des temps de migration prolongés, nous vous recommandons de supprimer les données froides de votre cluster autogé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 autogéré :
La lecture des données depuis le cluster autogéré augmente son utilisation du CPU et de la mémoire.
Les opérations DDL ne sont pas autorisées.
-
Cluster de destination :
L'écriture des données dans le cluster de destination augmente son utilisation du CPU et de la mémoire.
Les opérations DDL ne sont pas autorisées 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 arrêté 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 des opérations de fusion fréquentes. Cela augmente l'utilisation des E/S et peut entraîner une latence plus élevée des requêtes métier. Prévoyez l'impact potentiel de cette augmentation de latence. Vous devez calculer la durée spécifique des opérations de fusion. Pour obtenir des instructions, consultez Calculer le temps 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 autogé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 entraîner 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 autogéré. Cette étape minimise les modifications d'application requises après la migration.
-
Obtenez et comparez les numéros de version du cluster de destination et du cluster autogéré.
Connectez-vous au cluster de destination et au cluster autogé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 autogéré. Cela garantit que leurs fonctionnalités sont aussi cohérentes que possible. Voici un exemple :
SET GLOBAL compatibility = '22.8';
Étape 3 : (Facultatif) Activer le moteur MaterializedMySQL
Si votre cluster autogéré contient des tables qui utilisent 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 vous recommandons d'utiliser Data Transmission Service (DTS) pour synchroniser les données MySQL.
Étant donné que le moteur MaterializedMySQL n'est plus maintenu, Data Transmission Service (DTS) utilise des tables ReplacingMergeTree au lieu de tables MaterializedMySQL lors de la synchronisation des données MySQL vers ApsaraDB for ClickHouse. Pour plus d'informations, consultez Compatibilité MaterializedMySQL.
Pour plus d'informations sur l'utilisation de DTS pour migrer les données MySQL vers ApsaraDB for ClickHouse, consultez les rubriques suivantes :
Étape 4 : Enregistrer et nettoyer les tables utilisant les moteurs Kafka/RabbitMQ
Avant de commencer 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 autogéré, traitez les tables implicites, puis supprimez ces tables pour éviter les erreurs de migration.
-
Connectez-vous au cluster autogéré et interrogez toutes les tables utilisant les 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 utilisant les 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 autogéré et sur le cluster de destination ultérieurement. Si vous avez effectué une opération de renommage, 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 de la tâche de migration, cliquez sur Create Migration Task.
-
Configurez les instances source et de destination.
Configurez les paramètres suivants et cliquez sur Test Connectivity and Proceed.
RemarqueSi le test de connexion réussit, passez à l'étape suivante. Si le test de connexion échoue, reconfigurez les instances source et de destination en suivant les instructions 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ées par des virgules.
ImportantVous ne pouvez pas utiliser le nom de domaine VPC ni 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 autogé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 à Alibaba Cloud, vous pouvez utiliser l'instruction SQL suivante pour obtenir l'adresse IP et le PORT du cluster autogé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 à Alibaba Cloud via une translation 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 exécute 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 :
Une fois la pré-vérification réussie, la page indique que trois vérifications ont été validées : Instance status check, Storage space check et Local table and distributed table check. Le haut de la page indique que le temps de migration estimé est de 2 minutes et décrit les impacts pendant la migration :
L'instance source est accessible en lecture et en écriture, mais les opérations DDL ne peuvent pas être effectuées.
L'instance de destination est accessible en lecture, mais les tables migrées ne peuvent pas être écrites.
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 autres que MergeTree conservent uniquement la structure de la table sans migration des données après la mise à l'échelle.
Examinez attentivement l'impact du processus de migration des données sur les instances.
-
Cliquez sur Completed.
ImportantAprès avoir cliqué sur Terminé, le système crée et démarre la tâche, et son statut passe à En cours d'exécution. Vous pouvez afficher la tâche dans la liste des tâches.
Après avoir créé la tâche, vous devez la surveiller. Dans la phase finale de la migration, vous devez arrêter les opérations d'écriture sur le cluster autogé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 autogé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 de pré-vérification de migration et solutions.
Élément de vérification
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 la mise à l'échelle horizontale, la mise à niveau ou la rétrogradation) 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 être au moins 1,2 fois supérieur à l'espace de stockage utilisé du cluster autogéré.
Local Table and Distributed Table Detection
Si une table locale dans le cluster autogéré n'a pas de table distribuée correspondante ou en a plusieurs, la vérification échoue. Pour résoudre ce problème, supprimez les tables distribuées redondantes 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 suive celle du cluster source. Procédez comme suit :
Consultez le paramètre TairPDBShardingIOBandwidth du cluster de destination afin de déterminer sa vitesse d'écriture réelle. Pour savoir comment consulter le paramètre TairPDBShardingIOBandwidth, consultez la rubrique Afficher 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 méthode de 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 de gauche, cliquez sur .
-
Sur la page de liste des migrations d'instances, vous pouvez :
-
Consulter l'état et l'étape d'exécution de la tâche de migration.
ImportantLorsque l'étape d'exécution atteint Data Migration (c'est-à-dire que la migration du schéma des tables est terminée), passez immédiatement à l'étape 8 pour reconstruire les tables utilisant les moteurs 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é indiqué 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 utilisant les moteurs Kafka et RabbitMQ.
-
Dans la colonne Actions, cliquez sur View Details pour ouvrir la page des détails de la tâche. Cette page contient les informations suivantes :
RemarqueSi la tâche de migration est terminée (son état est Completed ou Canceled), le contenu de la page View Details est effacé. Vous pouvez afficher 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 état de migration.
Tous les schémas de bases de données migrés et leur état de migration.
Tous les messages d'erreur relatifs aux échecs de migration des bases de données et des tables.
Le tableau suivant décrit les états des tâches de migration.
État 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 distribuées.
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 n'appartenant pas à la famille MergeTree.
Data Check
Vérification de la cohérence du volume de données des tables terminées dans le cluster de destination avec celui du cluster auto-géré. En cas d'incohérence, la tâche risque d'échouer. Nous vous recommandons de redémarrer la migration.
Post-migration Configuration
Configuration des paramètres système du 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 utilisant les moteurs Kafka/RabbitMQ sur le cluster auto-géré
Une fois que la tâche de migration entre dans la phase data migration (c'est-à-dire que la migration du schéma des tables est terminée), utilisez les instructions DDL précédemment enregistrées pour reconstruire les tables utilisant les moteurs Kafka/RabbitMQ ainsi que leurs vues matérialisées en aval sur le cluster auto-géré. Après reconstruction, les données incrémentielles recommencent à circuler et sont automatiquement synchronisées vers le cluster de destination.
Si vous avez effectué une opération RENAME sur les tables cibles implicites plus tôt, 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 le basculement
Lorsque le temps restant estimé pour la migration est inférieur à 10 minutes ou que la progression de la migration atteint 99 %, effectuez les étapes de basculement suivantes :
-
Arrêtez les écritures métier. Sur le cluster auto-géré, supprimez les tables utilisant les moteurs 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 entièrement terminée.
-
Connectez-vous au cluster de destination et utilisez les instructions DDL précédemment enregistrées pour reconstruire les tables utilisant les moteurs Kafka/RabbitMQ ainsi que leurs vues matérialisées en aval.
ImportantSi vous avez effectué une opération RENAME sur les tables cibles implicites plus tôt, 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 circulent normalement.
Étape 10 : Terminer la migration
Après avoir arrêté les écritures sur le cluster auto-géré, vous pouvez cliquer sur 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 en phase de vérification du volume de données. Nous vous recommandons d'annuler la migration et de créer une nouvelle tâche de migration. Pour plus d'informations sur l'annulation d'une tâche de migration, consultez la section Autres opérations.
Une migration de données longue peut entraîner une accumulation excessive de métadonnées dans le cluster de destination. Nous vous recommandons de ne pas dépasser une durée de 5 jours pour les tâches de migration. Les tâches dépassant 5 jours 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 n'appartenant pas à la famille MergeTree
La tâche de migration ne migre que le schéma des tables n'appartenant pas à la famille 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 n'appartenant pas à la famille MergeTree qui nécessitent une migration des 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 la section Migrer des données à l'aide de la fonction remote.
Autres opérations
Lorsqu'une tâche de migration est terminée, son Migration Status passe à Completed. La liste des tâches ne se met pas à jour immédiatement ; actualisez régulièrement la page pour afficher le dernier état.
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 restaurer 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 la rubrique 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 les instructions DDL de création de table.
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 la page clickhouse-client.
-
Consultez la liste des bases de données du cluster autogé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
L'adresse du cluster autogéré.
old port
Le port du cluster autogéré.
old user name
Le compte utilisé pour se connecter au cluster autogéré. Le compte doit disposer des autorisations de lecture/écriture DML, des autorisations de paramètres et des autorisations DDL.
old password
Le 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. Filtrez-la. -
Consultez la liste des tables du cluster autogé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
Le nom de la base de données.
Vous pouvez également interroger directement tous les noms de bases de données et de tables depuis les 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 et ne nécessite pas de migration. Filtrez-le. -
Exportez les instructions DDL de création de table pour toutes les tables d'une base de données spécifique depuis le cluster autogé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 les instructions DDL de création de table dans l'instance ApsaraDB for ClickHouse de destination.
RemarqueAvant d'importer les instructions DDL de création de table, 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
L'adresse de l'instance ApsaraDB for ClickHouse de destination.
new port
Le port de l'instance ApsaraDB for ClickHouse de destination.
new user name
Le compte utilisé pour se connecter à l'instance ApsaraDB for ClickHouse de destination. Le compte doit disposer des autorisations de lecture/écriture DML, des autorisations de paramètres et des autorisations DDL.
new password
Le mot de passe du compte.
Étape 2 : Migrer les données
Fonction Remote
-
-
Utilisez la fonction
Remotepour extraire ou pousser les données.-
**Sur le cluster **ApsaraDB for ClickHouse cible, utilisez la fonction Remote pour extraire les données de la table source.
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; # If the source cluster runs version 22.10 or later but earlier than 24.3 and the target cluster runs version 24.3 or later, add allow_experimental_analyzer = 0 to the SETTINGS clause for target-initiated pulls, separated from the other settings by a comma. A target-initiated query passes allow_experimental_analyzer settings to the source cluster. With the allow_experimental_analyzer enabled, __table1._part in the source query retains the table alias prefix. The part-pruning logic recognizes only _part, so it cannot filter parts in advance and scans all data.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 mineure de la version.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
Le nom de la base de données dans l'instance ApsaraDB for ClickHouse de destination.
new_table
Le nom de la table dans l'instance ApsaraDB for ClickHouse de destination.
old_endpoint
L'endpoint de l'instance source.
ClickHouse autogé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
Le nom de la base de données du cluster autogéré.
old_table
Le nom de la table du cluster autogéré.
username
Le compte du cluster autogéré.
password
Le mot de passe du compte du cluster autogéré.
max_execution_time
Le temps d'exécution maximal d'une requête. Définissez la valeur sur 0 pour qu'il n'y ait aucune limite de temps.
max_bytes_to_read
Le nombre maximal d'octets qu'une requête peut lire depuis les données source. Définissez la valeur sur 0 pour qu'il n'y ait aucune limite.
log_query_threads
Indique si les informations sur les threads doivent être journalisées pendant l'exécution de la requête. Définissez la valeur sur 0 pour désactiver la journalisation.
max_result_rows
Le nombre maximal de lignes dans le résultat de la requête. Définissez la valeur sur 0 pour qu'il n'y ait aucune limite.
min_insert_block_size_rows
Le nombre minimal de lignes par partie de données lors d'une écriture unique. Définissez la valeur sur 4294967296 (maximum) pour désactiver la limite de lignes. Ce paramètre fonctionne conjointement avec min_insert_block_size_bytes pour éviter un nombre excessif de petites parties.
min_insert_block_size_bytes
La taille minimale en octets par partie de données lors d'une écriture unique. Définissez la valeur sur 1073741824 (1 Go) pour éviter un nombre excessif de petites parties et prévenir l'erreur « Too many partitions for a single INSERT block ».
_partition_id
L'ID de la partition de données.
allow_experimental_analyzer
Indique si le nouvel analyseur doit être activé. Définissez la valeur sur 0 pour le désactiver.
-
Sur le cluster source, utilisez la fonction Remote pour pousser les données vers le cluster cible.
ImportantSi le cluster source exécute une version antérieure à 22,10 et que le cluster cible exécute une version 24.3 ou ultérieure, utilisez une poussée initiée par la source. Exécutez
INSERT INTO FUNCTION remotesur le cluster source pour pousser les données vers le cluster cible. En effet, l'ancienne version source ne prend pas en charge le paramètreallow_experimental_analyzer. L'extraction depuis la nouvelle cible transmet ces paramètres à la source et provoque des erreurs.INSERT INTO FUNCTION remote('<new_endpoint>', '<new_database>.<new_table>', '<new_username>', '<new_password>') SELECT * FROM <old_database>.<old_table> [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;
-
Exportation et importation de fichiers
Exportez les données de la base de données du cluster autogéré vers un fichier, puis importez le 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 autogé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 avec 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 de vérification de la migration et solutions
|
Message d'erreur |
Description |
Solution |
|
Table distribuée unique manquante ou sharding_key non défini. |
Une |
Créez une |
|
La table distribuée correspondante n'est pas unique. |
Une |
Supprimez les |
|
Table MergeTree sur un cluster multi-réplica. |
Le |
|
|
Table réservée aux données sur le cluster de destination. |
La table à migrer existe déjà et contient des données sur le |
Supprimez la table correspondante du |
|
Conflit de colonnes entre la table distribuée et la table locale |
Les colonnes de la |
Reconstruisez la |
|
Espace de stockage insuffisant. |
Le |
Augmentez l' |
|
Table système manquante. |
Une |
Modifiez le fichier de configuration |
|
La table est incomplète sur différents nœuds. |
La table est manquante sur certains |
Créez des tables portant le même nom sur différents |
Calcul du temps de fusion après la migration
Après la migration, le cluster de destination effectue temporairement des opérations de fusion fréquentes. Cela augmente 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 en lecture et en écriture, envisagez de mettre à niveau le type d'instance et le niveau de performance ESSD pour raccourcir cette période d'utilisation intensive des E/S. Pour plus d'informations, consultez la rubrique Mise à l'échelle verticale, extension et réduction des clusters compatibles avec la communauté.
Utilisez les formules suivantes pour calculer le temps de fusion après la migration :
Ces formules s'appliquent aux clusters à réplica unique et aux clusters maître-réplica.
-
Temps total estimé pour les opérations de fusion fréquentes =
MAX(hot data merge time, cold data merge time)Temps de fusion des données chaudes =
amount of hot data on a single node * 2 / MIN(instance type bandwidth, disk bandwidth * n)Temps de fusion des données froides =
(amount of cold data / number of nodes) / MIN(instance type bandwidth, OSS read bandwidth) + (amount of cold data / number of nodes) / MIN(instance type bandwidth, OSS write bandwidth)
La liste suivante décrit les paramètres utilisés dans les formules :
Quantité de données chaudes sur un seul nœud : Vous pouvez afficher cette valeur dans la ligne Disk Usage - Single-Node Statistics. Pour plus d'informations, consultez la rubrique Afficher 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 sont données à titre indicatif uniquement.
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 : Le 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';Quantité de données froides : Vous pouvez afficher cette valeur dans la ligne clickhouse_cold_storage_data. Pour plus d'informations, consultez la rubrique Afficher les informations de surveillance du cluster.
Nombre de nœuds : Le 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 se produit lorsqu'une opération INSERT unique dépasse la limite max_partitions_per_insert_block, qui est de 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 opération INSERT unique écrit des données dans trop de partitions, elle crée un nombre excessif de parties de données. Cela peut considérablement dégrader les performances de fusion et de requête. ClickHouse impose cette limite pour éviter 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 en 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 lot, 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 autogérée échoue-t-elle ?
R : Ce problème survient si votre base de données ClickHouse autogé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 autogérée. Pour savoir comment obtenir le bloc CIDR IPv4 du vSwitch du cluster ApsaraDB for ClickHouse, consultez la section Afficher le bloc CIDR IPv4.
-
Q : Lors du dimensionnement ou de la migration d'une instance multi-réplica, pourquoi les tables non répliquées 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éplica nécessite des tables répliquées pour synchroniser les données entre les réplicas. Sans tables répliquées, la configuration multi-réplica 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 contient des données isolées. Étant donné que l'outil de migration migre à partir d'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. Suivez les étapes ci-dessous :
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;
-