Actualmente tengo un servidor redis en vivo que se ejecuta en una instancia en la nube y quiero migrar este servidor redis a una nueva instancia en la nube y usar esa instancia como mi nuevo servidor redis. Si fuera MySQL, exportaría la base de datos del servidor anterior y la importaría al nuevo servidor. ¿Cómo debo hacer esto con redis?
PD: no estoy buscando configurar la replicación. Quiero migrar completamente el servidor redis a una nueva instancia.
Respuestas:
Guarde una instantánea de la base de datos en un dump.rdb ejecutando
BGSAVE
oSAVE
desde la línea de comandos. Esto creará un archivo llamado dump.rdb en la misma carpeta que su servidor redis. Vea una lista de todos los comandos del servidor .Copie este dump.rdb en el otro servidor redis al que desea migrar. Cuando se inicia redis, busca este archivo para inicializar la base de datos.
fuente
appendonly = yes
), configúrelono
antes de iniciar el servidor Redis; de lo contrario, no cargará el nuevo conjunto de datos. Una vez que el conjunto de datos se carga en la memoria, vuelva a encenderlo, tanto en la memoria (config set appendonly yes
) como en el archivo de configuración./etc/redis/redis.conf
, y se puede buscar a través de ella para encontrar dónde están sus.rdb
archivos son:cat /etc/redis/redis.conf | grep "rdb"
. En mi caso es/var/lib/redis
redis-cli config get dir
le daría el directorio en el que.rdb
está almacenado.Primero, cree un volcado en el servidor A.
Esto garantiza que
dump.rdb
esté completamente actualizado y nos muestra dónde está almacenado (/var/lib/redis/dump.rdb
en este caso).dump.rdb
También se escribe periódicamente en el disco automáticamente.Luego, cópielo en el servidor B:
Detenga el servidor Redis en B, copie dump.rdb (asegurándose de que los permisos sean los mismos que antes), luego comience.
La versión de Redis en B debe ser mayor o igual que la de A, o puede tener problemas de compatibilidad .
fuente
CONFIG GET dir
, que regresó"/usr/local/var/db/redis"
Si tiene la conectividad entre servidores, es mejor configurar la replicación (que es trivial, a diferencia de SQL) con la nueva instancia como nodo esclavo; entonces puede cambiar el nuevo nodo a maestro con un solo comando y hacer el movimiento con cero tiempo de inactividad.
fuente
También es posible migrar datos usando el comando SLAVEOF:
Verifique que haya recibido las llaves con
KEYS *
. También puede probar la nueva instancia de cualquier otra manera, y cuando haya terminado, simplemente active la replicación de:fuente
Hoy en día también puedes usar MIGRATE, disponible desde 2.6.
Tuve que usar esto ya que solo quería mover los datos en una base de datos y no en todos. Las dos instancias de Redis viven en dos máquinas diferentes.
Si no puede conectarse directamente a Redis-2 desde Redis-1, use el enlace de puerto ssh:
Un pequeño script para recorrer todas las teclas usando KEYS y MIGRAR cada tecla. Este es Perl, pero espero que tengas la idea:
Ver http://redis.io/commands/migrate para más información.
fuente
Para verificar dónde se debe colocar dump.rdb al importar datos redis,
cliente inicial
y
luego
Aquí / Users / Admin es la ubicación de dump.rdb que se lee del servidor y, por lo tanto, este es el archivo que debe reemplazarse.
fuente
también puedes usar rdd
puede volcar y restaurar un servidor redis en ejecución y permitir filtrar / igualar / renombrar claves de volcado
fuente
Los elementos clave de una migración de tiempo de inactividad cero son:
CONFIG SET slave-read-only no
)En breve:
Además, redis tiene opciones que permiten deshabilitar una fuente redis para aceptar escrituras justo después de separar un objetivo:
min-slaves-to-write
min-slaves-max-lag
Este tema cubierto por
Muy buena explicación del equipo de RedisLabs https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
E incluso su herramienta interactiva para migrar: https://github.com/RedisLabs/redis-migrate
fuente
También quiero hacer lo mismo: migrar un db de una instancia de redis independiente a otras instancias de redis (redis sentinel).
Debido a que los datos no son críticos (datos de sesión), intentaré https://github.com/yaauie/redis-copy .
fuente
La manera simple que encontré para exportar / hacer copias de seguridad de los datos de Redis (crear un archivo de volcado) es iniciar un servidor a través de la línea de comandos con el indicador slaveof y crear una réplica en vivo de la siguiente manera (suponiendo que la fuente Redis es 1.2.3.4 en el puerto 6379):
fuente
Acabo de publicar una utilidad de interfaz de línea de comando para npm y github que le permite copiar claves que coinciden con un patrón determinado (incluso *) de una base de datos Redis a otra.
Puedes encontrar la utilidad aquí:
https://www.npmjs.com/package/redis-utils-cli
fuente
redis-dump finalmente funcionó para mí. Su documentación proporciona un ejemplo de cómo volcar una base de datos Redis e insertar los datos en otra.
fuente