HAProxy+;Netty:tcp检查使Netty抛出;“对等端重置连接”;例外
我正在使用Facebook运行一个基于TCP的节俭应用程序。我想对请求进行负载平衡,因此我尝试将HAProxy设置为负载平衡器。负载平衡部分工作得很好。HAProxy+;Netty:tcp检查使Netty抛出;“对等端重置连接”;例外,tcp,netty,thrift,haproxy,Tcp,Netty,Thrift,Haproxy,我正在使用Facebook运行一个基于TCP的节俭应用程序。我想对请求进行负载平衡,因此我尝试将HAProxy设置为负载平衡器。负载平衡部分工作得很好。服务器检查部分实际上工作得很好。如果我关闭一台服务器,HAProxy会看到它并将流量引导到另一台 不起作用的是tcp检查选项。它发出的每个请求都会迫使Netty抛出java.io.IOException:Connection reset by peer异常 所以,HAProxy正在关闭连接,Netty还在聊天。但奇怪的是,tcp检查expect
服务器检查部分实际上工作得很好。如果我关闭一台服务器,HAProxy会看到它并将流量引导到另一台
不起作用的是tcp检查
选项。它发出的每个请求都会迫使Netty抛出java.io.IOException:Connection reset by peer
异常
所以,HAProxy正在关闭连接,Netty还在聊天。但奇怪的是,tcp检查expect binary 5550\UP
正在工作
以下是我的配置文件供参考:
defaults
mode tcp
timeout connect 5000ms
timeout client 50000ms
listen thrift
bind *:9090
mode tcp
balance roundrobin
option tcpka
retries 3
option tcp-check
tcp-check send-binary 80010001000000135379734f7073536572766963653a636865636b0000000000
# tcp-check expect string UP
tcp-check expect binary 5550 # UP
server thrift01 127.0.0.1:4444 check inter 10s
server thrift02 127.0.0.1:5555 check inter 10s
timeout connect 20s
timeout server 30s
同样,连接也起作用。负载平衡工作。常规SYN/ACK检查工作正常。但是,当我打开tcp检查时,服务器上会出现错误
[2016-10-06 17:47:17,586] [nifty-server-worker-5] ERROR c.f.nifty.core.NiftyExceptionLogger - Exception triggered on channel connected to /127.0.0.1:39010
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:192)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108)
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:337)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
谢谢