Django数据库的软件负载平衡器。

django-proxysql的Python项目详细描述


https://travis-ci.org/btimby/django-proxysql.pnghttps://coveralls.io/repos/github/btimby/django-proxysql/badge.svg?branch=masterhttps://badge.fury.io/py/django-proxysql.svg

django代理SQL

什么?

Django数据库的软件负载平衡器。这个项目提供了一个 管理多个对等数据库连接和 将查询平均分配给每个查询。它还记录对等机是否出现故障并停止运行 向该对等方发送查询,直到其恢复。在

这个项目是为MySQL、Galera和ProxySQL开发的。不管怎样 与任何与Django兼容的数据库引擎一起使用。很可能是联系 错误检测需要调整(因为MySQLdb.Error用于 检测故障)。在

django-proxysql可以在没有ProxySQL的情况下使用(例如,您的对等机 可能是Galera集群节点),或者使用不同的负载平衡器,例如 最大刻度。您还可以将其与multidb结合,其中Django路由器 多个数据库对等池之间的路由。在

为什么?

Django multidb支持是在高层实现的。因此它不知道 连接失败。它将继续将查询路由到导致 错误。在

有些人建议在multidb路由器中添加一个活动性检查,但是这增加了 不必要的开销。django-proxysql也路由查询,但是 数据库引擎级别,使它能够识别连接故障和 相应地路由查询。在

django-proxysql假设您正在使用对等MySQL、ProxySQL或 完全相同的MaxScale服务器。它并不聪明 路由查询,这将留给下游对等方。在

怎么做的?

首先安装django proxysql,例如:

pip install django-proxysql

然后在Django设置中将MySQL对等机配置为附加数据库。 设置您的defaultdjango数据库以使用此引擎并指定对等方。 可选的{tt6}还可以指定 重新检查被击落的对等机(默认为30秒)。在

^{pr2}$

现在,当您在Django中使用默认数据库时,连接将是随机的 分发给同行。在

如果您不需要专用的负载平衡器,如ProxySQL或MaxScale,那么 可以简单地将Galera集群节点配置为对等节点。在

DATABASES={'default':{'ENGINE':'django_proxysql.backends.proxysql','PEERS':['galera0','galera1'],},'peer0':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'galera0','PORT':6033,},'peer1':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'galera1','PORT':6033,},}

您可以配置多个django-proxysql后端,然后使用Django multidb在它们之间路由。在

DATABASES={'default':{'ENGINE':'django_proxysql.backends.proxysql','PEERS':['peer0','peer1'],},'users':{'ENGINE':'django_proxysql.backends.proxysql','PEERS':['peer2','peer3'],},'peer0':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'peer0','PORT':6033,},'peer1':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'peer1','PORT':6033,},'peer2':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'peer2','PORT':6033,},'peer3':{'ENGINE':'django.db.backends.mysql','NAME':'db_name','USER':'user','PASSWORD':'password','HOST':'peer3','PORT':6033,},}

还有别的吗?

因为引擎只处理连接错误,其他错误如 断开的连接将导致应用程序失败。所以如果你 在执行滚动升级时,必须优雅地排空每个对等机。为 例如,使用ProxySQL,您可以通过发出PROXYSQL PAUSE 管理接口(端口6032)中的命令。这将导致ProxySQL停止 接受新的连接,django-proxysql将检测和处理 没有一个错误。在

还要注意,当应用迁移时,Django将执行所有 配置的数据库。这值得重复。所有数据库对等方必须联机 以执行数据库迁移。在

兼容性

Python
2.73.53.63.7
Django1.10OOOO
1.11OOOO
2.0OOO
2.1OOO
2.2OOO

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为新对象()保留了多少内存空间;   keytool错误:java。木卫一。IOException:安卓密钥库被篡改或密码不正确   java Recyclerview不可点击安卓 studio(可能是我的代码错误?)   爪哇警报每天早上5点   安卓为java循环中的json对象添加值   java NetBeans“与编辑器链接”功能   SQL Server与Java EE演练   如何在Java应用程序中嵌入迷你控制台?   java Pig UDF,在批处理过程中删除分布式缓存中的文件   javascript使用GWT关闭网络摄像头和灯光   将Eclipse开普勒SR1升级到SR2时发生java错误?   java使用HashMap计算数组中某些整数的数量   java如何保护Android代码不受反向工程的影响?   java为什么添加这个防御副本可以避免死锁?   java我无法上传文件,需要哪些jar文件?   在java中,同一个程序可以作为服务器运行,也可以作为其他程序的客户端运行?   java从内部记录访问非静态外部上下文   java如何在使用Hibernate时打印带有参数值的查询字符串   Java向量类未更新