如何使用firewall / iptables在不中断的情况下重启Java服务?

时间:2016-08-08 19:20:53

标签: java linux networking firewall iptables

如果启用此规则

CELERY_IMPORTS = (
    'reports.tasks',
    'some_app.some_module',
)

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

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

然而,在NAT-ed端口8080上建立的TCP套接字连接怎么样? 防火墙更改后会立即丢弃它们吗?或者,他们会继续工作,直到正常的TCP套接字关闭吗?

如果是这样,那么通过在正常关闭时使端口8080上的旧实例和具有新功能的端口8081上的新实例,可以重新启动应用程序而不会中断。

这种推理是否正确?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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