Clusters ClickHouse autogerenciados frequentemente apresentam instabilidade, baixa escalabilidade, dificuldades de atualização e recuperação de desastres limitada. Por isso, cada vez mais clientes estão migrando seus clusters ClickHouse autogerenciados para um service PaaS na cloud. Este tópico descreve como migrar de um cluster ClickHouse autogerenciado para um cluster da edição compatível com a comunidade do ApsaraDB for ClickHouse.
Pré-requisitos
-
Cluster de destino:
O cluster deve ser da Edição Compatível com a Comunidade.
É necessário ter uma conta e senha de banco de dados. Para criar uma conta do ClickHouse, consulte Manage accounts for a Community-Compatible Edition cluster.
A conta deve possuir o nível mais alto de permissões. Para conceder permissões, consulte Modify permissions.
-
Cluster autogerenciado:
É necessário ter uma conta e senha de banco de dados.
A conta deve ter permissões de leitura em bancos de dados e tabelas, além de permissão para executar comandos SYSTEM.
-
O cluster de destino e o cluster autogerenciado devem conseguir se comunicar pela rede.
Se o cluster autogerenciado e o cluster de destino estiverem na mesma VPC, adicione também os endereços IP de todos os nós do cluster de destino e o bloco CIDR IPv4 do vSwitch correspondente à lista de permissões do cluster autogerenciado.
Para configurar uma lista de permissões em um cluster ApsaraDB for ClickHouse, consulte Configure a whitelist.
Para configurar uma lista de permissões em um cluster autogerenciado, consulte a documentação relevante do product.
Para visualizar os endereços IP de todos os nós no cluster ApsaraDB for ClickHouse, execute
SELECT * FROM system.clusters;.-
Para obter o bloco CIDR IPv4 do vSwitch do seu cluster ApsaraDB for ClickHouse, siga estas etapas:
No console do ApsaraDB for ClickHouse, acesse a página Cluster Information do cluster de destino. Na seção Network Information, obtenha o VSwitch ID.
Na lista de vSwitch, use o Instance ID para localizar o vSwitch de destino e obter seu IPv4 CIDR.
Caso o cluster autogerenciado e o cluster de destino estejam em VPCs diferentes, ou se o cluster autogerenciado estiver em um data center local ou em outra plataforma cloud, estabeleça primeiro a conectividade de rede. Para mais informações, consulte How do I establish a network connection between a target cluster and a data source?.
Validação da migração
Antes de iniciar a migração de dados, recomendamos fortemente a criação de um ambiente de teste para validar a compatibilidade do negócio, o desempenho e o plano de migração. Após concluir a validação, realize a migração de dados no ambiente de produção. Essa etapa crucial ajuda a identificar e resolver problemas potenciais antecipadamente, garantindo uma migração tranquila e evitando interrupções no ambiente de produção.
Crie uma tarefa de migração para transferir os dados. Para etapas detalhadas, consulte este tópico.
Para informações sobre compatibilidade de migração para a cloud, análise de gargalos de desempenho e garantia de sucesso na migração, consulte Analysis and Solutions for Compatibility and Performance Bottlenecks in Migrating Self-Managed ClickHouse to the Cloud.
Escolha uma solução
|
Solução de migração |
Vantagens |
Desvantagens |
Casos de uso |
|
Oferece uma interface visual. Não é necessário migrar metadados manualmente. |
Suporta apenas migração completa e incremental de todo o cluster. Não é possível migrar bancos de dados, tabelas ou dados históricos específicos. |
Migração de um cluster inteiro. |
|
|
Permite controlar quais bancos de dados e tabelas migrar. |
Envolve etapas complexas e migração manual de metadados. |
|
Procedimento
Migração via console
Limites
O cluster de destino deve estar executando a versão 21.8 ou posterior.
Observações
Durante a migração
-
Durante a migração, o processo de merge é pausado no cluster de destino, mas continua no cluster autogerenciado.
NotaSe uma tarefa de migração durar muito tempo, pode haver acúmulo excessivo de metadados no cluster de destino. Recomendamos que as tarefas de migração não excedam 5 dias de duração. Tarefas que ultrapassam 5 dias são canceladas automaticamente.
O cluster de destino deve ser o cluster
default. Se o seu cluster autogerenciado usar um nome diferente, o service converte automaticamente a definição declusternas tabelas distribuídas paradefault.
Escopo da migração
-
Objetos suportados
-
Bancos de dados, dicionários de dados e materialized views.
-
Este service suporta a migração de dicionários de dados criados com SQL, mas não aqueles criados com XML.
Para verificar isso, execute a seguinte instrução:
SELECT * FROM system.dictionaries WHERE (database = '') OR isNull(database);. Se a instrução retornar linhas, isso indica que você possui dicionários de dados criados usando XML. Quando um dicionário de dados acessa um service externo, garanta que o service externo esteja disponível e que o cluster esteja adicionado à sua lista de permissões. Se a fonte de dados de um dicionário de dados for uma tabela interna no cluster ClickHouse atual e o parâmetro
HOSTna definição for um endereço IP, o acesso ao dicionário poderá falhar após a migração devido à alteração do endereço IP. Reconfirme oHOSTdo cluster ClickHouse atual e crie o dicionário de dados manualmente.
-
Esquemas de tabela: Todos os esquemas de tabela, exceto tabelas com engines Kafka e RabbitMQ.
Dados: Migração incremental de dados de tabelas da família MergeTree.
-
-
Objetos e dados não suportados
Tabelas com engines Kafka e RabbitMQ, e seus dados.
Dados de tabelas não-MergeTree, como tabelas externas e tabelas Log.
ImportanteMigre manualmente os itens não suportados listados acima.
-
Limites de volume de dados
Dados frios: A migração de dados frios é lenta. Para evitar falhas causadas por tempos de migração longos, recomendamos limpar os dados frios do seu cluster autogerenciado para garantir que o volume total não exceda 1 TB.
Dados quentes: Se o volume de dados quentes exceder 10 TB, é provável que a tarefa de migração falhe.
Se o volume de dados exceder esses limites, considere usar a solução manual migration.
Impacto no cluster
-
Cluster autogerenciado:
A leitura de dados do cluster autogerenciado aumenta o uso de CPU e memória.
Operações DDL não são permitidas.
-
Cluster de destino:
A gravação de dados no cluster de destino aumenta o uso de CPU e memória.
Operações DDL não são permitidas nos bancos de dados e tabelas que estão sendo migrados.
Essa restrição não se aplica a outros bancos de dados e tabelas.
O processo de merge é interrompido apenas para os bancos de dados e tabelas que estão sendo migrados.
O cluster reinicia antes do início da tarefa de migração.
Após a conclusão da migração, o cluster realiza operações frequentes de merge. Isso aumenta o uso de I/O e pode levar a uma maior latência nas requisições de negócio. Planeje o impacto potencial desse aumento de latência. Calcule a duração específica das operações de merge. Para instruções, consulte Calculate the merge time after migration.
Procedimento
Etapa 1: Verificar o cluster e ativar tabelas de sistema
Antes de migrar dados, modifique o arquivo config.xml no seu cluster autogerenciado para ativar a migração incremental. As modificações necessárias dependem de as tabelas system.part_log e system.query_log estarem ativadas.
Se as tabelas de sistema não estiverem ativadas
Se você não ativou system.part_log e system.query_log, adicione as seguintes configurações ao arquivo 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>
Se as tabelas de sistema estiverem ativadas
-
Garanta que as configurações de
system.part_logesystem.query_logno arquivo config.xml correspondam ao conteúdo a seguir. Inconsistências podem causar falha na migração de dados ou torná-la lenta.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> Após modificar a configuração, execute as instruções
drop table system.part_logedrop table system.query_log. A inserção de dados em uma tabela de negócio recria automaticamente as tabelassystem.part_logesystem.query_log.
Etapa 2: Configurar compatibilidade do cluster de destino
Configure o cluster de destino para ser compatível com o cluster autogerenciado. Esta etapa minimiza as alterações necessárias na aplicação após a migração.
-
Obtenha e compare os números de versão do cluster de destino e do cluster autogerenciado.
Faça logon no cluster de destino e no cluster autogerenciado e execute a seguinte instrução em cada um para obter seus números de versão. Para mais informações sobre como fazer logon no ApsaraDB for ClickHouse, consulte Connect to a database.
SELECT version(); -
Se as versões forem diferentes, faça logon no cluster de destino e defina o parâmetro de compatibilidade para corresponder à versão do cluster autogerenciado. Isso garante que os recursos sejam os mais consistentes possível. Veja um exemplo abaixo:
SET GLOBAL compatibility = '22.8';
Etapa 3: (Opcional) Ativar a engine MaterializedMySQL
Se o seu cluster autogerenciado contiver tabelas que usam a engine MaterializedMySQL, execute a seguinte instrução para ativar essa engine.
SET GLOBAL allow_experimental_database_materialized_mysql = 1;
A comunidade ClickHouse não mantém mais a engine MaterializedMySQL. Após migrar para a cloud, recomendamos usar o Data Transmission Service (DTS) para sincronizar dados do MySQL.
Como a engine MaterializedMySQL não é mantida, o Data Transmission Service (DTS) usa tabelas ReplacingMergeTree em vez de tabelas MaterializedMySQL ao sincronizar dados do MySQL para o ApsaraDB for ClickHouse. Para mais informações, consulte MaterializedMySQL compatibility.
Para mais informações sobre como usar o DTS para migrar dados do MySQL para o ApsaraDB for ClickHouse, consulte os seguintes tópicos:
Etapa 4: Registrar e limpar tabelas com engines Kafka/RabbitMQ
Antes de iniciar a migração, registre as definições de todas as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes no cluster autogerenciado, trate as tabelas implícitas e, em seguida, exclua essas tabelas para evitar erros de migração.
-
Faça logon no cluster autogerenciado e consulte todas as tabelas com engines Kafka e RabbitMQ, juntamente com suas dependências.
/* 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'); -
Visualize a definição da materialized view para verificar se sua tabela de destino é uma tabela implícita.
/* 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>'; -
Se a tabela de destino de uma materialized view for uma tabela implícita, renomeie a tabela de destino para um novo nome para evitar perda de dados quando a materialized view for excluída posteriormente.
-- 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>; -
Exclua as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes.
-- Drop materialized views first DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- Then drop Kafka/RabbitMQ engine tables DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>;
Certifique-se de salvar todas as instruções DDL registradas. Você precisará delas para recriar essas tabelas tanto no cluster autogerenciado quanto no cluster de destino posteriormente. Se você realizou uma operação RENAME, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view. Para mais informações, consulte CREATE MATERIALIZED VIEW.
Etapa 5: Criar uma tarefa de migração de dados
Faça logon no console do ApsaraDB for ClickHouse.
Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster de destino.
No painel de navegação à esquerda, escolha .
-
Na página de tarefas de migração, clique em Create Migration Task.
-
Configure as instâncias de origem e destino.
Defina as seguintes configurações e clique em Test Connectivity and Proceed.
NotaSe o teste de conexão for bem-sucedido, prossiga para a próxima etapa. Se o teste de conexão falhar, reconfigure as instâncias de origem e destino com base nas mensagens exibidas.
Parâmetros do cluster de origem
Parâmetro
Descrição
Exemplo
Source Access Method
Selecione 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
O nome do cluster de origem.
O nome pode conter apenas dígitos e letras minúsculas.
source
Source Cluster Name
Execute
SELECT * FROM system.clusters;para obter o Source Cluster Name.default
VPC IP Address
O endereço IP e PORTA (endereço TCP) de cada shard no cluster, separados por vírgulas.
ImportanteNão é possível usar o nome de domínio VPC ou o endereço SLB de um cluster ApsaraDB for ClickHouse.
Formato:
IP:PORT,IP:PORT,......O método para obter o endereço IP e a PORTA do cluster varia dependendo do cenário de migração de dados.
Migração entre contas ou entre regiões
Use a seguinte instrução SQL para obter o endereço IP e a PORTA do cluster autogerenciado:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = 'default' and replica_num = 1;Aqui,
replica_num=1seleciona o primeiro conjunto de réplicas. Você também pode escolher outros conjuntos de réplicas ou selecionar uma réplica de cada shard.Migração de ClickHouse fora da Alibaba Cloud
Se o endereço IP não puder ser facilmente mapeado para a Alibaba Cloud, use a seguinte instrução SQL para obter o endereço IP e a PORTA do cluster autogerenciado:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;Os parâmetros são descritos da seguinte forma:
-
cluster_name: o nome do cluster de destino.
-
replica_num=1seleciona o primeiro conjunto de réplicas. Você também pode escolher outros conjuntos de réplicas ou selecionar uma réplica de cada shard.
Se o endereço IP e a porta forem mapeados para a Alibaba Cloud por meio de tradução de rede, configure o endereço IP e a porta mapeados correspondentes.
192.168.0.5:9000,192.168.0.6:9000
Database Account
A conta de banco de dados do cluster de origem.
test
Database Password
A senha da conta de banco de dados do cluster de origem.
test
Parâmetros do cluster de destino
Parâmetro
Descrição
Exemplo
Database Account
A conta de banco de dados do cluster de destino.
test
Database Password
A senha da conta de banco de dados do cluster de destino.
test
-
-
Confirme o conteúdo da migração.
Revise cuidadosamente as informações sobre os dados a serem migrados na página e, em seguida, clique em Next: Pre-detect and Start Synchronization.
-
O sistema executa uma pré-verificação no link de migração em segundo plano e inicia a tarefa.
O sistema executa uma Instance Status Detection, uma Storage Space Detection e uma Local Table and Distributed Table Detection nos clusters de origem e destino.
-
Se a pré-verificação for bem-sucedida:
Após o sucesso da pré-verificação, a página mostra que três verificações foram aprovadas: Instance status check, Storage space check e Local table and distributed table check. O topo da página mostra que o tempo estimado de migração é de 2 minutos e descreve os impactos durante a migração:
A instância de origem permite leitura e escrita, mas operações DDL não podem ser realizadas.
A instância de destino permite leitura, mas não é possível gravar nas tabelas migradas.
Quando o tempo restante for inferior a 10 minutos, pare as gravações para acionar o fim da migração.
Tabelas não-MergeTree retêm apenas a estrutura da tabela sem migração de dados após o dimensionamento.
Revise cuidadosamente como o processo de migração de dados afeta as instâncias.
-
Clique em Completed.
ImportanteAo clicar em Complete, o sistema cria e inicia a tarefa, e seu status muda para Running. Visualize a tarefa na lista de tarefas.
Após criar a tarefa, monitore-a. Na fase final da migração, pare as operações de escrita no cluster autogerenciado e migre os esquemas de banco de dados e tabelas restantes. Para mais informações, consulte Monitor the migration task and stop writes to the self-managed cluster.
-
Se a pré-verificação falhar: Siga as instruções na mensagem de erro e execute a tarefa de migração de dados novamente. A tabela a seguir descreve os itens de pré-verificação e seus requisitos. Para mais informações sobre mensagens de erro de pré-verificação e suas soluções, consulte Migration precheck errors and solutions.
Item de verificação
Requisito
Instance Status Detection
A tarefa de migração de dados não pode iniciar se tarefas de gerenciamento (como scale-out, upgrade ou downgrade) estiverem em execução no cluster de origem ou destino.
Storage Space Detection
O espaço de armazenamento disponível do cluster de destino deve ser pelo menos 1,2 vezes o espaço de armazenamento utilizado do cluster autogerenciado.
Local Table and Distributed Table Detection
Se uma tabela local no cluster autogerenciado não tiver uma tabela distribuída correspondente ou tiver mais de uma tabela distribuída, a verificação falha. Para resolver isso, exclua as tabelas distribuídas redundantes ou crie uma tabela distribuída única para a tabela local.
-
-
Etapa 6: Avaliar a viabilidade da migração
Se a velocidade de escrita do cluster de origem for inferior a 20 MB/s, pule esta etapa.
Se a velocidade de escrita do cluster de origem for superior a 20 MB/s, verifique a velocidade real de escrita do cluster de destino para avaliar a viabilidade da migração. Uma migração bem-sucedida exige que a velocidade de escrita do cluster de destino acompanhe a do cluster de origem. Siga estas etapas:
Visualize o TairPDBShardingIOBandwidth do cluster de destino para determinar sua velocidade real de escrita. Para informações sobre como visualizar o TairPDBShardingIOBandwidth, consulte View cluster monitoring data.
-
Compare as velocidades de escrita dos clusters de destino e de origem.
Se a velocidade de escrita do cluster de destino for superior à do cluster de origem: É provável que a migração seja bem-sucedida. Continue para a Etapa 7.
Se a velocidade de escrita do cluster de destino for inferior à do cluster de origem: É provável que a migração falhe. Recomendamos que você cancel the migration task e use manual migration.
Etapa 7: Monitorar a migração e parar gravações
Faça logon no console do ApsaraDB for ClickHouse.
Na lista de instâncias da Community Edition, clique no ID do cluster de destino.
No painel de navegação, clique em .
-
Na página da lista de migração de instâncias, você pode:
-
Visualizar o status e a fase de execução da tarefa de migração.
ImportanteQuando a fase de execução atingir Data Migration (ou seja, a migração do esquema da tabela estiver concluída), prossiga imediatamente para Step 8 para recriar as tabelas com engines Kafka/RabbitMQ no cluster autogerenciado e retomar a ingestão incremental de dados.
Monitore atentamente as Running Information da tarefa alvo. Com base no tempo restante estimado na coluna Running Information, siga Step 9 para parar as gravações no cluster autogerenciado e tratar as tabelas com engines Kafka e RabbitMQ.
-
Na coluna Actions, clique em View Details para abrir a página de detalhes da tarefa. A página de detalhes da tarefa contém as seguintes informações:
NotaSe a tarefa de migração estiver concluída (seu status for Completed ou Canceled), o conteúdo da página View Details será limpo. Visualize a lista de esquemas de tabelas migrados no cluster de destino executando a seguinte instrução SQL:
SELECT `database`, `name`, `engine_full` FROM `system`.`tables` WHERE `database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema');Todos os esquemas de tabelas migrados e seus status de migração.
Todos os esquemas de bancos de dados migrados e seus status de migração.
Todas as mensagens de erro para migrações de bancos de dados e tabelas com falha.
A tabela a seguir descreve os status das tarefas de migração.
Status da tarefa
Descrição
Running
Preparando o ambiente e os recursos para a migração.
Initializing
Inicializando a tarefa de migração.
Configuration Migration
Migrando a configuração do cluster.
Schema Migration
Migrando todos os bancos de dados, tabelas da família MergeTree e tabelas Distributed.
Data Migration
Migrando incrementalmente dados de tabelas da família MergeTree.
Other Schema Migration
Migrando os esquemas de materialized views e tabelas não-MergeTree.
Data Check
Verificando se o volume de dados das tabelas concluídas no cluster de destino é consistente com o volume de dados no cluster autogerenciado. Se houver inconsistência, a tarefa pode falhar. Recomendamos reiniciar a migração.
Post-migration Configuration
Configurando ajustes do sistema para o cluster de destino, como limpar recursos de migração e reativar gravações na instância de origem.
Completed
A tarefa de migração está concluída.
Canceled
A tarefa de migração foi cancelada.
-
Etapa 8: Recriar tabelas com engines Kafka/RabbitMQ no cluster autogerenciado
Depois que a tarefa de migração entrar na fase de migração de dados (ou seja, a migração do esquema da tabela estiver concluída), use as instruções DDL salvas anteriormente para recriar as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes no cluster autogerenciado. Uma vez recriadas, os dados incrementais voltam a fluir e são sincronizados automaticamente com o cluster de destino.
Se você realizou uma operação RENAME em tabelas de destino implícitas anteriormente, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view.
-- 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>;
Etapa 9: Parar gravações e realizar o cutover
Quando o tempo restante estimado para a migração for inferior a 10 minutos ou o progresso da migração atingir 99%, execute as seguintes etapas de cutover:
-
Pare as gravações de negócio. No cluster autogerenciado, exclua as tabelas com engines Kafka/RabbitMQ recriadas anteriormente e suas materialized views dependentes.
-- Drop materialized views first DROP TABLE <DATABASE>.<MATERIALIZED_VIEW_NAME>; -- Then drop Kafka/RabbitMQ engine tables DROP TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME>; Aguarde até que o progresso da migração atinja 100% e a migração seja totalmente concluída.
-
Conecte-se ao cluster de destino e use as instruções DDL salvas anteriormente para recriar as tabelas com engines Kafka/RabbitMQ e suas materialized views dependentes.
ImportanteSe você realizou uma operação RENAME em tabelas de destino implícitas anteriormente, use a cláusula TO apontando para a tabela de destino renomeada ao recriar a materialized view.
-- Rebuild Kafka/RabbitMQ engine tables on the destination cluster CREATE TABLE <DATABASE>.<KAFKA_OR_RABBITMQ_TABLE_NAME> (...) ENGINE = Kafka/RabbitMQ SETTINGS ...;-- Rebuild materialized view (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>; Verifique se o pipeline de dados no cluster de destino está funcionando corretamente e se os dados estão fluindo normalmente.
Etapa 10: Concluir a migração
Após parar as gravações no cluster autogerenciado, clique em Complete the task. Esta etapa migra os dados restantes, realiza uma verificação de volume de dados e migra os esquemas de banco de dados e tabelas restantes. Visualize o conteúdo migrado em task details.
Se a verificação de dados falhar, a tarefa de migração permanece na fase de verificação de volume de dados. Recomendamos cancelar a migração e criar uma nova tarefa de migração. Para mais informações sobre como cancelar uma tarefa de migração, consulte Other operations.
Uma migração de dados longa pode causar acúmulo excessivo de metadados no cluster de destino. Recomendamos que as tarefas de migração não excedam 5 dias de duração. Tarefas que ultrapassam 5 dias são canceladas automaticamente.
Faça logon no console do ApsaraDB for ClickHouse.
Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster de destino.
No painel de navegação à esquerda, clique em .
Para a tarefa de migração alvo, clique em Complete Migration na coluna Actions.
Na caixa de diálogo Complete Migration, clique em OK.
Etapa 11: Migrar dados para tabelas não-MergeTree
A tarefa de migração transfere apenas o esquema da tabela de tabelas não-MergeTree (como tabelas externas e tabelas Log), criando-as no cluster de destino sem dados de negócio. Migre os dados de negócio manualmente. Siga estas etapas:
-
Faça logon no cluster autogerenciado e execute a seguinte instrução para identificar as tabelas não-MergeTree que requerem migração de dados.
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') )) Faça logon no cluster de destino e use a função remote para migrar os dados da tabela. Para instruções detalhadas, consulte Migrate data using the remote function.
Outras operações
Quando uma tarefa de migração é concluída, seu Migration Status muda para Completed. A lista de tarefas não é atualizada imediatamente, portanto, atualize a página periodicamente para visualizar o status mais recente.
|
Ações |
Descrição |
Impacto |
Cenário |
|
Cancel Migration |
Cancela forçosamente a tarefa e pula a verificação de volume de dados, sem migrar os esquemas de banco de dados e tabelas restantes. |
|
Use esta opção quando a migração afetar negativamente seu cluster autogerenciado e você precisar restaurar as operações de escrita imediatamente. |
|
Stop Migration |
Interrompe a migração de dados imediatamente, mas conclui a migração dos esquemas de banco de dados e tabelas restantes. A verificação de volume de dados é ignorada. |
A migração de dados ficará incompleta, mas os esquemas de banco de dados e tabelas na instância de destino estarão completos. |
Use esta opção para testar um conjunto de dados parcialmente migrado sem interromper as gravações no cluster autogerenciado. |
Parar migração
Faça logon no console do ApsaraDB for ClickHouse.
Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster alvo.
No painel de navegação à esquerda, escolha .
Na coluna Actions da tarefa de migração alvo, clique em Stop Migration.
Na caixa de diálogo Stop Migration, clique em OK.
Cancelar migração
Faça logon no console do ApsaraDB for ClickHouse.
Na página Clusters, selecione Clusters of Community-compatible Edition e clique no ID do cluster alvo.
No painel de navegação à esquerda, escolha .
Na coluna Actions da tarefa de migração alvo, clique em Cancel Migration.
Na caixa de diálogo Cancel Migration, clique em OK.
Migração manual
Método 1: Usar os comandos BACKUP e RESTORE
Para mais informações, consulte Use the BACKUP and RESTORE commands to back up and restore data.
Método 2: Usar a instrução INSERT FROM SELECT
Etapa 1: Migrar metadados
Migrar metadados do ClickHouse consiste principalmente em migrar o DDL de criação de tabelas.
Se precisar instalar a ferramenta clickhouse-client, garanta que sua versão corresponda à da instância de destino do ApsaraDB for ClickHouse. Encontre o link de download em clickhouse-client.
-
Visualize a lista de bancos de dados no cluster autogerenciado.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases" > database.listParâmetros:
Parâmetro
Descrição
old host
O endereço do cluster autogerenciado.
old port
A porta do cluster autogerenciado.
old user name
A conta usada para fazer logon no cluster autogerenciado. A conta deve ter permissões de leitura/escrita DML, permissões de configurações e permissões DDL.
old password
A senha da conta.
NotaO banco de dados
systemé um banco de dados de sistema e não requer migração. Filtre-o. -
Visualize a lista de tabelas no cluster autogerenciado.
clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>" > table.listParâmetros:
Parâmetro
Descrição
database_name
O nome do banco de dados.
Alternativamente, consulte todos os nomes de bancos de dados e tabelas diretamente nas tabelas de sistema.
SELECT DISTINCT database, name FROM system.tables WHERE database != 'system';NotaSe um nome de tabela consultado começar com
.inner., trata-se de uma representação interna de uma materialized view e não requer migração. Filtre-o. -
Exporte o DDL de criação de todas as tabelas em um banco de dados específico do cluster autogerenciado.
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 -
Importe o DDL de criação de tabelas para a instância de destino do ApsaraDB for ClickHouse.
NotaAntes de importar o DDL de criação de tabelas, crie o banco de dados correspondente na instância do ApsaraDB for ClickHouse.
clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" -d '<database_name>' --multiquery < tables.sqlParâmetros:
Parâmetro
Descrição
new host
O endereço da instância de destino do ApsaraDB for ClickHouse.
new port
A porta da instância de destino do ApsaraDB for ClickHouse.
new user name
A conta usada para fazer logon na instância de destino do ApsaraDB for ClickHouse. A conta deve ter permissões de leitura/escrita DML, permissões de configurações e permissões DDL.
new password
A senha da conta.
Etapa 2: Migrar dados
Função Remote
-
-
Na instância de destino ApsaraDB for ClickHouse, execute a seguinte instrução SQL para migrar dados.
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;NotaPara a versão 20.8, use primeiro a função
remoteRawpara migração de dados. Se a migração falhar, solicite um upgrade de versão secundária.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;Parâmetros:
ImportanteUse o parâmetro
_partition_idpara filtrar dados. Isso reduz o uso de recursos.Parâmetro
Descrição
new_database
O nome do banco de dados na instância de destino do ApsaraDB for ClickHouse.
new_table
O nome da tabela na instância de destino do ApsaraDB for ClickHouse.
old_endpoint
O endpoint da instância de origem.
ClickHouse autogerenciado
Formato do endpoint:
Endereço IP de um nó da instância de origem:porta.ImportanteA porta deve ser a porta TCP.
ApsaraDB for ClickHouse
Use o endpoint interno VPC da instância de origem, não o endpoint público.
ImportanteAs portas 3306 e 9000 são valores fixos.
-
Instância da Community Edition:
-
Formato do endpoint:
Endereço interno VPC:3306. -
Exemplo:
cc-2zeqhh5v7y6q*.clickhouse.ads.aliyuncs.com:3306
-
-
Instância Enterprise:
-
Formato do endpoint:
Endereço interno VPC:9000. -
Exemplo:
cc-bp1anv7jo84ta*clickhouse.clickhouseserver.rds.aliyuncs.com:9000
-
old_database
O nome do banco de dados do cluster autogerenciado.
old_table
O nome da tabela do cluster autogerenciado.
username
A conta do cluster autogerenciado.
password
A senha da conta do cluster autogerenciado.
max_execution_time
O tempo máximo de execução para uma consulta. Defina como 0 para não haver limite de tempo.
max_bytes_to_read
O número máximo de bytes que uma consulta pode ler dos dados de origem. Defina como 0 para não haver limite.
log_query_threads
Especifica se deve registrar informações de threads durante a execução da consulta. Defina como 0 para desativar o registro.
max_result_rows
O número máximo de linhas no resultado da consulta. Defina como 0 para não haver limite.
min_insert_block_size_rows
O número mínimo de linhas por parte de dados em uma única escrita. Defina como 4294967296 (máximo) para desativar o limite de linhas. Esta configuração funciona em conjunto com min_insert_block_size_bytes para evitar excesso de partes pequenas.
min_insert_block_size_bytes
O tamanho mínimo em bytes por parte de dados em uma única escrita. Defina como 1073741824 (1 GB) para evitar excesso de partes pequenas e evitar o erro "Too many partitions for a single INSERT block".
_partition_id
O ID da partição de dados.
-
Exportação e importação de arquivos
Exporte dados do banco de dados do cluster autogerenciado para um arquivo e, em seguida, importe o arquivo para a instância de destino do ApsaraDB for ClickHouse.
-
Exportação e importação CSV
-
Exporte dados do banco de dados do cluster autogerenciado para um arquivo 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 -
Importe o arquivo CSV para a instância de destino do ApsaraDB for ClickHouse.
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
-
-
Stream com pipe do 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"
Erros de verificação de migração e soluções
|
Mensagem de erro |
Descrição |
Solução |
|
Missing unique distributed table or sharding_key not set. |
Uma |
Crie uma |
|
The corresponding distributed table is not unique. |
Uma |
Exclua as |
|
MergeTree table on a multi-replica cluster. |
O |
Why are non-replicated tables not allowed when you scale or migrate multi-replica instances? |
|
Data reserved table on destination cluster. |
A tabela a ser migrada já existe e contém dados no |
Exclua a tabela correspondente do |
|
Columns of distributed table and local table conflict |
As colunas da |
Recrie a |
|
Insufficient storage space. |
O |
Aumente o |
|
Missing system table. |
Uma |
Modifique o arquivo de configuração |
|
The table is incomplete across different nodes. |
A tabela está ausente em alguns |
Crie tabelas com o mesmo nome em diferentes |
Calculando o tempo de merge pós-migração
Após a migração, o cluster de destino realiza temporariamente operações frequentes de merge. Isso aumenta o uso de I/O e pode causar maior latência nas requisições de service. Se seus services forem sensíveis à latência de leitura e escrita, considere fazer upgrade do tipo de instância e do nível de desempenho do ESSD para encurtar esse período de alto uso de I/O. Para mais informações, consulte Vertical scaling, scale-out, and scale-in of community-compatible clusters.
Use as seguintes fórmulas para calcular o tempo de merge após a migração:
Estas fórmulas aplicam-se tanto a clusters de réplica única quanto a clusters master-replica.
-
Tempo total estimado para operações frequentes de merge =
MAX(hot data merge time, cold data merge time)Tempo de merge de dados quentes =
amount of hot data on a single node * 2 / MIN(instance type bandwidth, disk bandwidth * n)Tempo de merge de dados frios =
(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)
A lista a seguir descreve os parâmetros usados nas fórmulas:
Quantidade de dados quentes em um único nó: Visualize este valor na linha Disk Usage - Single-Node Statistics. Para mais informações, consulte View cluster monitoring information.
-
Largura de banda do tipo de instância
NotaEsses valores de largura de banda não são absolutos e variam dependendo dos tipos de máquina usados pelo backend do ApsaraDB for ClickHouse. Os valores fornecidos são mínimos e servem apenas como referência.
Especificação
Largura de banda (MB/s)
Standard 8 núcleos 32 GB
250
Standard 16 núcleos 64 GB
375
Standard 24 núcleos 96 GB
500
Standard 32 núcleos 128 GB
625
Standard 64 núcleos 256 GB
1250
Standard 80 núcleos 384 GB
2000
Standard 104 núcleos 384 GB
2000
Largura de banda do disco: Encontre este valor na linha Maximum throughput per disk (MB/s) da tabela ESSD performance level.
n: O número de discos em um único nó. Execute o seguinte comando para obter este valor:
SELECT count() FROM system.disks WHERE type = 'local';Quantidade de dados frios: Visualize este valor na linha clickhouse_cold_storage_data. Para mais informações, consulte View cluster monitoring information.
Número de nós: O número de nós no cluster. Execute o seguinte comando para obter este valor:
SELECT count() FROM system.clusters WHERE cluster = 'default' and replica_num=1;Largura de banda de leitura do OSS: Encontre este valor na coluna Total Intranet and Internet Download Bandwidth da tabela OSS bandwidth.
Largura de banda de escrita do OSS: Encontre este valor na coluna Total Intranet and Internet Upload Bandwidth da tabela OSS bandwidth.
FAQ
-
P: Como resolvo o erro "Too many partitions for single INSERT block (more than 100)"?
R: Esse erro ocorre porque uma única operação INSERT excede o limite max_partitions_per_insert_block, que é 100 por padrão. No ClickHouse, cada operação de escrita cria uma parte de dados, e uma partição pode conter uma ou mais partes de dados. Se uma única operação INSERT gravar dados em muitas partições, ela cria um número excessivo de partes de dados. Isso pode degradar significativamente o desempenho de merge e consulta. O ClickHouse impõe esse limite para evitar degradação de desempenho.
Para resolver esse problema, ajuste o número de partições ou modifique o parâmetro max_partitions_per_insert_block.
Ajuste o esquema da tabela e o método de particionamento, ou evite inserir dados em muitas partições diferentes em uma única operação.
-
Se for necessário inserir dados em muitas partições de uma só vez, aumente o limite modificando o parâmetro max_partitions_per_insert_block. A sintaxe é a seguinte:
SET GLOBAL ON cluster DEFAULT max_partitions_per_insert_block = XXX;NotaA comunidade ClickHouse recomenda usar o valor padrão de 100. Não defina esse valor muito alto, pois pode degradar o desempenho. Após a importação de dados em lote, recomendamos redefinir o valor para o padrão.
-
P: Por que a conexão da minha instância de destino do ApsaraDB for ClickHouse com meu banco de dados ClickHouse autogerenciado falha?
R: Esse problema ocorre se o seu banco de dados ClickHouse autogerenciado estiver atrás de um firewall ou usar uma lista de permissões. Para resolver isso, adicione o bloco CIDR IPv4 do vSwitch do cluster ApsaraDB for ClickHouse à lista de permissões do seu banco de dados autogerenciado. Para informações sobre como obter o bloco CIDR IPv4 do vSwitch do cluster ApsaraDB for ClickHouse, consulte View IPv4 CIDR block.
-
P: Ao dimensionar ou migrar uma instância multi-replica, por que tabelas não-Replicated não são permitidas? Se existirem, como resolvo esse problema?
R: O motivo dessa restrição e a solução são os seguintes:
-
Motivo: Uma instância multi-replica requer tabelas Replicated para sincronizar dados entre réplicas. Sem tabelas Replicated, a configuração multi-replica é ineficaz. A ferramenta de migração seleciona aleatoriamente uma réplica como fonte de dados e migra seus dados para a instância de destino.
Se existirem tabelas não-Replicated, os dados não são sincronizados entre as réplicas, o que significa que cada réplica mantém dados isolados. Como a ferramenta de migração migra de apenas uma réplica, esse processo causa perda de dados. Por exemplo, conforme mostrado na figura a seguir, a tabela MergeTree na réplica 0 (r0) contém os dados 1, 2 e 3. A tabela MergeTree na réplica 1 (r1) contém os dados 4 e 5. Se a ferramenta de migração selecionar r0 como fonte, apenas os dados 1, 2 e 3 serão migrados para a instância de destino.
-
Solução: Se for possível excluir as tabelas não-Replicated na instância de origem, recomendamos fazê-lo. Caso contrário, substitua as tabelas não-Replicated por tabelas Replicated. Siga estas etapas:
Faça logon na instância de origem.
Crie uma tabela Replicated. O esquema da tabela deve ser idêntico ao da tabela não-Replicated que deseja substituir, exceto pela engine.
-
Migre manualmente os dados da tabela não-Replicated para a nova tabela Replicated. A instrução de migração é a seguinte:
ImportanteRealize esta migração para cada réplica. Por exemplo, execute a instrução tanto em r0 quanto em r1.
Obtenha o endereço IP do nó para a instrução executando
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; Troque os nomes da tabela não-Replicated e da tabela Replicated.
EXCHANGE TABLES <source_database>.<non_replicated_table_to_replace> AND <destination_database>.<new_replicated_table> ON CLUSTER default;
-