pgbouncer可以在不重启的情况下重新读取/ etc / hosts文件

时间:2017-08-04 06:41:34

标签: linux postgresql ubuntu hosts pgbouncer

pgbouncer是否有办法强制重新读取/etc/hosts文件而不重启?我已向/etc/hosts添加了一个新服务器,我希望pgbouncer以最少的麻烦连接到新服务器。

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

pgbouncer版本:1.7.2在Ubuntu 14.04上运行

1 个答案:

答案 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组合在此无效

  

主机名在连接时解析