我有两台服务器,一台作为备用服务器,另一台作为活动服务器。从备用pgpool不断检查postgres是否正在另一台服务器上运行。我试图模拟pgpool对活动服务器的请求超时的情况,并尝试使用iptables DROP。
根据我所读到的内容,DROP选项会静默地丢弃数据包,而不会让源代码知道它,并且需要很长时间才能失败(知道源代码)。我在活动服务器的iptables中使用了以下条目
iptables -A INPUT -p tcp -s <standby server ip> -m state --state NEW,ESTABLISHED --dport 5432 -j DROP
通过这样做,我可以模拟超时,但它会超时(甚至不是一秒钟)。
任何人都可以解释它是什么意思&#34;需要很长时间才能失败&#34;在所有的参考?以及是否有任何可以用来增加失败时间的选项。
答案 0 :(得分:0)
根据规则集中规则的位置,它可能无法触发,<standby server ip>
的数据包可能会达到ALLOW
规则。
您可以使用iptables
watch
以查看正在触发的规则
$ sudo watch -n1 "iptables -vnL"
“花费很长时间才能失败”意味着DROP
告诉iptables不使用tcp重置数据包或icmp错误来响应数据包的发送方。这会导致发送方在关闭尝试连接之前必须等待指定的超时时间。
答案 1 :(得分:0)
我通过使用telnet而不是pgpool再次测试了它,它确实等待了60秒。事实证明问题出在pgpool本身,而不是在iptables中。我提供这个作为任何遇到这个问题的人的答案。谢谢大家的答案