Поднимаем mongodb кластер на docker.
Posted in Новости on 13 апреля, 2016 by adminУсловные обозначения :
node1 - mongo-master.server.com - first_ip
node2 - mongo-slave1.server.com - second_ip
node3 - mongo-slave2.server.com - third_ip
1. Создаем на сервере окружение :
mkdir -p /opt/mongo
cd /opt/mongo
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
chown 999 mongodb-keyfile
2. Собираем и стартуем контейнер на node1 :
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-master.server.com" -p 27017:27017 -d mongo:2.6.5 --smallfiles
3. Заходим в контейнер
docker exec -it mongo /bin/bash
4. Конфигурируем mongo-master :
mongo
use admin
db.createUser( {
user: "siteUserAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});
db.createUser( {
user: "siteRootAdmin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
});
exit
5. Выходим из контейнера :
exit
docker stop mongo
6. Удаляем текущий контейнер и запускаем новый с ключом :
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-master.server.com" --add-host mongo-master.server.com:
7. Заходим на node1 в контейнер и включаем репликацию :
docker exec -it mongo /bin/bash
mongo
use admin
db.auth("siteRootAdmin", "password");
rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "node1.example.com:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
rs.conf()
{
"_id" : "rs0",
"version" : 1,r
"members" : [
{
"_id" : 0,
"host" : "node1.example.com:27017"
}
]
}
8. Стартуем node2 , node3 mongo docker
docker run --name mongo -v /opt/mongo/mongo-files/data:/data/db -v /opt/mongo/mongo-files:/opt/keyfile --hostname="mongo-slave1.server.com" --add-host mongo-master.server.com:
9. После успешного старта node2, node3 заходим в mongo на мастере и подключаем слейвы :
rs.add("mongo-slave1.server.com")
rs.add("mongo-slave2.server.com")
и проверяем статус :
rs.status()