Productos secos 丨 ¿Cómo escalar el clúster DolphinDB horizontal y verticalmente?

A medida que el negocio se expande y la cantidad de datos se acumula, la capacidad de datos y la potencia informática del sistema de base de datos se irán desbordando gradualmente, por lo que un sistema de base de datos excelente debe tener una buena escalabilidad. Los nodos de datos en el clúster DolphinDB integran la computación y el almacenamiento, por lo tanto, para mejorar la potencia de computación y la capacidad de los datos, solo necesita apuntar a los nodos de datos. DolphinDB admite tanto la expansión horizontal, lo que significa agregar nodos, como la expansión vertical, lo que significa aumentar el almacenamiento de nodos.

Antes de expandir el clúster, debe tener un concepto básico del clúster DolphinDB. El clúster de DolphinDB se compone de 3 roles: controlador, agente y nodo de datos. Las tareas asignadas a cada rol son las siguientes:

  • El nodo de control es responsable de administrar los metadatos y proporcionar herramientas de administración de clústeres web.
  • El nodo de agente es responsable del inicio y la parada del nodo, y debe haber un nodo de agente en cada servidor.
  • El nodo de datos es responsable del cálculo y almacenamiento.

Los archivos de configuración relacionados con el clúster generalmente se encuentran en el directorio de configuración:

controller.cfg: Ubicado en el servidor donde se ubica el nodo de control, es responsable de definir la configuración relevante del nodo de control, como IP, número de puerto y límite superior del número de conexiones del nodo de control.

cluster.cfg: Ubicado en el servidor donde se ubica el nodo de control, se encarga de definir la configuración personalizada de cada nodo del cluster, como ruta de almacenamiento, número de conexiones, límite de memoria, etc.

cluster.nodes: ubicado en el servidor donde se encuentra el nodo de control, el archivo de configuración de miembros del clúster, incluida la IP del nodo, el puerto, el alias del nodo y el rol.

agent.cfg: contiene la IP y el puerto del nodo del agente y la IP y el puerto del nodo de control. Cada servidor físico debe tener un nodo de agente.

Si el clúster se escala horizontalmente, es necesario modificar el archivo de configuración de miembros (cluster.nodes) del clúster. Si el nodo de datos está ubicado en un nuevo servidor físico, se debe implementar un nuevo nodo de agente (agent.cfg) para que sea responsable del nodo en la nueva máquina física. Inicie y detenga, y luego reinicie el nodo de control para cargar el nuevo nodo de datos. Cuando se inicia un nuevo nodo de datos, la potencia informática del nodo se incluirá inmediatamente en la planificación de recursos informáticos del clúster, pero los datos que se han almacenado en el clúster no se ajustarán al nuevo nodo de datos, y el sistema asignará los siguientes datos recién ingresados ​​de acuerdo con la estrategia. Varios nodos de datos.

Si se trata de un clúster expandido verticalmente, solo necesita modificar el archivo de configuración (cluster.cfg) del nodo de datos para agregar una ruta al parámetro de volumen del nodo especificado.

Los pasos para expandir el clúster se describen en detalle a continuación.

1. Instrucciones de configuración del clúster

Para la implementación de clústeres, consulte el tutorial Implementación de clústeres de servidores multifísicos .

El clúster de ejemplo tiene 3 nodos de datos, cada nodo de datos está ubicado en un servidor físico y el nodo de control está ubicado en otro servidor físico:

Nodo de control: 172.18.0.10

Nodo de datos 1: 172.18.0.11

Nodo de datos 2: 172.18.0.12

Nodo de datos 3: 172.18.0.13

La información de cada archivo de configuración es la siguiente:

controller.cfg

localSite = 172.18.0.10: 8990: ctl8990

cluster.nodes

localSite, modo 
172.18.0.11:8701:agent1,agent 
172.18.0.12:8701:agent2,agent 
172.18.0.13:8701:agent3,agent 
172.18.0.11:8801:node1,datanode 
172.18.0.12:8802:node2,datanode 
172.18. 0.13: 8803: nodo3, nodo de datos

Agent.cfg en el servidor físico donde se encuentra el nodo de datos 1

localSite = 172.18.0.11: 8701: agent1 
controllerSite = 172.18.0.10: ctl8900

Para reflejar el efecto expandido, primero establecemos

05b9e257c0827cc0f420561ba71156ec.png

Cree una base de datos distribuida en el grupo y escriba datos:

data = table (1..1000 como id, rand (`A`B`C, 1000) como nombre) 
// Se reserva una reserva de 1000 para particiones y se utiliza para pruebas de escritura posteriores. 
db = database (" dfs: //scaleout_test_db",RANGE,cutPoints(1..2000,10)) 
tb = db.createPartitionedTable (datos, "scaleoutTB", `id) 
tb.append! (datos)

Después de la ejecución, observe la distribución de datos a través de DFS Explorer en la Web:


Después de expandir el clúster, podemos observar si el nuevo nodo o almacenamiento está habilitado agregando nuevos datos.

2. Expansión horizontal

Debido al aumento en el volumen de datos comerciales, la capacidad de almacenamiento y computación del clúster no puede cumplir con los requisitos, ahora se agrega un nuevo servidor y se agrega al clúster original como un nuevo nodo. La dirección IP del servidor recién agregada es 172.18.0.14, el número de puerto es 8804 y el alias es node4. El nuevo servidor necesita implementar el nodo del agente, utilizando el puerto 8701, el alias es agent4.

Proceder de la siguiente:

(1) Implementar nuevos nodos de agentes

Copie el paquete de instalación de DolphinDB en el nuevo servidor y descomprímalo. Agregue una nueva carpeta de configuración en la carpeta del servidor y cree agent.cfg, agregando el siguiente contenido:


#Especifique la ip y el puerto del propio Agente localSite = 172.18.0.14: 8701: agent4 #Dígale al 
Agente la ubicación del 
controlador de este clúster controllerSite = 172.18.0.10: 8990: ctl8990 
mode = agent

(2) Modificar la configuración de los miembros del clúster

Vaya al servidor físico donde se encuentra el nodo de control, modifique config / cluster.nodes y agregue la información de los miembros del clúster. Los contenidos del archivo modificado son:

localSite, modo 
172.18.0.11:8701:agent1,agent 
172.18.0.12:8701:agent2,agent 
172.18.0.13:8701:agent3,agent 
172.18.0.14:8701:agent4,agent 
172.18.0.11:8801:node1,datanode 
172.18. 0.12: 8802: nodo2, nodo de datos 
172.18.0.13:8803:nodo3,datanode 
172.18.0.14:8804:nodo4,datanode

(3) Reinicie el clúster

En el entorno Linux, use el comando pkill dolphindb para cerrar el clúster. Después de esperar a que se liberen los recursos del puerto, reinicie el controlador y cada agente. El comando es el siguiente:

Inicie el controlador:

nohup ./dolphindb -console 0 -mode controller -script dolphindb.dos -config config / controller.cfg -logFile log / controller.log -nodesFile config / cluster.nodes &

Inicie el agente:

./dolphindb -mode agent -datos de inicio -script dolphindb.dos -config config / agent.cfg -logFile log / agent.log

Ingrese la IP y el número de puerto del nodo de control en la barra de direcciones del navegador, como 172.18.0.10:8990, para acceder a la Web, podemos ver que se ha iniciado el nuevo nodo de agente agent4 y que el nodo de datos node4 está cerrado.

a621ba6fae168c52a8eab43928ada08a.png

Inicie cada nodo y el clúster se puede utilizar normalmente.

A continuación, escribimos algunos datos en la base de datos dfs: // scaleout_test_db en el clúster para verificar si se ha habilitado el nuevo nodo de datos.

tb = database ("dfs: // scaleout_test_db") .loadTable ("scaleoutTB") 
tb.append! (table (1001..1500 como id, rand (`A`B`C, 500) como nombre))

Observe el Explorador de DFS, puede ver que hay datos distribuidos al nuevo nodo node4.

46fb3c3bca996c39d5396e6034c2c342.png

A veces nos encontraremos con que algunos datos se migrarán a otros nodos. Esto está relacionado con el mecanismo de recuperación de DolphinDB. El clúster DolphinDB admite la recuperación automática de datos. Cuando el sistema detecta que algunos nodos del clúster no han tenido un latido durante mucho tiempo, se determina que está inactivo y los datos se restaurarán automáticamente a partir de otras copias y la cantidad de copias de todo el clúster se mantendrá estable. Esta es la razón por la que los datos migrarán cuando un nodo no se haya iniciado durante mucho tiempo. El mecanismo de recuperación de DolphinDB está relacionado con los siguientes parámetros de configuración del nodo de control:

# El número de copias de cada dato en el clúster, el valor predeterminado es 2 
dfsReplicationFactor = 2 #Replica 
la política de seguridad, se permite que existan más de 0 copias en un nodo 1 Se deben almacenar múltiples copias en diferentes nodos, el valor predeterminado es 0 
dfsReplicaReliabilityLevel = 1 # 
¿ Cuánto tiempo se detiene el latido del nodo e inicia la recuperación , No habilitado por defecto, unidad ms 
dfsRecoveryWaitTime = 30000

dfsRecoveryWaitTime controla el inicio de la recuperación. Si este parámetro no está configurado, la función de recuperación se desactivará. El valor predeterminado es desactivado. La configuración del tiempo de espera es principalmente para evitar una recuperación innecesaria causada por algunas paradas y mantenimiento planificados, y debe ser configurado por el usuario de acuerdo con la situación real de operación y mantenimiento.

En términos de estabilidad, cuantas más réplicas, es menos probable que se pierdan datos accidentalmente, pero demasiadas réplicas también conducirán a un rendimiento deficiente cuando el sistema guarda datos, por lo que no se recomienda que el valor de dfsReplicationFactor sea inferior a 2, pero las configuraciones específicas requieren usuarios Considere de manera integral en función de la cantidad de nodos en el clúster general, los requisitos de estabilidad de datos y los requisitos de rendimiento de escritura del sistema.

Se recomienda que dfsReplicaReliabilityLevel se establezca en 1 en un entorno de producción, es decir, varias réplicas se encuentran en diferentes servidores.

3. Expansión vertical

Suponiendo que el espacio en disco del servidor donde se encuentra node3 es insuficiente, ahora se agrega un disco con la ruta / dev / disk2, que debe incluirse en el almacenamiento de node3. La ruta de almacenamiento del nodo de datos se especifica mediante el parámetro de volumen en el archivo de configuración. Si el clúster inicial no especifica el parámetro de volumen, la ruta de almacenamiento predeterminada es [HomeDir] / DataNodeAlias] / storage, es decir, la ruta de almacenamiento predeterminada de node3 es data / node3 / storage .

Agregue el siguiente contenido al archivo cluster.cfg del nodo de control:

node3.volumes = data / node3 / storage, / dev / disk2 / node3

Tenga en cuenta que si necesita agregar una ruta de almacenamiento después de la ruta predeterminada, debe establecer explícitamente la ruta predeterminada; de lo contrario, se perderán los metadatos de la ruta predeterminada.

Después de modificar la configuración, solo necesita reiniciar el nodo de datos, no el nodo de control.

A continuación, escriba nuevos datos en el clúster para ver si los datos se escriben en el nuevo disco.

tb = database ("dfs: // scaleout_test_db") .loadTable ("scaleoutTB") 
tb.append! (table (1501..2000 como id, rand (`A`B`C, 500) como nombre))

Vaya al disco para observar si los datos están escritos:

9110702674ee8fc237f63dab026b1a33.png


No existe un límite superior claro en el tamaño de los datos que DolphinDB puede admitir, y depende completamente de la cantidad de recursos invertidos.


Supongo que te gusta

Origin blog.51cto.com/15022783/2570392
Recomendado
Clasificación