Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-11-20 GMT+08:00

Restricciones en la reducción de ClickHouseServer

Escala de clúster

  • Si un clúster solo tiene un shard, los nodos de instancia no se pueden quitar del clúster.
  • Múltiples nodos de instancia en el mismo shard deben desmantelarse o volver a ponerse en servicio al mismo tiempo.

    La información del fragmento del clúster se puede consultar ejecutando la sentencia SQL select cluster,shard_num,replica_num,host_name from system.clusters;.

Almacenamiento de clústeres

Asegúrese de que el espacio en disco de los nodos que no se desmantelarán sea suficiente para almacenar datos de todos los nodos desmantelados. Debe haber aproximadamente un 10% de espacio de almacenamiento redundante después del desmantelamiento para garantizar que las instancias restantes puedan funcionar correctamente. El procedimiento es el siguiente:

  1. Ejecute el siguiente comando para comprobar el uso del disco en cada nodo:

    select * from system.disks;

    free_space indica el espacio libre en disco, y total_space indica el espacio total en disco. El espacio usado se calcula restando el valor de free_space del de total_space y su unidad es byte.

  2. Ejecute el comando anterior en un nodo que desea retirar del servicio y calcule el volumen de datos en el nodo mediante la fórmula anterior.
  3. Ejecute el comando anterior en un nodo que no se retirará del servicio y, a continuación, utilice la siguiente fórmula: (Valor de free_space - Volumen de datos del nodo que se va a desmantelar)/Valor de total_space. Si el resultado es superior al 10%, el nodo se puede retirar del servicio.

Estado del clúster

Si hay algún nodo de instancia de ClickHouseServer defectuoso en el clúster, no se pueden retirar todos los nodos de instancia del clúster. Elija Cluster > Services > ClickHouse, haga clic en Instance y vea el estado de ejecución de cada nodo del clúster.

Base de datos

Si una base de datos solo se implementa en un nodo de instancia que desea desmantelar, no se puede desmantelar el nodo de instancia. Para quitar el nodo de instancia, debe crear la base de datos en todos los nodos de instancia de ClickHouseServer del clúster. El procedimiento es el siguiente:

  1. Ejecute el comando select * from system.databases; para recopilar la lista de base de datos de cada nodo.

    name indica el nombre de la base de datos. engine indica el motor de base de datos y el valor predeterminado es Atomic. Si se utiliza el motor predeterminado, no es necesario especificar el motor al crear una tabla.

  2. Para la base de datos desplegada solo en el nodo de instancia que se va a desmantelar, ejecute el siguiente comando para crear la base de datos:

    create database xxx engine=xxx on cluster xxx;

Tabla local no replicada

Si una tabla no replicada local se despliega solo en un nodo de instancia que desea desmantelar, no se puede desmantelar el nodo de instancia. Para desmantelar el nodo, cree una tabla local no replicada con el mismo nombre en cualquier nodo que no se desmantelar.

Por ejemplo, el clúster actual tiene dos shards, el shard 1 tiene dos nodos A y B, y el shard 2 tiene dos nodos C y D. La tabla no replicada test se creó sin la palabra clave ON CLUSTER, por lo que la tabla solo se crea en el nodo A.

En este caso, para desmantelar los nodos A y B en shard 1, es necesario crear la tabla test en el nodo C o D en shard 2.

Ejecute el siguiente comando para listar las tablas de datos de cada nodo:

select database,name,engine,create_table_query from system.tables where database != 'system';

Realice las siguientes operaciones según el resultado:

  • Compruebe la columna engine. La tabla que no contiene el campo Replicated es una tabla local no replicada.
  • Si no hay tablas replicadas en ningún nodo que no se retiren, cree una basada en la tabla creada por create_table_query. La siguiente sentencia de creación es un ejemplo:

    CREATE TABLE {database}.{table} ('column name' type...) ENGINE = MergeTree;

Tabla replicada

Si solo existe una tabla replicada en algunos nodos del clúster, no se pueden retirar los nodos en los que se despliega la tabla replicada. Debe crear manualmente la tabla replicada en todos los nodos de instancia en los que no se despliega ninguna tabla replicada en el clúster antes de retirar el servicio.

Por ejemplo, el clúster actual tiene dos particiones, la partición 1 tiene dos nodos A y B, y la partición 2 tiene dos nodos C y D. La tabla replicada test se creó sin la palabra clave ON CLUSTER por lo que la tabla solo se crea en los nodos A y B.

Para desmantelar los nodos A y B en el fragmento 1, es necesario crear la tabla test en los nodos C y D en la partición 2.

Ejecute el siguiente comando para listar las tablas de datos de cada nodo:

select database,name,engine,create_table_query from system.tables where database != 'system';

Realice las siguientes operaciones según el resultado:

  • Compruebe la columna engine. La tabla que contiene el campo Replicated es una tabla replicada.
  • Si no hay tablas replicadas en ningún nodo que no se retiren, cree una basada en la tabla creada por create_table_query.

Tabla distribuida

Las tablas distribuidas no se migrarán automáticamente para el desmantelamiento. Cree tablas distribuidas en los nodos que no se retirarán del servicio.

Ejecute el siguiente comando para listar las tablas de datos de cada nodo y compruebe la columna engine. Estas tablas son tablas distribuidas si esta columna contiene el campo Distributed.

select database,name,engine from system.tables where database != 'system';

La creación de tablas distribuidas en estos nodos no afectará al desmantelamiento, pero puede afectar a las operaciones de servicio posteriores.

Vista

Las vistas no se migrarán automáticamente para el desmantelamiento y las vistas no almacenan datos. Ejecute el siguiente comando para listar las tablas de datos de cada nodo y compruebe la columna engine. Estas tablas son vistas si esta columna contiene el campo View.

select database,name,engine from system.tables where database != 'system';

Ejecute el siguiente comando para eliminar las vistas una por una:

drop view {database_name}.{table_name};

Vistas materializadas

Las vistas materializadas no se migrarán automáticamente para Desmantelamiento. Cree vistas materializadas en los nodos que no se retirarán del servicio. Si la vista materializada de un nodo que se va a desmantelar no muestra la tabla de agregación especificada, pero utiliza una tabla incrustada, el nodo no se puede desmantelar.

Ejecute el siguiente comando para listar las tablas de datos de cada nodo y compruebe la columna engine. Estas tablas son vistas materializadas si esta columna contiene el campo MaterializedView.

select database,name,engine, create_table_query from system.tables where database != 'system';

La tabla cuya columna create_table_query contiene el campo POPULATE es una tabla incrustada. Las vistas se inicializan cuando se crean y los datos recién insertados se omiten durante la inicialización. Una tabla que no contiene el campo POPULATE es una tabla de agregación. Los datos recién insertados se insertan directamente en los gráficos de vista y las tablas de soporte, y los datos originales se cargan manualmente en las vistas y las tablas de soporte. Las operaciones de creación de tabla de la tabla de agregación y la tabla incrustada son diferentes.

Realice las siguientes operaciones para procesar las vistas materializadas del nodo que se va a retirar del servicio:

  1. Registre las vistas materializadas y elimínelas.

    drop view {database_name}.{table_name};

  2. Una vez completada la retirada de nodos, elimine y vuelva a crear las vistas materializadas correspondientes en los nodos en uso para actualizar las vistas materializadas.
  3. Para crear una tabla de agregación, especifique WHERE para buscar datos históricos e importar manualmente los datos históricos a las vistas materializadas. De lo contrario, los datos históricos no se pueden importar a las vistas materializadas según condiciones unificadas. Como resultado, los datos se importan repetidamente. Por ejemplo, se puede especificar un punto de actualización para garantizar que los datos antes del punto de actualización se carguen manualmente en modo INSERT.
    • Agregue WHERE { Time field (for example, date)}>= toDate ({ Current time (for example, '2022-12-01 00:00:00')}) a la sentencia de creación de tabla.
    • insert into {table} select {Table field} from {Source table} where {Time field}< toDate ({Current time}) is used to load original data.
  4. Las tablas incrustadas perderán los datos generados durante la creación de tablas. Puede especificar WHERE para filtrar todos los datos históricos. En este caso, se crea una tabla vacía y solo es necesario insertar manualmente todos los datos en la tabla de origen de datos históricos.

Tablas de motores de terceros

Actualmente, las tablas de motores de terceros no se pueden migrar automáticamente para su desmantelamiento.

Ejecute el siguiente comando para listar las tablas de datos de cada nodo y compruebe la columna engine. Estas tablas son tablas de motores de terceros si esta columna no contiene ninguno de los siguientes campos: MergeTree, View, MaterializedView, Distributed, and Log. (La columna engine de una tabla de motor de terceros puede contener campo Memory, HDFS, o MySQL.)

select database,name,engine from system.tables where database != 'system';

Cree tablas de motor de terceros en los nodos que no se retirarán del servicio y elimine las de los nodos que se retirarán del servicio.

Datos desvinculados

Si la tabla de un nodo que se va a retirar del servicio se ha desconectado y todavía existen datos en el directorio detached, el nodo no se puede retirar del servicio. Es necesario adjuntar los datos del directorio detached a otros directorios antes de retirar el servicio.

  1. Ejecute el siguiente comando para ver el catálogo del sistema system.detached_parts del nodo que se va a retirar del servicio:

    select * from system.detached_parts;

  2. Si existen datos de detached part y estas particiones ya no se utilizan, ejecute el siguiente comando para eliminar los datos de detached part:

    ALTER TABLE {table_name} DROP DETACHED PARTITION {partition_expr} SETTINGS allow_drop_detached = 1;

  3. Ejecute el siguiente comando para comprobar si hay algún dato detached part en el catálogo del sistema system.detached_parts:

    select * from system.detached_parts;

    Si la salida del comando está vacía, no hay datos de detached part en este catálogo del sistema.