pgbouncer
是否有办法强制重新读取/etc/hosts
文件而不重启?我已向/etc/hosts
添加了一个新服务器,我希望pgbouncer
以最少的麻烦连接到新服务器。
我知道发出RELOAD;
命令将强制重新读取配置文件,但似乎这不适用于/etc/hosts
。此外,还会显示运行命令SHOW DNS_HOSTS
(在更改配置和/etc/hosts
后)新主机名值,但 addrs 值将保留为空。
pgbouncer
版本:1.7.2在Ubuntu 14.04上运行
答案 0 :(得分: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返回的几个自身之间的roundroubin,因此不会在这里播放。回顾
主机名在连接时解析
我假设为了重新启动连接,我需要删除现有连接(因此不会从池中获取连接) - 两种方法 - 重新启动pgbouncer或KILL db
- 隔离影响从pgbouncer.ini [databases]
部分只有一个数据库。所以我添加了
test = host=one port=5432 dbname=t
到它和
127.0.0.3 one
到/etc/hosts
。剩下的就是演示。
我会将此答案解释为作弊 - 我不会重新启动pgbouncer,但是需要删除所有现有连接到所需数据库。 (当然我们不会影响连接的其他数据库客户端,但仍然如此)。所以答案是 - 是的,您可以在不重新启动的情况下执行此操作,但是与该数据库的所有连接都将被删除,因此如果不删除已更改的主机的现有连接,则无法执行此操作。只有PAUSE + RESUME
组合在此无效
主机名在连接时解析