MongoDb поддерживает 2 формы репликации: реплисеты(Replica Sets ) и ведущий-ведомый(Master-Slave). Рекомендуется использовать более новый подход – реплисеты.
О реплисетах можно подробно прочесть на официальном сайте. Мы в свою чередь разберем как можно быстро создать и настроить данный вид репликации.
Когда мы говорим о репликации, мы подразумеваем, что у нас есть несколько баз. Для локальных экспериментов можно запустить несколько демонов указав им разные порты и директории для баз.
Создадим несколько директорий для экспериментальных баз:
$ mkdir db1
$ mkdir db2
$ mkdir db3
Запуск демона MongoDb (mongod) выполняется следующей командой
$ mongod
если хотим указать путь к базе и порт, тогда так:
$ mongod --dbpath db1 --port 27001
плюс добавим еще параметр указывающий на то что это репликасет:
$ mongod --dbpath db1 --port 27001 --replSet myreplica
myreplica – в данном случае имя для нашего репликасета.
Теперь таким же образом запускаем еще 2 демона:
$ mongod --dbpath db2 --port 27002 --replSet myreplica
$ mongod --dbpath db3 --port 27003 --replSet myreplica
В итоге у нас подготовлены 3 базы и нам следует теперь распределить между ними роли: кто будет Первичным(Primary) звеном, к которому будут добавлены остальные.
Допустим мы решили сделать db1 главным. Для этого заходим на него используя mongoshell :
$ mongo --port 27001
и делаем
mongo> rs.initiate()
для инициализации конфигурации.
Все манипуляции с репликасетом выполняются с помощью методов объекта rs. Весь список методов пожно получить выполнив команду rs.help().
Проверим статус нашего репликасета:
mongo> rs.status()
как видим в свойстве members присутсвует только текущий сервер, для того чтобы добавить остальные делаем:
mongo> rs.add("myhost:27002")
mongo> rs.add("myhost:27003")
myhost – имя нашего хоста (должно быть написано при выводе rs.status())
Выволним еще раз rs.status() и убедимся что базы были добавлены.
Вот и все. Старался передать материал максимально просто. За более полной информацией по конфигурированию можно обратиться к офсайт докам.