使用pgbouncer时的Django设置

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)

Nab*_*med 9

来自文档:

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你可以使用postgresqlpostgresql_psycopg2- 给你的Django版本 - postgresql_psycopg2和posgresql两者之间的区别.