10

私はPostgresqlバックエンドを備えたDjango Webサイトを持っています。これはpgbouncer、db接続プーリング(トランザクションモード)に利用しています。

アプリケーションと DB は別々のサーバー (それぞれ 1 サーバー) にあります。pgbouncerアプリケーションサーバーにインストールしました。私の質問は次のとおりです。構成は何にあるべきsettings.pyですか? pgbouncer への接続にUnix ソケットを使用していることに注意してください。


私の現在の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 = 300

userlist.txt内容:

"user1" "pass1"

注: 1 つの答えは here ですが、私の場合はローカルで DB を使用できないため、うまくいきません。を使用する代わりに、DATABASE_URL 環境変数を設定する必要がありますdefault = '...'

pgbouncer1 つの提案は、 でデータベースとして扱うこと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',
        }
4

2 に答える 2

14

ドキュメントから:

pgbouncerは、PostgreSQL 接続プーラーです。任意のターゲット アプリケーションは、あたかも PostgreSQL サーバーであるかのように pgbouncer に接続でき、pgbouncer は実際のサーバーへの接続を作成するか、既存の接続の 1 つを再利用します。

また、

アプリケーション (または psql クライアント) を PostgreSQL サーバーに直接接続するのではなく、pgbouncer に接続します。


構成:

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 = 20

ユーザーリスト.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 ソケットを使用しない場合 - HOST を設定できます: pgbouncer がローカルで実行されている場合は '127.0.0.1' または 'localhost'、または pgbouncer が実行されているサーバーの IP は何でも。ドキュメントから:

PostgreSQL を使用している場合、デフォルト (空の HOST) では、データベースへの接続は UNIX ドメイン ソケット (pg_hba.conf の「local」行) を介して行われます。UNIX ドメイン ソケットが標準の場所にない場合は、postgresql.conf の unix_socket_directory と同じ値を使用します。TCP ソケット経由で接続する場合は、HOST を 'localhost' または '127.0.0.1' (pg_hba.conf の 'host' 行) に設定します。Windows では、UNIX ドメイン ソケットが使用できないため、常に HOST を定義する必要があります。


postgreSQL の場合、orENGINEを使用できます- Django のバージョンによって、 postgresql_psycopg2 と posgresqlの両方に違いがあります。postgresqlpostgresql_psycopg2

于 2016-10-26T19:08:19.957 に答える
1

settings.py のすべての DB 設定は、pgbouncer 構成の設定と同じである必要がありますが、settings.py のホストは pgbouncer を指します。'NAME': 'pgbouncer'おそらくに変更する必要があります'NAME': 'db1'。unix ソケットを使用しているため、ポートは問題になりません。

于 2016-10-26T18:46:50.310 に答える