Tous les produits
Search
Centre de documentation

ApsaraDB for ClickHouse:Migrate from self-managed to Cloud ClickHouse

Dernière mise à jour :Oct 10, 2026

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 :

  • 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 :

      1. 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.

      2. 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.

  1. Créez une tâche de migration pour transférer les données. Pour connaître les étapes détaillées, consultez cette rubrique.

  2. 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

Migration via la console

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.

Migration manuelle

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.

  • Migration de bases de données et de tables spécifiques.

  • Les données froides dépassent 1 To.

  • Les données chaudes dépassent 10 To.

  • Migration d'un cluster entier qui ne remplit pas les conditions requises pour la migration via la console.

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é.

    Remarque

    Si 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éfinition cluster dans les tables distribuées en default.

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 HOST dans 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'adresse HOST du 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.

    Important

    Vous 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

  1. Assurez-vous que les configurations de system.part_log et system.query_log dans 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>
  2. Après avoir modifié la configuration, exécutez les instructions drop table system.part_log et drop table system.query_log. L'insertion de données dans une table métier recrée automatiquement les tables system.part_log et system.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.

  1. 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();
  2. 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;
Remarque

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.

  1. 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');
  2. 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>';
  3. 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>;
  4. 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>;
Important

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

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition et cliquez sur l'ID du cluster de destination.

  3. Dans le volet de navigation de gauche, choisissez Data Migration and Synchronization > Migration from ClickHouse.

  4. Sur la page de la tâche de migration, cliquez sur Create Migration Task.

    1. Configurez les instances source et de destination.

      Configurez les paramètres suivants et cliquez sur Test Connectivity and Proceed.

      Remarque

      Si 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.

      Important

      Vous 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=1 sé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=1 sé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

    2. 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.

    3. 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.

        1. Examinez attentivement l'impact du processus de migration des données sur les instances.

        2. Cliquez sur Completed.

          Important
          • Aprè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 :

  1. 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.

  2. Comparez les vitesses d'écriture des clusters de destination et source.

    1. 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.

    2. 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

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Dans la liste des instances Community Edition, cliquez sur l'ID du cluster de destination.

  3. Dans le volet de navigation de gauche, cliquez sur Data Migration and Synchronization > Migration from ClickHouse.

  4. 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.

      Important
      • Lorsque 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 :

      Remarque

      Si 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.

Important

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 :

  1. 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>;
  2. Attendez que la progression de la migration atteigne 100 % et que la migration soit entièrement terminée.

  3. 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.

    Important

    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 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>;
  4. 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.

Important
  • 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.

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster de destination.

  3. Dans le volet de navigation de gauche, cliquez sur Data Migration and Synchronization > Migration from ClickHouse.

  4. Pour la tâche de migration cible, cliquez sur Complete Migration dans la colonne Actions.

  5. 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 :

  1. 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')
    ))
  2. 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.

  • La migration est arrêtée de force. Les schémas de bases de données et de tables sur l'instance de destination peuvent être incomplets et inutilisables.

  • Avant de redémarrer la migration, vous devez supprimer les données migrées du cluster de destination pour éviter la duplication des données.

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

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.

  3. Dans le volet de navigation de gauche, choisissez Data Migration and Synchronization > Migration from ClickHouse.

  4. Dans la colonne Actions de la tâche de migration cible, cliquez sur Stop Migration.

  5. Dans la boîte de dialogue Stop Migration, cliquez sur OK.

Annuler la migration

  1. Connectez-vous à la console ApsaraDB for ClickHouse.

  2. Sur la page Clusters, sélectionnez Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.

  3. Dans le volet de navigation de gauche, choisissez Data Migration and Synchronization > Migration from ClickHouse.

  4. Dans la colonne Actions de la tâche de migration cible, cliquez sur Cancel Migration.

  5. 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.

  1. 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.list

    Paramè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.

    Remarque

    La base de données system est une base de données système et ne nécessite pas de migration. Filtrez-la.

  2. 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.list

    Paramè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';
    Remarque

    Si 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.

  3. 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
  4. Importez les instructions DDL de création de table dans l'instance ApsaraDB for ClickHouse de destination.

    Remarque

    Avant 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.sql

    Paramè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

  1. (Facultatif) Lors de la migration des données vers une instance ApsaraDB for ClickHouse, envisagez d'ajuster le paramètre network_compression_method pour réduire le trafic réseau.

    • Pour modifier temporairement le paramètre network_compression_method dans l'instance ApsaraDB for ClickHouse de destination, exécutez la commande suivante.

    • SET network_compression_method = 'ZSTD';
    • Pour afficher la valeur du paramètre network_compression_method dans l'instance ApsaraDB for ClickHouse de destination, exécutez la commande suivante.

    • SELECT * FROM system.settings WHERE name = 'network_compression_method';
  2. Utilisez la fonction Remote pour 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.
      Remarque

      Pour la version 20.8, utilisez d'abord la fonction remoteRaw pour 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 :

      Important

      Utilisez le paramètre _partition_id pour filtrer les données. Cela réduit l'utilisation des ressources.

      (Facultatif) Pour obtenir le partition_id et le nombre de partitions, interrogez-les depuis la table system.parts en exécutant l'instruction SQL suivante.

      SELECT partition_id, count(*) AS part_count from clusterAllReplicas(default, system, parts) WHERE `database` = '<old_database>' AND `table` = '<old_table>' GROUP BY partition_id ;

      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.

      Important

      Le port doit être le port TCP.

      ApsaraDB for ClickHouse

      Utilisez l'endpoint interne VPC de l'instance source, et non l'endpoint public.

      Important

      Les 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.

      Important

      Si 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 remote sur 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ètre allow_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

    1. 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
    2. 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 local table dans le self-managed cluster ne possède pas de distributed table unique.

Créez une distributed table correspondante pour la local table dans le self-managed cluster.

La table distribuée correspondante n'est pas unique.

Une local table dans le self-managed cluster correspond à plusieurs distributed tables.

Supprimez les distributed tables redondantes sur le self-managed cluster et n'en conservez qu'une seule.

Table MergeTree sur un cluster multi-réplica.

Le self-managed cluster est un multi-replica cluster mais contient une non-replicated table. La migration n'est pas prise en charge car les données sont incohérentes entre les replicas.

Pourquoi les tables non répliquées ne sont-elles pas autorisées lors du dimensionnement ou de la migration d'instances multi-réplicas ?

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 destination cluster.

Supprimez la table correspondante du destination cluster.

Conflit de colonnes entre la table distribuée et la table locale

Les colonnes de la distributed table et de la local table dans le self-managed cluster sont incohérentes.

Reconstruisez la distributed table sur le self-managed cluster pour garantir que son schéma est cohérent avec celui de la local table.

Espace de stockage insuffisant.

Le destination cluster dispose d'un storage space insuffisant.

Augmentez l'storage space du disque du destination cluster. Assurez-vous que l'storage space total du destination cluster est au moins 1,2 fois supérieur à l'espace utilisé du self-managed cluster. Pour plus d'informations, consultez la rubrique Mise à l'échelle verticale et horizontale des clusters compatibles avec la communauté.

Table système manquante.

Une system table est manquante dans le self-managed cluster.

Modifiez le fichier de configuration config.xml du self-managed cluster pour créer les system tables requises. Pour plus d'informations, consultez la rubrique Étape 1 : Vérifier le cluster autogéré et activer les tables système.

La table est incomplète sur différents nœuds.

La table est manquante sur certains nodes.

Créez des tables portant le même nom sur différents shards. Pour une table interne d'une materialized view, renommez la table interne, puis reconstruisez la materialized view pour qu'elle pointe vers la table renommée. Pour plus d'informations, consultez la rubrique La table interne d'une vue matérialisée est incohérente entre les shards.

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 :

Remarque

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

    Remarque

    Ces 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;
      Remarque

      La 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.

      image
    • 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 :

      1. Connectez-vous à l'instance source.

      2. 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.

      3. 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 :

        Important

        Vous 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;
      4. É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;