Я пытаюсь отладить потерянные соединения с beanstalkd.Я ожидал бы, что либо процесс Pheanstalk должен умереть и контролировать перезапуск рабочих, либо библиотеку Pheanstalk, чтобы восстановить потерянные / подвешенные носилки.Похоже, дело в том, что у меня есть рабочие-зомби, которые каким-то образом потеряли связь с демоном beanstalk.
Общий вид архитектуры:
Рабочие написаны на PHP и используют Pheanstalk.
Процесс beanstalkd запускается с использованием образа docker schickling / beanstalkd с командой "/bin/sleep 3 && /usr/bin/beanstalkd -b /binlog"
, поскольку ECS не предоставляет том достаточно быстро до того, как том готов, что может привести к тому, что контейнер не запустится приall.
Между контейнером beanstalkd и рабочими находится стандартный балансировщик сетевой нагрузки AWS, передающий трафик через порт 11300 в контейнер докера, выполняющий beanstalkd.
Отладка, которую я сделал до сих пор: Примерно через час или около того (я точно не рассчитал это время), я вижу на контейнере beanstalkd установленные TCP-соединения, начинающие сбрасывать Docker exec f79679c48b19 ash -c netstat -p
.
Я вижу прерывистые журналы, подобные этой, отправленнойto cloudwatch:
/usr/bin/beanstalkd: prot.c:710 in check_err: write(): Connection reset by peer
Затем на рабочей стороне я вижу, что процессы все еще живы, и сокеты открыты для соответствующих дескрипторов файлов.Но не получают задания - они просто накапливаются в контейнере beanstalkd.
When I strace the process I get something like:
sudo strace -p2768
strace: Process 2768 attached
restart_syscall(<... resuming interrupted poll ...>) = 0
poll([{fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, 1000) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, 1000
Что еще я могу сделать для дальнейшей отладки, чтобы выяснить, есть ли проблемы:
- Процесс Docker теряет соединения с контейнером.
- AWS NLB просто отбрасывает вещи случайным образом.
- Что-то с работниками, которые не могут правильно определить неисправный сокет