2017-08-04 20 views
2

pgbouncerは再起動せずに/etc/hostsファイルを強制的に再読み込みする方法はありますか?私は/etc/hostsに新しいサーバーを追加しました。私はpgbouncerを最低限の手間で新しいサーバーに接続したいと思っています。pgbouncerは/ etc/hostsファイルを再起動せずに再読み込みすることができます

私はRELOAD;コマンドを発行して、設定ファイルの再読み込みが強制されますが、これは/etc/hostsには当てはまりません。また、コマンドSHOW DNS_HOSTS(構成の変更後、/etc/hosts)を実行すると、新しいのホスト名の値が表示されますが、のaddrsの値は空白のままです。

pgbouncerバージョン:1.7.2のUbuntu 14.04上で実行すると、

+0

接続時に解決されます。 'dns_max_ttl'が長すぎる値に設定されていない場合には、それ自身を読み直すべきです...' SHOW DNS_HOSTS'はdnsキャッシュを読み込みます - もしaddrsが空白の場合、 '/ etc/hosts'に不正な値があるかもしれません... ... –

+0

@VaoTsun '/ etc/hosts'のエントリは有効です。hostnameを使って' pssh'を 'ssh' /' psql'することができるからです。私の場合、 'dns_max_ttl'はデフォルトの15秒に設定されています。 – GregD

+0

'接続時にホスト名が解決され、その結果はdns_max_ttlパラメータごとにキャッシュされます.'そのホスト名にdatabseに接続しようとしましたか? –

答えて

1

使用のための指示としてこれを読まないでください。これは、よりアカデミック興味ある - あなたは、再起動せずに/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ファイルを再読み込みする必要があり思っ

関連する問題