使用のための指示としてこれを読まないでください。これは、よりアカデミック興味ある - あなたは、再起動せずに/etc/hosts
を再読するために1.7 pgbouncer作るために何をする必要があるか:
最初のデモ:
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+-------------
one | 6 | 127.0.0.3:0
(1 row)
pgbouncer=# \! sudo sed -i 's/127.0.0.3/127.0.0.2/' /etc/hosts
pgbouncer=# pause test;
PAUSE
pgbouncer=# kill test;
KILL
pgbouncer=# resume test;
RESUME
pgbouncer=# \! psql -p 6432 -h 127.0.0.1 -U vao -d test -c "\! tail -1 /etc/hosts"
Password for user vao:
127.0.0.2 one
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+-------------
one | 7 | 127.0.0.2:0
(1 row)
pgbouncer=# \! sudo sed -i 's/127.0.0.2/127.0.0.12/' /etc/hosts
pgbouncer=# pause test;
PAUSE
pgbouncer=# kill test;
KILL
pgbouncer=# resume test;
RESUME
pgbouncer=# \! psql -p 6432 -h 127.0.0.1 -U vao -d test -c "\! tail -1 /etc/hosts"
Password for user vao:
127.0.0.12 one
pgbouncer=# show dns_hosts;
hostname | ttl | addrs
----------+-----+--------------
one | 10 | 127.0.0.12:0
(1 row)
さて、なぜ: RELOAD
再読み取りの設定、ので、ここで助けにはなりませんが。 dns_max_ttl
は、dnsによって返された複数のリセル間のラウンドトリップを制御します。したがって、ここでは再生されません。想起
ホスト名は、私は、接続を再開するために、私は既存の接続を(ので、接続がプールから取られないであろう)ドロップする必要があるという仮定を行い、接続時に
を解決している - には2つの方法は、それを行う - pgbouncerまたはKILL db
を再起動する - pgbouncer.ini [databases]
セクションから1つのdbへの影響を分離する。だから私は/etc/hosts
に
test = host=one port=5432 dbname=t
それに
と
127.0.0.3 one
を追加しました。残りはデモ版です。
私はこの答えを不正行為と解釈します。私はpgbouncerを再起動しませんが、依然として必要なdbへの既存の接続をすべて削除する必要があります。 (もちろん、接続されている他のデータベースクライアントには影響しませんが)。つまり、再起動せずにそれを行うことはできますが、そのdbへのすべての接続は切断されるため、変更されたホストへの既存の接続を削除しないと実行できません。ただPAUSE + RESUME
組み合わせが
ホスト名として、ここで助けにはなりませんが、私はリロードは/ etc/hostsファイルを再読み込みする必要があり思っ
接続時に解決されます。 'dns_max_ttl'が長すぎる値に設定されていない場合には、それ自身を読み直すべきです...' SHOW DNS_HOSTS'はdnsキャッシュを読み込みます - もしaddrsが空白の場合、 '/ etc/hosts'に不正な値があるかもしれません... ... –
@VaoTsun '/ etc/hosts'のエントリは有効です。hostnameを使って' pssh'を 'ssh' /' psql'することができるからです。私の場合、 'dns_max_ttl'はデフォルトの15秒に設定されています。 – GregD
'接続時にホスト名が解決され、その結果はdns_max_ttlパラメータごとにキャッシュされます.'そのホスト名にdatabseに接続しようとしましたか? –