当我的MySQL后端在Celery中出现故障时,我正在尝试实施故障转移策略。
我在this other stack overflow answer中发现在SQLAlchemy中可以实现故障转移。但是,我无法使用sqlalchmey_engine_options
__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
后端。
答案 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 )。
---编辑---
我意识到您可能希望由芹菜本身处理您的数据库会话和连接。所以上面很可能没有直接回答你的问题,在我的简单项目中,我在需要它的任务中初始化数据库连接,因为在我的特定情况下,大多数任务根本不需要数据库。