我有一个带有Postgresql后端的Django网站,我使用pgbouncer进行db连接池(事务模式)。
应用程序和DB驻留在单独的服务器上(每个服务器都有一个服务器)。我已经在应用服务器上安装了pgbouncer。我的问题是:在settings.py中配置应该是什么?请注意,我使用Unix套接字连接到pgbouncer。
我当前的settings.py包含:
DATABASE_URL = 'postgres://user1:pass1@xx.xxx.xxx.xxx:5432/db1'
DATABASES = {
'default': dj_database_url.config(default=DATABASE_URL)
}pgbouncer.ini的相关章节如下:
[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 = 300userlist.txt包含:
"user1" "pass1"备注: One应答就在这里,但不适合我,因为在我的情况下DB在本地是不可用的。我需要设置DATABASE_URL环境变量,而不是使用default = '...'。
其中一项建议似乎是将pgbouncer作为settings.py中的一个数据库。在这种情况下,像下面这样的东西会起作用吗?
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',
}发布于 2016-10-26 19:08:19
来自文档
是一个PostgreSQL连接池程序。任何目标应用程序都可以像连接PostgreSQL服务器一样连接到pgbouncer,而pgbouncer将创建到实际服务器的连接,或者它将重用其现有连接之一。
另外,
让您的应用程序(或psql客户端)连接到pgbouncer,而不是直接连接到PostgreSQL服务器。
配置
pgbouncer.ini:一个包含默认注释的示例pgbouncer.ini
[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 = 20userlist.txt
"user1" "pass1"放入settings.py
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的情况下,您可以使用postgresql或postgresql_psycopg2 -在给定Django版本时两者之间存在差异-- postgresql。
发布于 2016-10-26 18:46:50
settings.py中的所有DB设置都应该与pgbouncer配置中的设置相同,但settings.py中的主机将指向pgbouncer。您可能需要将'NAME': 'pgbouncer'更改为'NAME': 'db1'。由于您使用的是unix套接字,所以端口应该无关紧要。
https://stackoverflow.com/questions/40248970
复制相似问题