Hemos configurado el servidor Redis con un maestro y dos esclavos. Si mi maestro falla, ¿cómo podemos manejar la conmutación por error sin reiniciar el servidor Redis?Redis Fail Over
Respuesta
Actualización:
Hoy en día, recomendaría retirar redis-sentinel, una herramienta de autor antirez Redis' para el seguimiento y recuperación automática.
respuesta original:
Comprobar la SLAVEOF
comando: http://redis.io/commands/slaveof
Cuando descubre que su maestro falla, un tema SLAVEOF NO ONE
en uno de sus esclavos para promoverlo de dominar. Luego señala a tu otro esclavo con su nuevo maestro. Consulte también "Actualización o reinicio de una instancia de Redis sin tiempo de inactividad": http://redis.io/topics/admin
Para gestionar archivos de configuración, puede hacer algo en esta línea (precaución: no probado, solo como ejemplo). El ejemplo siguiente supone dos archivos de configuración para cada servidor (/etc/redis/server1.master.conf
, /etc/redis/server1.slave.conf
, etc), una de ellas con ese servidor como esclavo de algún maestro predefinido:
#!/bin/sh
master()
{
server_name=$1
redis-cli slaveof no one
ln -sf /etc/redis/$server_name.master.conf /etc/redis/$server_name.conf
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
master=$2
master_port=$3
redis-cli slaveof $master $master_port
ln -sf /etc/redis/$server_name.slave.conf /etc/redis/$server_name.conf
}
En lugar de tener los archivos de configuración predefinidos, puede editarlos en la mosca con, por ejemplo, sed
. Básicamente, asegúrese de tener siempre una estrofa slaveof
en los archivos de configuración, ya sea apuntando a un maestro o slaveof no one
. Vuelva a grabar la configuración mediante sed
(de nuevo, no probado, sólo significaba como alimento para el pensamiento):
#!/bin/sh
master()
{
server_name=$1
config=$server_name.conf
redis-cli slaveof no one
sed -i "s/^slaveof.*/slaveof no one/" $config
}
# Usage: slave(server1 server2 6379)
slave()
{
server_name=$1
config=$server_name.conf
master=$2
master_port=$3
redis-cli slaveof $master $master_port
sed -i "s/^slaveof.*/slaveof $master $master_port/" $config
}
recomendaría mirar en Redis Cluster (versión 3.2 como última estable hoy en día). Cluster: este es un nuevo enfoque, ya no hay centinelas. El principio de falla es el mismo, el esclavo se promueve para dominar en caso de que el maestro esté inactivo y una nueva funcionalidad más, incluida la lógica de fusión compatible con Redis. La aplicación solo necesita conectarse al clúster que tiene un conjunto de nodos, eso es todo.
Si hablamos de falla general, tenga en cuenta que Redis Cluster no garantiza una gran consistencia.
Encuentre fragmento de: http://redis.io/topics/cluster-tutorial
"Cluster Redis no es capaz de garantizar la consistencia fuerte En términos prácticos, esto significa que bajo ciertas condiciones es posible que Redis Cluster perderá escrituras que eran. reconocido por el sistema para el cliente.
la primera razón por la Redis Cluster puede perder escrituras se debe a que utiliza la replicación asíncrona.
Hay otro escenario notable en el que Redis Cluster perderá escrituras, que ocurre durante una partición de red donde un cliente está aislado con una minoría de instancias que incluye al menos un maestro."
- 1. Diseño de fail-over cross-colo, conmutación por error de nivel DNS?
- 2. AudioQueueStart fail -12985
- 3. Fail Fast vs. Robustness
- 4. OVER cláusula en Oracle
- 5. NÚMERO DE FILA() OVER
- 6. overlay html over flash?
- 7. Tooltip over cell. GWT
- 8. ¿Es posible over OO?
- 9. boost :: asio over SocketCAN
- 10. Git over Email
- 11. Sum over Haskell Map
- 12. UILabel Over UISlider Thumb
- 13. redis: establecer una contraseña para redis
- 14. Redis replication y redis sharding (clúster) diferencia
- 15. Redis y Memcache o solo Redis?
- 16. Para Colección Loop over Backbone
- 17. ¿Cómo puedo usar SUMA() OVER()
- 18. Behat over Cucumber in PHP
- 19. Exponer IQueryable Over WCF Service
- 20. PyAudio Over collapse de red
- 21. "bundle install" fail while install rspec
- 22. Fail hudson build with groovy script
- 23. try-catch-fail con powershell y schtasks
- 24. document.getElementById (''). Src == ??? (Es igual a FAIL)
- 25. Eclipse Helios + maven m2e + Groovy == FAIL
- 26. Sqlite load_extension fail for spatialite en Python
- 27. ¿El redis pub/submodelo requiere conexiones persistentes a redis?
- 28. Cómo implementar Redis Multi-Exec mediante Spring-data-Redis
- 29. C# send receive object over network?
- 30. La ventaja de Arc over Racket
Gracias Linus, he tratado de que en el cliente Redis su funcionamiento muy bien, pero la forma de cambiar el mismo en conf Redis sobre la marcha, ¿Hay alguna secuencia de comandos disponibles para eso? Gracias – vijay
Gran! I don' Saber qué biblioteca de cliente de redis utiliza, pero supongo que tiene un comando 'slaveof'. Para los archivos de configuración, puede tener dos configuraciones para cada servidor, una para esclavo y otra para maestro, y enlace simbólico entre ellas. –