Has*_*aig 5 django postgresql pgbouncer
我有一个带Postgresql后端的Django网站,我正在利用它来pgbouncer进行数据库连接池(事务模式).
应用程序和数据库驻留在不同的服务器上(每个服务器1个).我已经安装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)
}
Run Code Online (Sandbox Code Playgroud)
相关部分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 = 300
Run Code Online (Sandbox Code Playgroud)
userlist.txt 包含:
"user1" "pass1"
Run Code Online (Sandbox Code Playgroud)
注意:这里有一个答案,但对我来说不起作用,因为在我的情况下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',
}
Run Code Online (Sandbox Code Playgroud)
来自文档:
pgbouncer是一个PostgreSQL连接池.任何目标应用程序都可以连接到pgbouncer,就像它是PostgreSQL服务器一样,而pgbouncer将创建与实际服务器的连接,或者它将重用其现有连接之一.
也,
让您的应用程序(或psql客户端)连接到pgbouncer而不是直接连接到PostgreSQL服务器.
配置:
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 = 20
Run Code Online (Sandbox Code Playgroud)
userlist.txt:
"user1" "pass1"
Run Code Online (Sandbox Code Playgroud)
放入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',
}
Run Code Online (Sandbox Code Playgroud)
额外:
如果不使用unix套接字 - 如果pgbouncer在本地运行,或者运行服务器pgbouncer的IP,则可以设置HOST:'127.0.0.1'或'localhost'.来自文档:
如果您正在使用PostgreSQL,默认情况下(空HOST),与数据库的连接是通过UNIX域套接字(pg_hba.conf中的"本地"行)完成的.如果您的UNIX域套接字不在标准位置,请使用postgresql.conf中相同的unix_socket_directory值.如果要通过TCP套接字连接,请将HOST设置为"localhost"或"127.0.0.1"(pg_hba.conf中的"host"行).在Windows上,您应始终定义HOST,因为UNIX域套接字不可用.
在postgreSQL的情况下ENGINE你可以使用postgresql或postgresql_psycopg2- 给你的Django版本 - postgresql_psycopg2和posgresql两者之间的区别.
| 归档时间: |
|
| 查看次数: |
4011 次 |
| 最近记录: |