我有一台具有 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 = '*'