Подтвердить что ты не робот

MongoDB Как узнать IP-адрес первичного сервера БД в наборе реплик?

Я запускаю реплику mongodb, установленную на 3 узла, позволяет их ip 192.168.1.100, 192.168.1.101,192.168.1.102

теперь в текущем наборе реплик 192.168.1.100 является первичным, а 192.168.1.101 и 192.168.1.102 являются вторичными, мое приложение подключается к 192.168.1.100 для операций записи. Теперь через 2 дня 192.168.1.100 отключается, а mongodb выбирает 192.168.1.101 как первичный. как мое приложение знает 192.168.1.101 является основным.

- это их любая плавающая концепция ip в mongodb, так что ручная работа не требуется, когда первичный сервер переключается в наборе реплик.

4b9b3361

Ответ 1

По-видимому, вы сможете использовать свой "драйвер" (инструмент mongo cli или предпочитаемый язык, ex node -mongo) для подключения к любому члену набора реплик. После подключения просто спросите текущий mongod для других членов набора:

> db.runCommand("ismaster")
{
     "ismaster" : false,
     "secondary" : true,
     "hosts" : [
             "ny1.acme.com",
             "ny2.acme.com",
             "sf1.acme.com"
     ],
     "passives" : [
          "ny3.acme.com",
          "sf3.acme.com"
     ],
     "arbiters" : [
         "sf2.acme.com",
     ]
     "primary" : "ny2.acme.com",
     "ok" : true
}

Для моего использования важно НЕ подключаться к основному. Подобно OP, я хочу минимизировать количество соединений, необходимых для поиска вторичного элемента. Этот метод должен работать для вас, но документация здесь может быть немного устаревшей.

http://docs.mongodb.org/meta-driver/latest/legacy/connect-driver-to-replica-set/

Ответ 2

Когда ваш клиент подключается к любому данному члену в наборе реплик ( "семя" ), он будет запрашивать набор реплик для других членов в наборе. Поэтому, если вы подключитесь к .100, он запросит набор и найдет, что .101 и .102 также являются допустимыми членами набора.

Если драйвер теряет свое соединение с .100, он будет запускаться через другие найденные семена и попытаться найти соединение. Как только это произойдет, он запросит набор реплик, узнает, кто является текущим мастером, и подключится к нему. Все это происходит прозрачно.

Вы можете проверить это, войдя в мастер и выполнив следующее:

rs.stepDown(60)

Это заставит машину уйти в отставку как мастер (и вызвать выбор нового мастера). Он не будет иметь право на переизбрание на 60 секунд. Вы можете использовать это, чтобы проверить поведение вашего приложения в обстоятельствах, когда изменяется первичный node.

Когда вы настраиваете соединение с репликацией, вы обычно укажете несколько хостов для подключения. Все они служат семенами для использования драйвером для сопоставления набора реплик, так что у вас нет единственной точки сбоя, если вы перезапустите приложение, пока установленный вами единственный хост отключен. Специфика этого будет зависеть от того, какой драйвер вы используете, - проверьте документацию вашего драйвера.

Ответ 3

Чтобы выяснить, какой текущий IP-адрес первичного сервера запускается из командной строки:

rs.status().members.find(r=>r.state===1).name

В зависимости от стека приложений и драйвера вам может потребоваться указать все хосты в реплике для автоматического выбора первичного для записи.