Saltar al contenido

Cómo migrar datos Redis con replicación en Ubuntu 18.04

marzo 4, 2020

 

Introducción

Redis es un, valor clave de almacenamiento de datos en memoria conocida por su flexibilidad, rendimiento, soporte de idiomas de ancho, y una función de características como la replicación . La replicación es la práctica de copiar periódicamente los datos de una base de datos a otro con el fin de tener una réplica que siempre se mantiene un duplicado exacto de la instancia principal. Un uso común de la replicación Redis es migrar un almacén de datos Redis existente a un nuevo servidor, como se podría hacer cuando la ampliación de su infraestructura para un mejor rendimiento.

Este tutorial contornos el proceso de utilización de Redis incorporado características de replicación a los datos de migrar de un servidor de 18,04 Ubuntu (la “fuente”) a otro (el “objetivo”). Esto implica hacer algunos cambios de configuración en cada servidor, estableciendo el servidor de destino para la función como una réplica de la fuente, y a continuación, la promoción de la parte posterior réplica a un primario después de que se complete la migración.

Requisitos previos

Para completar este tutorial, necesitará: servidores

  • Dos con Ubuntu 18.04. Cada servidor debe tener un usuario configurado con privilegios administrativos y un cortafuegos configurado con UFW. Para configurar este entorno, siga nuestra guía de configuración inicial del servidor de Ubuntu 18.04 para ambos servidores.
  • La última versión de Redis instalado en cada servidor. Para hacer esto, siga nuestra guía sobre cómo instalar Redis desde las fuentes en Ubuntu 18.04.

Paso 1 – (Opcional) Cargando Tu Fuente Redis Instancia con datos de ejemplo

Este paso opcional implica cargar la fuente de ejemplo Redis con algunos datos de la muestra para que pueda experimentar con la migración de datos a la instancia de destino. Si ya tiene datos que desea migrar hacia su destino, puede seguir adelante con el Paso 2, que irá sobre cómo hacer una copia para arriba.

Para empezar, conectar con el servidor de Ubuntu que va a utilizar como origen de ejemplo Redis como usuario no root:

ssh [email protected]_server_ip

  • ssh Sammy @ source_server_ip

A continuación, ejecute el siguiente comando para acceder a su servidor Redis:

redis-cli

  • Redis-cli

Si ha configurado el servidor Redis para requerir autenticación de contraseña, ejecute el comando auth seguido de su contraseña Redis:

auth source_redis_password

  • auth source_redis_password

a continuación, ejecute los siguientes comandos. Esto creará una serie de claves que sostienen un par de cuerdas, un hash, una lista, y un conjunto: «diversión»

mset string1 "Redis" string2 "is" string3 "fun!"
hmset hash1 field1 "Redis" field2 "is" field3 "fast!"
rpush list1 "Redis" "is" "feature-rich!"
sadd set1 "Redis" "is" "free!"

  • mset cadena1 «Redis» texto2 «es» string3
  • hmset hash1 campo1 «Redis» campo2 «es» field3 «rápido!»
  • rpush list1 «Redis» «» «es rica en características!»
  • sadd set1 «Redis» «» «es gratis!»

Además, ejecute los siguientes comandos de expirar para proporcionar algunas de estas teclas con un tiempo de espera. Esto hará que se volátil , lo que significa que Redis los eliminará después de un período de tiempo especificado (7500 segundos, en este caso):

expire string2 7500
expire hash1 7500
expire set1 7500

  • expire string2 7500
  • expirará hash1 7500
  • expirará set1 7500

Con que, usted tiene algunos datos de ejemplo que se pueden exportar a su objetivo instancia Redis. Mantenga las Redis-CLI del sistema abierto, por ahora, ya que vamos a correr un poco más comandos desde que en el siguiente paso para respaldar estos datos arriba.

Paso 2 – Copia de seguridad Fuente Redis Instancia

Cada vez que se va a mover datos de un servidor a otro, existe el riesgo de que algo podría ir mal y usted podría perder datos como resultado. A pesar de que este riesgo es pequeño, vamos a utilizar comandos de bgsave Redis para crear una copia de seguridad de su base de datos Redis fuente en caso de que se produzca un error durante el proceso de replicación.

Si no lo tiene abierto, inicie mediante la apertura de la interfaz de línea de comandos Redis:

redis-cli

  • Redis-cli

Además, si usted ha configurado el servidor Redis para requerir autenticación de contraseña, ejecute la autenticación comando seguido de su contraseña Redis:

auth password

  • de autenticación de contraseña

A continuación, ejecute el comando bgsave. Esto creará una instantánea de su actual conjunto de datos y exportarlo a un archivo de volcado que tuvo lugar en el directorio de trabajo de Redis:

bgsave

  • bgsave

Nota: Puede tomar una instantánea de la base de datos Redis, ya sea con el proceso de almacenamiento o bgsave comandos. La razón por la que utilizamos el comando bgsave aquí, sin embargo, es que el proceso de almacenamiento del sistema se ejecuta de forma sincrónica , lo que significa que bloqueará cualquier otro cliente conectados a la base de datos. Debido a esto, la documentación comando Guardar recomienda que casi nunca se debe ejecutar en un entorno de producción.

su lugar, se sugiere usar el comando bgsave que se ejecuta de forma asíncrona . Esto hará que Redis al tenedor la base de datos en dos procesos: el proceso padre seguirá sirviendo a los clientes mientras el niño guarda la base de datos antes de salir:

Tenga en cuenta que si los clientes añadir o modificar datos, mientras que la operación bgsave está en marcha, estos cambios ganaron’ t ser capturados en la instantánea.

Después de eso, usted puede cerrar la conexión a la instancia Redis mediante la ejecución del comando de salida: salida

exit

Si lo necesita en el futuro, se puede encontrar el archivo de volcado de datos en el directorio de trabajo de la instancia Redis. Recordemos cómo en el prerrequisito tutorial de instalación Redis que establece la instancia Redis de uso / var / lib / ReDiS como su directorio de trabajo. Lista

el contenido de sus Redis directorio de trabajo para confirmar que se está sosteniendo el archivo de volcado de datos:

sudo ls /var/lib/redis

  • sudo ls / var / lib / ReDiS

Si el archivo de volcado se exportó correctamente, usted lo verá en este comando de salida. Por defecto, este archivo se denomina dump.rdb:

Outputdump.rdb

Después de confirmar que sus datos se copia de seguridad correctamente, ya está todo listo para configurar el servidor Redis fuente para aceptar conexiones externas y permitir la replicación.

Paso 3 – Configuración por defecto Fuente Redis Instancia

Por, Redis no está configurado para escuchar las conexiones externas, lo que significa que las réplicas se configure no será capaz de sincronía con su instancia de origen a menos que actualice su configuración. A continuación, vamos a actualizar el archivo de configuración de la instancia de origen para permitir conexiones externas y también establecer una contraseña que la instancia de destino utilizará para autenticar una vez que comienza la replicación. Después de eso, vamos a añadir una regla de cortafuegos para permitir las conexiones con el puerto en el que se está ejecutando Redis.

Abrir el archivo de configuración de la fuente de Redis ejemplo, con su editor de texto preferido. Aquí, usaremos nano:

sudo nano /etc/redis/redis.conf

  • sudo nano /etc/redis/redis.conf

Vaya a la línea que comienza con la directiva se unen. Se parece a esto por defecto:

. . .
bind 127.0.0.1
. . .

Esta directiva se une a Redis 127.0.0.1, una dirección de bucle invertido IPv4 que representa localhost. Esto significa que este ejemplo Redis está configurado para escuchar sólo para las conexiones que se originan en el mismo servidor que aquel en el que está instalado. Para permitir que su instancia de origen para aceptar cualquier conexión hecha a su dirección IP pública, tales como los hechos de su instancia de destino, agregue la dirección IP de origen del servidor Redis después de la 127.0.0.1. Tenga en cuenta que usted no debe incluir ninguna coma después de 127.0.0.1:

. . .
bind 127.0.0.1 source_server_IP
. . .

A continuación, si aún no lo ha hecho todavía, usar la directiva requirepass para configurar una contraseña que los usuarios deben introducir antes de que puedan interactuar con los datos de la fuente ejemplo. Hacerlo eliminando el comentario de la Directiva y ajustarlo a una contraseña compleja o frase de contraseña:

. . .
requirepass source_redis_password
. . .

Asegúrese de tomar nota de la contraseña que estableció aquí, ya que lo necesitará cuando configure el servidor de destino.

Después de que el cambio, se puede guardar y cerrar el archivo de configuración Redis. Si editó con nano, hacerlo pulsando CTRL + X, Y, a continuación, ENTER.

A continuación, reinicie el servicio Redis para poner estos cambios en vigor:

sudo systemctl restart redis

  • sudo systemctl reinicio Redis

Eso es todo lo que necesita hacer en términos de la configuración de Redis, pero si se ha configurado un servidor de seguridad en el servidor que continuará para bloquear cualquier intento por el servidor de destino para conectarse con la fuente. Suponiendo que haya configurado el servidor de seguridad con UFW, se puede actualizar para que permita conexiones con el puerto en el que se está ejecutando Redis con el siguiente comando. Tenga en cuenta que Redis está configurado para el uso del puerto 6379 de forma predeterminada:

sudo ufw allow 6379

  • sudo permiten UFW 6379

Después de hacer que el cambio final que se le todo hecho de configurar el servidor Redis fuente. Continúa en el objetivo de configurar su instancia Redis de funcionar como una réplica de la fuente.

Paso 4 – Configuración de su destino Redis Instancia

En este punto ha configurado su fuente ejemplo Redis para aceptar conexiones externas. Sin embargo, debido a que ha bloqueado el acceso a la fuente descomentando la directiva requirepass, su instancia de destino no será capaz de replicar los datos consignados en la fuente. A continuación, se configura su objetivo instancia Redis a ser capaz de autentificar su conexión con la fuente, lo que permite la replicación.

Begin conectándose a su servidor de destino Redis como usuario no root:

ssh [email protected]_server_ip

  • ssh Sammy @ target_server_ip

A continuación, abra el archivo de su servidor de destino Redis configuración:

sudo nano /etc/redis/redis.conf

  • sudo nano / etc / Redis / redis.conf

Si no lo ha hecho ya, debe configurar una contraseña para su objetivo Redis ejemplo con la directiva requirepass:

. . .
requirepass target_redis_password
. . .

a continuación, elimine la directiva masterauth y ponerlo a contraseña de autenticación Redis su fuente de ejemplo. Al hacer esto, el servidor de destino será capaz de autenticar a la instancia de origen después de habilitar la replicación:

. . .
masterauth source_redis_password
. . .

Por último, si tiene clientes que escriben información a su instancia de origen, tendrá que configurarlos para escribir datos a la instancia de destino también. De esta manera, si un cliente escribe los datos después de promover la parte posterior objetivo de ser una instancia principal, no va a perderse.

Para hacer esto, sin embargo, tendrá que ajustar la réplica de sólo lectura Directiva. Esto se establece en sí de forma predeterminada, lo que significa que está configurado para convertirse en una réplica de “sólo lectura”, que los clientes no serán capaces de escribir. Establecer esta directiva para no permitir a los clientes a escribir en él:

. . .
replica-read-only no
. . .

Esos son todos los cambios que necesita para hacer que el archivo de configuración del objetivo, por lo que puede guardar y cerrar la misma.

A continuación, reinicie el servicio Redis para poner estos cambios en vigor:

sudo systemctl restart redis

  • sudo restart systemctl ReDiS

Después de reiniciar el servicio Redis el servidor de destino estará listo para convertirse en una réplica de la fuente. Todo lo que necesita hacer para convertirlo en uno es para ejecutar un solo comando, lo que vamos a hacer en breve.

Nota: Si tiene cualquier cliente de escritura de datos en la fuente de ejemplo Redis, ahora sería un buen momento para configurarlos a datos también escribir a su objetivo.

Paso 5 – Puesta en marcha y se verifique la replicación

En este punto, usted ha configurado su fuente ejemplo Redis para aceptar conexiones desde el servidor de destino y que ha configurado su objetivo instancia Redis ser capaz de autenticar a la fuente como una réplica. Con estas piezas en su lugar, usted está listo para dar vuelta a su instancia de destino en una réplica de la fuente.

Begin mediante la apertura de la interfaz de línea de comandos Redis en su objetivo de servidor Redis:

redis-cli

  • Redis-cli

Ejecutar el comando de autenticación para autenticar la conexión:

auth password

  • de autenticación de contraseña

A continuación, gire el objetivo instancia en una réplica de la fuente con el comando replicaof. Asegúrese de reemplazar source_server_ip con la dirección de su instancia de origen IP pública y source_port con el puerto utilizado por Redis en su instancia de origen:

replicaof source_server_ip source_port

  • replicaof source_server_ip source_port

Desde el indicador, ejecute el siguiente comando de exploración. Esto devolverá todas las claves actualmente en poder de la réplica:

scan 0

  • exploración 0 replicación

Si funciona como se espera, verá todas las llaves de su instancia de origen, celebrada en la réplica. Si ha cargado la fuente de los datos de la muestra en el paso 1, la salida del comando de exploración tendrá este aspecto:

Output1) "0"
2) 1) "string3"
2) "string1"
3) "set1"
4) "string2"
5) "hash1"
6) "list1"

Nota: Tenga en cuenta que este comando puede devolver las llaves en un orden diferente que lo que se muestra en este ejemplo.

Sin embargo, si este comando no devuelve las mismas llaves en poder de su fuente de ejemplo Redis, puede ser que hay un error en uno de los archivos de configuración de sus servidores que impiden la base de datos de destino de la conexión a la fuente. En este caso, cerrar la conexión a su destino instancia Redis, y vuelve a comprobar que ha editado los archivos de configuración tanto en el servidor de origen y de destino Redis correctamente.

Mientras que tiene la conexión abierta, también puede confirmar que las teclas que están a punto de expirar siendo inestable. Hacerlo mediante la ejecución del comando TTL con una de estas teclas como un argumento:

ttl hash1

  • TTL hash1

Esto devolverá el número de segundos antes de que se elimina esta clave:

Output5430

Una vez que haya confirmado que los datos en su instancia de origen se ha sincronizado correctamente a su destino, puede promover la parte trasera objetivo de ser una instancia principal ejecutando el comando replicaof una vez más. Esta vez, sin embargo, en lugar de seguir replicaof con una dirección IP y el puerto, siga con nadie. Esto hará que la instancia de destino para detener la sincronización con la fuente de inmediato:

replicaof no one

  • replicaof nadie confirmar

Para que los datos replicados de la fuente persisten en el objetivo, ejecutar el comando de exploración que ha introducido previamente:

scan 0

Usted deben ver a las mismas claves en la salida de este comando como cuando ejecutó el comando de exploración cuando el objetivo seguía replicando la fuente:

Output1) "0"
2) 1) "string3"
2) "string1"
3) "set1"
4) "string2"
5) "hash1"
6) "list1"

con esto, usted ha migrado con éxito todos los datos de los orígenes ejemplo Redis a su objetivo. Si tiene cualquier cliente que todavía están escribiendo datos a la instancia de origen, ahora sería un buen momento para configurarlos para escritura exclusiva al objetivo.

Conclusión

Hay varios métodos, además de la replicación puede utilizar para migrar datos de una instancia Redis a otro, pero la replicación tiene la ventaja de que requiere relativamente pocos cambios de configuración en el trabajo y sólo un único comando para iniciar o parar.

Si desea obtener más información acerca de trabajar con Redis, le animamos a que echa un vistazo a nuestras serie de tutoriales sobre cómo gestionar una base de datos Redis. Además, si desea mover los datos a una instancia Redis Redis gestionado por digitalocean, siga nuestra guía sobre cómo hacerlo.