我有个工作的红人哨兵。我可以用python代码连接到它,然后在没有问题的情况下点击它(下面的代码)。然而,当我试图将我的芹菜应用程序连接到这个红点哨兵时,我却没有找到“mymaster”的主人。我可能有一些设置错误?我的主人和哨兵都有密码保护。我在Openshift中运行它,但我不确定它是否相关,因为从不同的pod (和服务)的python代码可以访问这个哨兵。
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_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.18.36:6379,slaves=0,sentinels=1import redis
from redis.sentinel import Sentinel
sentinel = Sentinel([('192.168.7.248', 26379)], sentinel_kwargs={'password': 'abc'})
host, port = sentinel.discover_master("mymaster")
redis_client = redis.StrictRedis(
host=host,
port=port,
password='abc'
)
print(redis_client.ping())这段代码打印出“真”。
我的芹菜应用程序:
from celery import Celery
app = Celery("app_celery")
options = {
"master_name": "mymaster",
"sentinel_kwargs": {"password": "abc"},
}
app.conf.broker_url = "sentinel://192.168.7.248:26379"
app.conf.broker_transport_options = options我绝对绝望,任何帮助都将是非常感谢的。
发布于 2022-03-30 22:37:33
在文档里哪儿都没有,但这才是对我有用的:
broker_url = "sentinel://:your_password@host_ip:port_no;..."
broker_transport_options = {"master_name": "your_master_name"}因此,在broker_url中包含每个哨兵主机的密码。
进一步详情
芹菜在兜帽下用康布。实际上,Kombu给了你不将密码包含在transport_options下的选项,而芹菜并不能将密码翻译过来。所以在Kombu你可以这样做:
c = kombu.Connection(
"sentinel://host_ip:port_no;...",
"password": "your_password",
transport_options={"master_name": "your_master_name"},
)
c.connect()如果您的连接和哨兵主机密码是相同的,这是完美的工作。
但是芹菜所做的是将密码插入、transport_options或sentinel_kwargs中。所以实际上这就是被送到Kombu的东西。
celery_broker_transport_options = {
"master_name": "your_master_name",
"password": "your_password"
}
# gets into Kombu like this
c = kombu.Connection(
"sentinel://host_ip:port_no;...",
transport_options={
"master_name": "your_master_name",
"password": "your_password",
}
)
# OR
celery_broker_transport_options = {
"master_name": "your_master_name",
"sentinel_kwargs": {"password": "your_password"}
}
# gets into Kombu like this
c = kombu.Connection(
"sentinel://host_ip:port_no;...",
transport_options={
"master_name": "your_master_name",
"sentinel_kwargs": {"password": "your_password"}
}
)这两种情况都不管用。
因此,通过在broker_url中包含哨兵主机密码,您可以绕过.bug我会叫它的。
https://stackoverflow.com/questions/70567402
复制相似问题