Las copias de seguridad son características increíbles, especialmente cuando se trabaja con entornos críticos de datos. En Apache Cassandra, podemos crear copias de seguridad de datos de bases de datos almacenados como archivos SSTABLE. Luego puede usar los archivos de copia de seguridad para restaurar la base de datos en caso de pérdida de datos, nodo o falla de partición. Las copias de seguridad también se pueden usar para replicar la base de datos en otra máquina, eliminando la necesidad de recrear la estructura desde cero.
Cassandra admite dos tipos principales de copias de seguridad:
En este tutorial, nos centraremos en las copias de seguridad de las instantáneas. Primero, aprendemos cómo podemos inicializar y crear las copias de seguridad de la base de datos almacenadas en un clúster Apache Cassandra.
Vamos a sumergirnos.
¿Qué son las instantáneas??
En el contexto de un clúster Apache Cassandra, una instantánea se refiere a una copia de los archivos sstables de una tabla en un momento específico. La tabla de cadenas sstables o ordenadas es un formato de archivo que Apache Cassandra usa para almacenar los datos en memoria en memtables para acceso rápido. Los archivos sstables son inmutables y se eliminan o se fusionan con nuevos archivos sstables a medida que cambian los datos.
Las instantáneas en Cassandra pueden ser emitidas manualmente por el usuario o automatizadas al habilitar la función en los archivos de configuración.
Configuración de datos de muestra para ilustrar las instantáneas en Cassandra
Antes de ilustrar cómo realizar las instantáneas en Cassandra, creemos algunos datos de muestra para demostrar cómo crear instantáneas.
Comencemos por crear una instantánea.
cassandra@cqlsh> Crear instantánea del espacio de teclado
... con replication = 'class': 'SimpleStrategy', 'Replication_Factor': 1;
La consulta anterior crea un espacio de claves con la simplatray y el factor de replicación de 1.
Luego podemos cambiar a ese espacio de tecla y crear dos tablas:
cassandra@cqlsh> use instantáneas;
A continuación, cree una tabla de usuarios de la siguiente manera:
cassandra@cqlsh: instantánea> Crear usuarios de tabla (
… Yo dint,
... texto de nombre de usuario,
... correo electrónico de correo electrónico,
... Clave principal (ID)
...);
También podemos crear otra tabla que se llame con una estructura similar:
cassandra@cqlsh: instantánea> crear tabla users_copy (
… Yo dint,
... texto de nombre de usuario,
... correo electrónico de correo electrónico,
... Clave principal (ID)
...);
Finalmente, podemos agregar algunos datos de muestra a la tabla como se muestra:
Insertar en los usuarios (ID, nombre de usuario, correo electrónico) Valores (0, 'UserName1', '[email protected]');
Insertar en los usuarios (ID, nombre de usuario, correo electrónico) Valores (1, 'UserName2', '[email protected]');
Insertar en Uss_Copy (ID, nombre de usuario, correo electrónico) Valores (0, 'UserName1', '[email protected]');
Insertar en Users_Copy (ID, nombre de usuario, correo electrónico) Valores (1, 'UserName2', '[email protected]');
Luego podemos consultar las tablas de la siguiente manera:
cassandra@cqlsh: instantánea> seleccionar * de usuarios;
cassandra@cqlsh: instantánea> seleccionar * de ussers_copy;
Producción:
Configurar el clúster de Cassandra para instantáneas
Antes de crear instantáneas, es bueno asegurarse de que la creación automática de instantáneas esté deshabilitada. Editar el cassandra.archivo YML y establecer el siguiente valor:
auto_snapshot: falso
También se recomienda deshabilitar la compactación automática antes de la creación de instantáneas. En Cassandra.Archivo YML, Establezca el siguiente valor:
snapshot_before_compaction: falso
Una vez que la configuración dada esté lista, reinicie su clúster de Cassandra para aplicar los cambios.
Tomando instantáneas de todos los espacios de teclas
Al crear manualmente instantáneas en Cassandra, usamos el comando nodetool. Puede ejecutar el siguiente comando:
$ Nodetool Ayuda Snapshot
Para ver las opciones de comando disponibles.
Para tomar una instantánea de todos los espacios de teclas en el clúster Cassandra, podemos ejecutar el siguiente comando:
$ Nodetool Snapshot
El comando debe devolver un mensaje como se muestra:
Por defecto, Cassandra crea una instantánea con el nombre de la marca de tiempo actual.
Para especificar el nombre de la instantánea, puede usar la opción -t como se muestra en el siguiente comando:
$ Nodetool Snapshot -T Copias de seguridad
Esto crea una instantánea de todos los espacios de teclas en el clúster y la guarda en el directorio de copias de seguridad.
Tomando una instantánea de un solo espacio de tecla
También puede tomar una copia de seguridad de un solo espacio de tecla en el clúster especificando el nombre del espacio de teclado. Por ejemplo, para tomar una instantánea del espacio de tecla de instantánea que creamos anteriormente, podemos ejecutar el siguiente comando:
$ nodetool snapshot -t snapshotting_backup Snapshotting
Cassandra crea un directorio de instantáneas para cada tabla en el espacio de tecla especificado. Por ejemplo, dado que el espacio de teclado de "instantánea" contiene dos tablas, Cassandra crea un directorio de instantáneas para cada.
Por defecto, Cassandra almacena las instantáneas en el directorio/var/lib/cassandra/data.
$ ls -la/var/lib/cassandra/data/snapshotting/
Deberías ver directorios de cada tabla en el espacio de llave.
Dentro de cada archivo, encontrará los otros archivos y directorios como se muestra:
Tomando una instantánea de una sola mesa dentro de un espacio de llave
A veces, es posible que desee tomar una instantánea de una tabla específica dentro de un espacio de teclas determinado. Para eso, puede usar la opción de Tabla seguida del nombre de la tabla que desea hacer una copia de seguridad.
Por ejemplo, para tomar una instantánea de la tabla Users_Copy en el espacio de tecla "Saptshotting", podemos ejecutar el siguiente comando:
$ Nodetool Snapshot -Table Users_Copy -T UC_SNAP Snapshotting
El comando crea una instantánea de la tabla Users_Copy y la guarda en el directorio UC_SNAP.
Instantáneas de listado
Para ver las instantáneas disponibles en el clúster, use el comando listSnapShot como se muestra:
$ nodetool listsnapsnapshots
Debe obtener una lista de todas las instantáneas y detalles disponibles, como el nombre de la instantánea, al espacio de teclas que pertenecen, el apellido de la columna, el tamaño del disco y el tamaño real.
Detalles de la instantánea:
Nombre de la instantánea Nombre del espacio de la columna Nombre de la columna Tamaño del tamaño verdadero en el disco
UC_SNAP Snapshotting Users_Copy 0 bytes 5.87 kib
1661397218984 System_schema Columnas 0 bytes 12.51 KIB
1661397218984 System_schema tipos 0 bytes 15.03 kib
1661397218984 System_Schema Índices 0 bytes 15.15 kib
1661397218984 System_Schema Keyspaces 0 bytes 5.81 kib
1661397218984 System_Schema Dropped_Columns 0 bytes 15.63 kib
1661397218984 System_Schema Agreges 0 bytes 15.4 kib
1661397218984 System_schema desencadenantes 0 bytes 15.15 kib
1661397218984 System_schema Tablas 0 Bytes 10.27 kib
1661397218984 usuarios de instantáneas 0 bytes 5.86 KIB
1661397218984 Usuarios de instantáneas_copy 0 bytes 5.87 kib
snapshotting_backup usuarios de instantáneas 0 bytes 5.86 KIB
snapshotting_backup Snapshotting Users_Copy 0 bytes 5.87 kib
Copia de seguridad de usuarios de instantáneas 0 bytes 5.86 KIB
Copia de seguridad de Saptshotting Users_Copy 0 bytes 5.87 kib
1661397899477 Instantos usuarios de usuarios_copy 0 bytes 5.87 kib
Total de triediskspaceused: 0 bytes
Conclusión
En este artículo, aprendiste cómo funciona la instantánea en Apache Cassandra. También aprendió a tomar instantáneas de espacios de teclas, tablas específicas dentro de un espacio de tecla y más.
Gracias por leer!