首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜不能与哨兵连在一起:没有主人能找到“我的主人”

芹菜不能与哨兵连在一起:没有主人能找到“我的主人”
EN

Stack Overflow用户
提问于 2022-01-03 14:41:15
回答 1查看 727关注 0票数 2

我有个工作的红人哨兵。我可以用python代码连接到它,然后在没有问题的情况下点击它(下面的代码)。然而,当我试图将我的芹菜应用程序连接到这个红点哨兵时,我却没有找到“mymaster”的主人。我可能有一些设置错误?我的主人和哨兵都有密码保护。我在Openshift中运行它,但我不确定它是否相关,因为从不同的pod (和服务)的python代码可以访问这个哨兵。

代码语言:javascript
复制
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=1
代码语言:javascript
复制
import 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())

这段代码打印出“真”。

我的芹菜应用程序:

代码语言:javascript
复制
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

我绝对绝望,任何帮助都将是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2022-03-30 22:37:33

在文档里哪儿都没有,但这才是对我有用的:

代码语言:javascript
复制
broker_url = "sentinel://:your_password@host_ip:port_no;..."
broker_transport_options = {"master_name": "your_master_name"}

因此,在broker_url中包含每个哨兵主机的密码。

进一步详情

芹菜在兜帽下用康布。实际上,Kombu给了你不将密码包含在transport_options下的选项,而芹菜并不能将密码翻译过来。所以在Kombu你可以这样做:

代码语言:javascript
复制
c = kombu.Connection(
        "sentinel://host_ip:port_no;...",
        "password": "your_password",
        transport_options={"master_name": "your_master_name"},
    )
c.connect()

如果您的连接和哨兵主机密码是相同的,这是完美的工作。

但是芹菜所做的是将密码插入、transport_optionssentinel_kwargs中。所以实际上这就是被送到Kombu的东西。

代码语言:javascript
复制
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我会叫它的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70567402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档