如何在芹菜中处理MySQL故障转移

时间:2018-02-08 17:29:01

标签: python mysql sqlalchemy celery

当我的MySQL后端在Celery中出现故障时,我正在尝试实施故障转移策略。

我在this other stack overflow answer中发现在SQLAlchemy中可以实现故障转移。但是,我无法使用sqlalchmey_engine_options

在Celery中编写相同的行为
__app.conf.result_backend = 'db+mysql://scott:tiger@localhost/foo'
__app.conf.sqlalchmey_engine_options = {
    'connect_args': {
        'failover': [{
            'user': 'root',
            'password': 'password',
            'host': 'http://other_db.com',
            'database': 'dbname'
        }]
    }
}

我要做的是,如果第一个后端scott:tiger没有响应,那么它会切换到root:password后端。

1 个答案:

答案 0 :(得分:0)

实现故障转移肯定有多种方法。您可以从简单的try..except开始,并在您的首选后端没有响应时处理情况,以最简单(也可能不是非常pythonic)的方式,您可以尝试这样的事情:

try:
    # initialise your SQL here and also set the connection up
except:
    # initialise your backup SQL here

您还可以将后端选择移动到基础架构,以便从应用程序的角度来看它是透明的,即使用会话池系统(我不是MySQL用户,但在PostgreSQL世界中我们有 pgpool )。

---编辑---

我意识到您可能希望由芹菜本身处理您的数据库会话和连接。所以上面很可能没有直接回答你的问题,在我的简单项目中,我在需要它的任务中初始化数据库连接,因为在我的特定情况下,大多数任务根本不需要数据库。