Поднимаем MongoDB Replica Set на одном хосте (для тестов) в Docker


30.09.2018

MongoDB Replica Set можно поднять на одном компе. Разумеется, это только для тестов, для тренировки и понимания как это работает. Поднимать MongoDB будем в контейнерах Docker.

Создаем сеть в Docker чтобы mongodb ноды могли видеть другдруга по имени (--name):


docker network create mynet

mongodb юзаем без авторизации. С включенной авторзацией у меня не удалось собрать Replica Set. Поднимаем три экземпляра mongodb в Docker. Две монги будут воркерами, третья в качестве арбитра.

В локальный хост они будут торчать портами 27017, 27018, 27019, а в своей (в Докеровской) сетке видеть друг друга по портам 27017. На локальном хосте папки, куда Монги будут складывать свои базы: /var/mongo/db1 /var/mongo/db1 /var/mongo/dba


docker run --name mongodb1 --net=mynet -d -v /var/mongo/db1:/data/db -p 27017:27017 --restart unless-stopped mongo --replSet "rs0"
docker run --name mongodb2 --net=mynet -d -v /var/mongo/db2:/data/db -p 27018:27017 --restart unless-stopped mongo --replSet "rs0"
docker run --name mongodba --net=mynet -d -v /var/mongo/dba:/data/db -p 27019:27017 --restart unless-stopped mongo --replSet "rs0"
Смотрим кому какие адреса раздались:

sudo docker network inspect mynet
и прописываем в /etc/hosts :

#172.19.0.4	5e5f08e3f93d
172.19.0.4      mongodb1
172.19.0.2      mongodb2
172.19.0.3      mongodba

Теперь, собственно, собираем Replica Set

Подключаемся к первому Mongo:

sudo mongo 127.0.0.1:27017
Инициируем репликасет:

> rs.initiate()
Через минуту чекаем:

> db.isMaster()
Если уже готов, и назвался rs0:PRIMARY, идем дальше:

Добавляем в репликасет второе манго Монго:


> rs.add("mongodb2:27017")
Добавляем арбитра:

> rs.add("mongodba:27017", {arbiterOnly: true})
Смотрим статус:

> rs.status()
Done.

P.S. могут быть грабли с сетью Докера, и именами, глубоко не копал, просто дописал в /etc/hosts строку типа:

172.19.0.4 5e5f08e3f93d

(Когда Монго начнет ругаться, сообразите что это :))

Если что-то надо править в репликасете, подкючаемся к PRIMARY и рулим, рулим. При коннекте с PyMongo, драйверу указать весь список хостов, он сам занюхает кто сейчас PRIMARY.

Если нет желания поднимать репликасет у себя, идем сюда: https://www.mongodb.com/cloud, регимся и бесплатно делаем себе репликасет на трех нодах и базой 500MB (инфа на момент написания заметки). Спасибо AWS за мелкую халяву. подробности тут: https://www.mongodb.com/cloud/atlas?jmp=nav

MongoDB Compass - визуальная гляделка для MongoDB. Качать здесь:

https://www.mongodb.com/products/compass

Успехов.

Дивись також:

Web-dev склерозник
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви