首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pgbouncer时Django设置

使用pgbouncer时Django设置
EN

Stack Overflow用户
提问于 2016-10-25 20:17:31
回答 2查看 11.5K关注 0票数 10

我有一个带有Postgresql后端的Django网站,我使用pgbouncer进行db连接池(事务模式)。

应用程序和DB驻留在单独的服务器上(每个服务器都有一个服务器)。我已经在应用服务器上安装了pgbouncer。我的问题是:在settings.py中配置应该是什么?请注意,我使用Unix套接字连接到pgbouncer。

我当前的settings.py包含:

代码语言:javascript
运行
复制
DATABASE_URL = 'postgres://user1:pass1@xx.xxx.xxx.xxx:5432/db1'
DATABASES = {
'default': dj_database_url.config(default=DATABASE_URL)
}

pgbouncer.ini的相关章节如下:

代码语言:javascript
运行
复制
[databases]
db1 = host=xx.xxx.xxx.xxx port=5432 dbname=db1

listen_addr = *
listen_port = 6432
auth_type = md5
unix_socket_dir = /var/run/postgresql
pool_mode = transaction
max_client_conn = 200
default_pool_size = 300

userlist.txt包含:

代码语言:javascript
运行
复制
"user1" "pass1"

备注: One应答就在这里,但不适合我,因为在我的情况下DB在本地是不可用的。我需要设置DATABASE_URL环境变量,而不是使用default = '...'

其中一项建议似乎是将pgbouncer作为settings.py中的一个数据库。在这种情况下,像下面这样的东西会起作用吗?

代码语言:javascript
运行
复制
if PRODUCTION == '1':
    #PRODUCTION is set to '1' if in production environment
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'pgbouncer',
            'USER': 'user1',
            'PASSWORD': 'pass1',
            'HOST': '/var/run/postgresql',
            'PORT': '6432',
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-26 19:08:19

来自文档

是一个PostgreSQL连接池程序。任何目标应用程序都可以像连接PostgreSQL服务器一样连接到pgbouncer,而pgbouncer将创建到实际服务器的连接,或者它将重用其现有连接之一。

另外,

让您的应用程序(或psql客户端)连接到pgbouncer,而不是直接连接到PostgreSQL服务器。

配置

pgbouncer.ini:一个包含默认注释的示例pgbouncer.ini

代码语言:javascript
运行
复制
[databases]
db1 = host=xx.xxx.xxx.xxx port=5432 dbname=db1

[pgbouncer]
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = userlist.txt
unix_socket_dir = /var/run/postgresql
pool_mode = transaction
max_client_conn = 100
default_pool_size = 20

userlist.txt

代码语言:javascript
运行
复制
"user1" "pass1"

放入settings.py

代码语言:javascript
运行
复制
if PRODUCTION == '1':
    #PRODUCTION is set to '1' if in production environment
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'db1',
            'USER': 'user1',
            'PASSWORD': 'pass1',
            'HOST': '/var/run/postgresql',
            # 'PORT': '6432',
        }

额外

如果不使用unix套接字,您可以设置主机:'127.0.0.1‘或'localhost’,如果pgbouncer在本地运行,也可以设置服务器pgbouncer的IP将在其上运行。来自文档

如果默认使用PostgreSQL (空主机),则通过UNIX域套接字(pg_hba.conf中的“本地”行)连接数据库。如果您的UNIX域套接字不在标准位置,请使用来自postgresql.conf的相同值的postgresql.conf。如果要通过TCP套接字进行连接,请将主机设置为“localhost”或“127.0.0.1”(pg_hba.conf中的“HOST”行)。在Windows上,您应该始终定义主机,因为UNIX域套接字不可用。

在postgreSQL For ENGINE的情况下,您可以使用postgresqlpostgresql_psycopg2 -在给定Django版本时两者之间存在差异-- postgresql

票数 15
EN

Stack Overflow用户

发布于 2016-10-26 18:46:50

settings.py中的所有DB设置都应该与pgbouncer配置中的设置相同,但settings.py中的主机将指向pgbouncer。您可能需要将'NAME': 'pgbouncer'更改为'NAME': 'db1'。由于您使用的是unix套接字,所以端口应该无关紧要。

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

https://stackoverflow.com/questions/40248970

复制
相关文章

相似问题

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