すべて、私は奇妙な問題に遭遇しました。mongodb接続がMongoSocketReadExceptionをスローする
私は3台のMongoDBサーバーを持っていて、それをreplset
に結合しました。 - 1つは1つで、もう1つは2次ノードです。 私のMongoDBクライアントは、Java MongoDBクライアント、Spring環境です。
replset
ノードに向けるには、haproxy
を使用します。
私はhaproxy
に接続したときに時々、モンゴクライアントは次の例外がスローされます:私は再試行すると、それは消え、数分後には再び表示されます
message:Exception found: Prematurely reached end of stream; nested exception is com.mongodb.MongoSocketReadException: Prematurely reached end of stream
を。
私haproxy
設定は以下を示している:
global
daemon
user vcap
group vcap
log /dev/log daemon info
maxconn 4096
defaults
log global
option dontlognull
mode tcp
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms
retries 3
option redispatch
# admin gui
listen stats
bind :8080
mode http
stats enable
stats uri /stats
default-server on-error fastinter error-limit 3 inter 3000ms fastinter 1000ms downinter 300s fall 3
frontend fe_mongo_27027_tcp
bind 0.0.0.0:27027
mode tcp
option tcplog
use_backend be_mongo_27027_tcp
backend be_mongo_27027_tcp
mode tcp
option tcp-check
# mongodb wire protocol
tcp-check send-binary 3a000000 # Message Length (58)
tcp-check send-binary EEEEEEEE # Request ID (random value)
tcp-check send-binary 00000000 # Response To (nothing)
tcp-check send-binary d4070000 # OpCode (Query)
tcp-check send-binary 00000000 # Query Flags
tcp-check send-binary 61646d696e2e # fullCollectionName (admin.$cmd)
tcp-check send-binary 24636d6400 # continued
tcp-check send-binary 00000000 # NumToSkip
tcp-check send-binary FFFFFFFF # NumToReturn
# Start of Document
tcp-check send-binary 13000000 # Document Length (19)
tcp-check send-binary 10 # Type (Int32)
tcp-check send-binary 69736d617374657200 # ismaster:
tcp-check send-binary 01000000 # Value : 1
tcp-check send-binary 00 # Term
tcp-check expect binary 69736d61737465720001 #ismaster True
# mongodb check end
option tcplog
option tcpka
server mongodb-10.62.90.175 10.62.90.175:27017 check inter 2000
server mongodb-10.62.90.176 10.62.90.176:27017 check inter 2000
server mongodb-10.62.90.174 10.62.90.174:27017 check inter 2000