pgbouncer
有没有办法在不重启的情况下强制重新读取 /etc/hosts
文件?我已经向 /etc/hosts
添加了一个新服务器,我希望 pgbouncer
能够以最少的麻烦连接到新服务器。
我知道发出 RELOAD;
命令会强制重新读取配置文件,但似乎这不适用于 /etc/hosts
。同时运行命令 SHOW DNS_HOSTS
(在更改配置和 /etc/hosts
之后)新的 hostname 值会出现,但是 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
控制dns返回的几个reselves之间的roundroubin,这里就不玩了。记忆
Hostnames are resolved on connect time
我假设为了重新启动连接我需要删除现有连接(这样连接就不会从池中获取) - 两种方法 - 重启 pgbouncer 或 KILL db
- 从 pgbouncer.ini [databases]
部分将影响隔离到只有一个数据库。所以我加了
test = host=one port=5432 dbname=t
对它和
127.0.0.3 one
到 /etc/hosts
。其余部分在演示中。
我会把这个答案解释为作弊——我没有重新启动 pgbouncer,但是所有现有的到想要的数据库的连接都需要被删除。 (当然我们不会影响连接的其他数据库客户端,但仍然如此)。所以答案是 - 是的,您可以在不重新启动的情况下执行此操作,但是与该数据库的所有连接都将被删除,因此您不能在不删除与已更改主机的现有连接的情况下执行此操作。只是 PAUSE + RESUME
组合在这里无济于事,因为
Hostnames are resolved on connect time
关于linux - pgbouncer是否可以在不重启的情况下重新读取/etc/hosts文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45499817/