我的PostgreSQL
服务必须在 之后启动OpenVPN
,当我检查顺序 rc.X 目录时,它们被列为 S16openvpn 和 S19postgresql,因此它们的顺序正确。
但是,通过 VPN 连接到数据库失败,并且日志始终指示PostgreSQL
无法在启动时绑定。我的猜测是所有 OpenVPN 服务都需要一些时间才能启动,并且PostgreSQL
在网络加载OpenVPN
完成之前启动。
OpenVPN
有没有办法让 PostgreSQL在放弃之前尝试重新加载并尝试绑定到网络?
在我看来,您正在尝试将 postgres 绑定到与隧道关联的 IP。如果是这样的话,这
ip_nonlocal_bind
就是您的问题的解决方案。设置 ip_nonlocal_bind 允许您绑定到任何 IP,甚至是与您的计算机无关的 IP,这正是您想要绑定到您还没有的 IP 时想要的 - 例如,当使用在活动之间浮动的虚拟 IP 时和被动节点。假设这只是 ipv4;
或者扔进去
/etc/sysctl.conf
这是我在这些情况下使用了很多时间的解决方法:编辑 postresql rc.d 启动脚本并使用
sleep
bash 命令添加延迟。我知道这不是那么干净,也许任何人都有更好的解决方案。废弃 2 个单独的启动脚本,只制作一个以正确的顺序调用它们的脚本,无论你喜欢什么依赖逻辑