pgbouncer可以在不重启的情况下重新读取/ etc/hosts文件
有没有办法让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运行
请不要看这是为使用的指令。这是更大专院校兴趣 - 你需要怎样做才能使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
控制drou返回的几个自己之间的roundroubin,因此不会在这里玩。回顾
主机名是在连接时间分辨
我做一个假设,为了重新发起连接,我需要放弃现有的连接(这样的连接不会被从库中取出) - 两路来这样做 - 重新启动pgbouncer或KILL db
- 将影响从pgbouncer.ini [databases]
部分中分离出来只有一个分区。所以我添加
test = host=one port=5432 dbname=t
它和
127.0.0.3 one
到/etc/hosts
。其余的在演示。
我会将此答案解释为作弊 - 我不重新启动pgbouncer,但所有现有连接都需要删除。 (当然,我们不影响其他数据库客户端连接,但仍然)。所以答案就是 - 是的,你可以在不重新启动的情况下做到这一点,但是与该数据库的所有连接都将被删除,因此如果不删除已更改的主机的现有连接,则无法执行此操作。只是PAUSE + RESUME
组合不会帮助这里
主机名是在连接时
我想重装应该读取/ etc/hosts中解决。如果'dns_max_ttl'没有设置太长的值,它应该重新读取它自己...'SHOW DNS_HOSTS'读取dns缓存 - 如果addrs为空,那么'/ etc/hosts'中的值可能不正确? –
@VaoTsun'/ etc/hosts'中的条目是有效的,因为我可以使用主机名将'ssh' /'psql'放入它中。在我的情况下,'dns_max_ttl'被设置为默认的15秒。 – GregD
'主机名在连接时解析,结果是根据dns_max_ttl参数缓存的。'您是否尝试连接到该主机名上的数据库?.. –