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

标签 linux postgresql ubuntu hosts pgbouncer

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/

相关文章:

linux - 如何远程调试

python - 使用pexpect时如何显式设置终端大小

json - 如何查询json中的日期?

python - 在 Ubuntu 上安装 django-cms 时出现环境错误

C++ 套接字不接收传入数据包,在 Python 中工作

C程序-服务器函数错误

sql - 如何计算同一个表中两个单独的列并将它们求和成一个新列

postgresql - pg_auth/pg_pwd 文件的格式

ubuntu - 如何更新 Sublime Text 编辑器

ubuntu - 无法在Ubuntu 13.04中安装ARToolkit