重启后 PostgreSQL 未监听本地 eth1

重启后 PostgreSQL 未监听本地 eth1

我有一台具有 2 个网络接口的服务器 - eth0 上的全局接口和 eth1 上的本地接口,IP 为 10.181.xx.xx。运行 Ubuntu 16.04。

我设置了 PostgreSQL 来监听这个本地地址,以便网络上的另一台服务器可以访问它。

问题是当我重新启动数据库服务器时,PostgreSQL 无法绑定到此本地地址。postgresql.log 中有以下内容:

2016-07-01 15:06:09 GMT LOG:  could not bind IPv4 socket: Cannot assign   requested address
2016-07-01 15:06:09 GMT HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2016-07-01 15:06:09 GMT WARNING:  could not create listen socket for "10.181.xx.xx"

完成后service postgresql restart一切正常。

我怎样才能让 Postgres 等到 eth1 重启后启动并绑定到它?

答案1

经过调查/var/log/syslog发现,这是启动顺序的问题systemd

添加

After=network-online.target

行进入到 部分/lib/systemd/system/[email protected][Unit]

看起来是这样的:

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service
After=network-online.target

一切开始工作 - PostgreSQL 现在在网络上线后加载。

答案2

我遇到了同样的问题,接受的答案中的解决方案对我有用。但是,我做了一些进一步的研究,发现在我的情况下,只有当我在 postgresql.conf 中明确指定 IP 地址时才会出现问题:

listen_addresses = '10.181.xx.xx'

当我修改配置以监听所有地址时,问题消失了:

listen_addresses = '*'

相关内容