AWS + Docker:一段时间后,Pheanstalk失去与beantalkd的连接

时间:2018-10-24 18:19:09

标签: sockets beanstalkd nlb

我正在尝试调试与beantalkd失去的连接。我希望Pheanstalk进程应该死掉并受到监督以重新启动工作人员,或者Pheanstalk库重新连接丢失/悬挂的袜子。似乎是这样的,我有一些僵尸程序工人以某种方式失去了与beantalk守护程序的连接。

体系结构的高级视图:

工人是用PHP编写的,并且使用Pheanstalk。

beanstalkd进程使用带有exec f79679c48b19 ash -c netstat -p命令的docker schickling / beanstalkd运行,因为ECS在卷准备就绪之前未足够快地公开卷,这将导致容器根本无法启动

标准的AWS Network Load Balancer在beantalkd容器和工作器之间,将流量从端口11300传递到运行beantalkd的docker容器。

到目前为止,我已经完成调试: 大约一个小时后(我还没有确定确切的时间),我在beantalkd容器上看到已建立的TCP连接开始丢弃docker /usr/bin/beanstalkd: prot.c:710 in check_err: write(): Connection reset by peer

我看到这样的间歇性日志发送到cloudwatch:

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

然后在工作端,我看到这些进程仍然存在,并且套接字打开了各自的文件描述符。但是却没有得到工作-那些只是堆积在豆荚的容器上。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimaryDark">@color/color_primary</item>
    <item name="colorAccent">@color/color_accent</item>
    <item name="android:textColor">@color/white</item>
</style>

我还可以做些什么来进一步调试此问题,以找出问题所在:

  1. Docker进程失去与容器的连接。
  2. AWS NLB只是随机放东西。
  3. 工人无法正确检测到套接字故障的情况

0 个答案:

没有答案