【问题标题】:How to restart a Java service without disruption using firewall/iptables?如何使用防火墙/iptables 在不中断的情况下重新启动 Java 服务?
【发布时间】:2016-08-09 08:26:41
【问题描述】:

如果启用此规则

iptables -t nat -A PREROUTING -p tcp --dport 80  -j REDIRECT --to 8080

然后到服务器端口 80 的连接被重定向到 localhost:8080。如果我想重新启动服务,我可以在另一个端口上启动服务吗?说端口 8081 并将防火墙重新路由到

iptables -t nat -A PREROUTING -p tcp --dport 80  -j REDIRECT --to 8081 # Apparently -A won't work. I have to replace the rule, not add it. But I don't know how to do it yet

但是,在 NAT-ed 端口 8080 上建立的 TCP 套接字连接呢? 防火墙更改后它们会立即被删除吗?或者,它们会一直工作到正常的 TCP 套接字关闭吗?

如果是这样,那么通过让旧实例在端口 8080 上正常关闭并在端口 8081 上使用新功能的新实例,这可以在不中断的情况下重新启动应用程序。

这个推理正确吗?

【问题讨论】:

    标签: java linux networking firewall iptables


    【解决方案1】:

    是的,您可以在新端口 8081 上启动额外的 Java 进程并将防火墙规则更改为该端口。重启时是否断开连接由选项 IPTABLES_MODULES_UNLOAD 决定。如果此选项设置为 yes(默认值) - 它们将被删除,如果不是 - 那么它们不应该。我建议使用反向代理(例如 Nginx)而不是防火墙来进行平衡。

    【讨论】:

    • 您能否详细说明将进行切换并保持与旧端口的已建立连接的命令?
    • 连接跟踪在“ip_conntrack”模块加载后立即开始。 iptables restart 是一个停止然后启动的功能。在/etc/init.d/iptables 中,'stop' 函数执行:if [ "x$IPTABLES_MODULES_UNLOAD" = "xyes" ]; then echo -n $"${IPTABLES}: Unloading modules: "/etc/sysconfig/iptables 中设置 IPTABLES_MODULES_UNLOAD=no,并且'service iptables restart' 不应卸载 ip_conntrack 模块,并且不应丢弃连接。
    【解决方案2】:

    在 serverfault 中,我得到了一个不正确的技术答案,但这纠正了我的思维方式。我应该使用 HAproxy 或类似工具代替防火墙来完成这项工作。 https://serverfault.com/a/795654/175654

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2011-09-19
      相关资源
      最近更新 更多