У меня установлена реплика mongodb версии 3.4 с 3 серверами,
Я хочу смоделировать проблему с сетевым подключением
Мое приложение написано в Java с драйвером Монго Java
Когда я вытаскиваю кабель Ethernet из основного сервера, находясь в середине
Операция записи, такая как вставка. Драйвер mongo всегда ждет восстановления соединения TCP, и мое приложение застревает, пока я не подключу обратно кабель Ethernet. Событие жесткой реплики mongodb уже выбрано новым основным сервером
Каковы мои варианты уведомления приложения, сервер mongodb не работает, и мне нужно повторно подключиться к новому основному серверу?
Я пытался изменить ОС tcp_keepalive_time
, но это сильно повлияло на мою систему, потому что мне нужно очень короткое подтверждение.
Спасибо,
Шарон
Дополнительная информация:
Строка подключения:
mongodb://192.168.12.31:27017,192.168.12.32:27017,192.168.12.33:27017
У меня только 3 сервера, без арбитра. У меня переменная MongoCollection<Document> collection
, я делаю find
операцию, которая занимает много времени, в середине, когда клиент ожидает ответа сервера, я вынимаю кабель Ethernet из основного сервера Монго. Водитель монго будет ждать вечно. команда:
collection.find(matchCriteria)
Если я логически ухожу с первичного уровня, я получаю MongoSocketReadException
. Я не хочу минимизировать socketTimeOut
драйвера, потому что у меня иногда бывают долгие операции, и я хочу иметь возможность вернуться к работе так быстро, как только смогу. Если при подключении всех серверов будут выбраны новые выборы и новый основной, текущая операция завершится неудачно, и следующая операция после новых выборов будет успешной с новым основным. Это
rs.conf()
:
rs0:PRIMARY> rs.conf()
{
"_id" : "rs0",
"version" : 11,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "192.168.12.31:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "192.168.12.32:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "192.168.12.33:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 1000,
"heartbeatTimeoutSecs" : 2,
"electionTimeoutMillis" : 5000,
"catchUpTimeoutMillis" : 60000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5bd6f31118b9c73f4dda22f8")
}
}