2016-08-08 11 views
0

Если включить это правилоКак перезапустить службу Java без сбоев с помощью брандмауэра/iptables?

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

Затем соединение, поступающее на порт сервера 80 перенаправляется на локальный хост: 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 

Однако насчет установленных TCP сокетов соединений на NAT-эд порт 8080? Будут ли они удалены сразу после изменений брандмауэра? В качестве альтернативы, они будут продолжать работать до тех пор, пока не будет закрыт обычный TCP-сокет?

Если это так, то это приведет к перезапуску приложения без сбоев, поскольку старый экземпляр на порту 8080 на изящном завершении и новый на порту 8081 с новыми функциями.

Правильно ли это рассуждение?

ответ

0

Да, вы можете запустить дополнительный процесс Java на новом порту 8081 и изменить правило брандмауэра на этот порт. Отключение соединений в случае перезагрузки определяется опцией IPTABLES_MODULES_UNLOAD. Если для этой опции установлено значение yes (по умолчанию) - они будут отброшены, если нет - тогда они не должны. Я бы предложил использовать обратный прокси (например, Nginx) вместо брандмауэра для балансировки.

+0

Можете ли вы разработать команду, которая сделает переключатель и сохранит установленные соединения со старым портом? –

+0

Отслеживание соединений начинается, как только загружается модуль «ip_conntrack». Перезапуск Iptables - это остановка, а затем запуск функций. В '/ etc/init.d/iptables', функция 'stop' выполняет: ' if ["x $ IPTABLES_MODULES_UNLOAD" = "xyes"]; затем echo -n $ "$ {IPTABLES}: Разгрузочные модули:" ' Настройка IPTABLES_MODULES_UNLOAD = нет в'/etc/sysconfig/iptables' и 'service iptables restart' не должна выгружать модуль ip_conntrack, а соединения shouldn ' t. – valch85

0

В serverfault я получил неправильный технический ответ, но это исправило мой образ мыслей. Я должен использовать HAproxy или аналогичный для этой работы вместо брандмауэра. https://serverfault.com/a/795654/175654