django数据库路由:自动故障转移?

时间:2019-05-22 07:28:19

标签: django postgresql

我有一个用Django框架编写的应用程序,可以提取PostgreSQL数据库。

由于我们对停机时间和冗余非常敏感,因此数据库使用到两个热备份服务器的流复制。但是,就目前而言,当主数据库关闭时,我必须手动更改settings.py中的数据库服务器地址,以便Django切换。

我对Django数据库路由还不十分熟悉,所以我不确定该怎么做,但是可以将Django中的所有三个数据库配置为具有自动路由层 strong>确定其中哪个是当前活动主服务器,并相应地路由其查询?

(在运行时将是完美的,但我会乐于接受“启动时的条件”,并在过程文档中添加一行以对数据库故障转移做出反应时重新启动uwsgi vassal)。

2 个答案:

答案 0 :(得分:0)

您可以使用 Django 使用多个数据库。 ORM 对此有很好的支持。这可以从settings.py开始。另外,还可以设置默认数据库,该数据库将由 Django 使用(默认)。

这是来自文档

DATABASES = {
            'default': {
                'NAME': 'app_data',
                'ENGINE': 'django.db.backends.postgresql',
                'USER': 'postgres_user',
                'PASSWORD': 's3krit'
            },
            'users': {
                'NAME': 'user_data',
                'ENGINE': 'django.db.backends.mysql',
                'USER': 'mysql_user',
                'PASSWORD': 'priv4te'
            }
        }
DATABASES字典的

“别名”

Django的 QuerySet支持using(db_alias)方法,该方法可帮助您在数据库之间进行路由。

答案 1 :(得分:-1)

这是Django不能/不应该处理的事情,因为还有许多其他解决方案可以提供此功能。

您可能想改为放置某种负载平衡器,该负载平衡器将能够自动确定数据库的失败实例。

如果您想快速测试一下,这是一个很好的仓库,它结合了MariaDB Galera集群和docker swarm(docker swarm提供的负载平衡):https://github.com/colinmollenhour/mariadb-galera-swarm