2

有没有办法pgbouncer强制重新读取/etc/hosts文件而不重新启动?我已经添加了一个新服务器,/etc/hosts并且我想pgbouncer以最少的麻烦连接到新服务器。

我知道发出RELOAD;命令会强制重新读取配置文件,但似乎这不适用于/etc/hosts. 还会出现运行命令SHOW DNS_HOSTS(在配置和更改之后/etc/hosts)新的主机名值,但addrs值留空。

pgbouncer版本:在 Ubuntu 14.04 上运行的 1.7.2

4

1 回答 1

1

请不要将此作为使用说明阅读。这是更多的学术兴趣 - 你需要做些什么才能让 pgbouncer 1.7 在/etc/hosts不重新启动的情况下重新阅读:

第一个演示:

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返回的几个reselves之间的roundroubin,因此不会在这里播放。召回

主机名在连接时解析

我假设为了重新启动连接,我需要删除现有连接(因此不会从池中获取连接) - 两种方法 - 重新启动 pgbouncer 或KILL db- 将影响隔离到仅一个 dbpgbouncer.ini [databases]部分。所以我加了

test = host=one port=5432 dbname=t

对它和

127.0.0.3   one

/etc/hosts. 其余的在演示中。

我会将这个答案解释为作弊 - 我不会重新启动 pgbouncer,但是需要删除所有与想要的 db 的现有连接。(当然我们不会影响连接的其他数据库客户端,但仍然如此)。所以答案是 - 是的,你可以在不重新启动的情况下执行此操作,但是与该数据库的所有连接都将被删除,因此如果不删除与已更改主机的现有连接,则无法执行此操作。只是PAUSE + RESUME组合在这里无济于事

主机名在连接时解析

于 2017-10-10T13:44:13.277 回答