Здравствуйте, All!
перезапуск backend`а (service httpd restart) занимает меньше секунды времени,
но если в этот период времени на сервер приходят запросы - клиенты получают
от nginx`а ответ "502 Bad Gateway", и в error.log при этом пишется ошибка:
[error] 14271#0: *49 connect() failed (111: Connection refused) while reading
response header from upstream
если клиент в браузере нажмет F5, он увидит запрашиваемую страницу,
к этому времени backend уже успеет запуститься и обработает запрос.
хочется найти наиболее изящный способ спрятать перезапуск backend`а
от клиентов, чтобы вместо отказа в обслуживании они получили только
небольшую задержку ответа, в идеале - вообще бы ничего не заметили.
единственный вариант, который я пока что смог найти - это запустить
еще один httpd на другом ip, например, 127.0.0.2, и для всех хостов
вместо
location / {
proxy_pass http://127.0.0.1;
}
прописать
location / {
proxy_pass http://backend;
}
где backend - это
upstream backend {
server http://127.0.0.1;
server http://127.0.0.2 backup;
}
первый httpd пойдет перезапускаться, например, если будет поврежден opcode cache
у eAccelerator`а. чтобы backup`ный остался, его надо запускать без eAccelerator.
подозреваю, что других вариантов избежать 502, кроме двух независимых httpd нет.
хотелось бы узнать какие еще народ использует варианты повышения живучести
backend`ов, кроме установки новых физических серверов - это и так понятно.
PS
http://2bits.com/articles/php-op-code-caches-accelerators-a-must-for-a-large-site.html
...
Drawbacks of PHP op-code caches: Segmentation Faults
...
http://2bits.com/articles/logwatcher-restart-apache-after-a-segmentation-fault.html
...
logwatcher: restart Apache after a segmentation fault
...
--
Best regards,
Gena mailto:makhomed@xxxxxxxxxxxxxx