es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Celery no puede conectarse a sentinel: no se encontró un maestro para ‘mymaster’.

Tengo un redis sentinel funcionando. Puedo conectarme a él con código python y hacer ping sin problemas (código abajo). Sin embargo, cuando intento conectar mi aplicación celery a este redis sentinel, obtengo el mensaje de “no se encontró el maestro para ‘mymaster'”. ¿Probablemente tengo algunas configuraciones incorrectas?
Tanto mi maestro como mi sentinela están protegidos por una contraseña.
Lo estoy ejecutando en Openshift, aunque no estoy seguro de si es relevante ya que el sentinela es accesible desde el código python de una pod (y servicio) diferente.

redis-cli -p 26379 -h 192.168.7.248
192.168.7.248:26379> auth abc
OK
192.168.7.248:26379> info sentinel

Sentinel

sentinel<em>masters:1
sentinel</em>tilt:0
sentinel<em>running</em>scripts:0
sentinel<em>scripts</em>queue<em>length:0
sentinel</em>simulate<em>failure</em>flags:0
master0:name=mymaster,status=ok,address=192.168.18.36:6379,slaves=0,sentinels=1
import redis
from redis.sentinel import Sentinel
sentinel = Sentinel([('192.168.7.248', 26379)], sentinel<em>kwargs={'password': 'abc'})
host, port = sentinel.discover</em>master("mymaster")
redis<em>client = redis.StrictRedis(
        host=host,
        port=port,
        password='abc'
    )
print(redis</em>client.ping())

Este código imprime “True”.

Mi aplicación celery:

from celery import Celery
app = Celery("app_celery")
options = {
    "master<em>name": "mymaster",
    "sentinel</em>kwargs": {"password": "abc"},
}
app.conf.broker<em>url = "sentinel://192.168.7.248:26379"
app.conf.broker</em>transport_options = options

Estoy absolutamente desesperado, cualquier ayuda sería muy apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber un problema con la configuración de tu celery. Aquí hay algunas cosas que puedes intentar para solucionarlo:

    1. Verifica nuevamente la configuración de tu Redis Sentinel y asegúrate de que el nombre del maestro que estás usando (mymaster) sea correcto. Puedes verificar esto ejecutando el comando info sentinel en redis-cli y revisando la salida.
    2. Verifica que tu aplicación Celery pueda conectarse al Redis Sentinel ejecutando el siguiente código:

    from redis.sentinel import Sentinel
    
    sentinel = Sentinel([('192.168.7.248', 26379)], sentinel_kwargs={'password': 'abc'})
    print(sentinel.discover_master('mymaster'))
    

    Esto debería mostrar la dirección IP y el puerto de la instancia maestro de Redis.

    1. Revisa los registros de tu trabajador Celery para ver si hay mensajes de error relacionados con la conexión de Redis. Puedes habilitar el registro de depuración para obtener más información:
    app.conf.update(
        worker_hijack_root_logger=False,
        worker_log_color=False,
        worker_log_format='[%(asctime)s: %(levelname)s/%(processName)s] %(message)s',
        worker_task_log_format='[%(asctime)s: %(levelname)s/%(processName)s] %(task_name)s[%(task_id)s]: %(message)s',
        worker_level='DEBUG',
    )
    
    1. Asegúrate de que la contraseña de Redis esté configurada correctamente en tu aplicación Celery. Puedes intentar conectarte al Redis Sentinel utilizando el comando redis-cli con la contraseña:
    redis-cli -p 26379 -h 192.168.7.248 -a abc
    

    Si ninguna de estas soluciones soluciona el problema, puede ser útil publicar el mensaje de error que recibes al intentar conectarte al Redis Sentinel en tu aplicación Celery.

Comments are closed.