Как правильно установить набор реплик mongodb, используя docker и рис?
Как правильно установить набор реплик mongodb, используя docker и рис?
Я пытался следовать официальным учебникам mongodb, чтобы создать fig.yml
файл с некоторыми наборами реплик, но всегда был заблокирован из-за вызова rs.initiate()
а также rs.add("<hostname><:port>")
должным образом.
Я нашел этот ТАК ответ, объясняющий, почему я не могу начать все только с shell
без звонка rs.initiate()
так как я могу это сделать?
О, и я использую mongo:latest
(v2.6.5) в качестве базового изображения, без каких-либо изменений.
2 ответа
У меня была похожая проблема, это то, что я сделал. Я использую docker-compose вместо рис.
По моему докер-сочиняй.
mongors:
image: mongo
ports:
- "27017:27017"
volumes:
- ./mongo:mongo
entrypoint: mongo/entrypoint.sh
В моей entrypoint.sh:
#!/bin/bash
mongod --port 27018 --replSet rs0 --fork --syslog --smallfiles
mongo --port 27018 --eval "rs.initiate({_id : 'rs0', members : [{_id : 0, host : 'localhost:27018'}]})"
mongo --port 27018 --eval "while(true) {if (rs.status().ok) break;sleep(1000)};"
Убедитесь, что это исполняемый файл:
chmod +x mongo/entrypoint.sh
Это немного бестолково, но работает:)
Сначала остановите службу mongod, прежде чем устанавливать набор реплик
service mongodb stop
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0 --fork
Он запустит экземпляр mongod с именем rs0 на порту 27017. Теперь запустите командную строку и подключитесь к этому экземпляру mongod.
В клиенте mongo введите команду rs.initiate(), чтобы инициировать новый набор реплик.
rs.initiate()
Чтобы проверить конфигурацию набора реплик, введите команду rs.conf ().
rs.conf () должен иметь следующее
{
"_id" : "rs0"
"version" : 1,
"members" : [
{
"_id" : 0,
"host" "localhost:27017"
},
{
"_id" : 1,
"host" "localhost:27018"
},
{
"_id" : 2,
"host" "localhost:27019"
}
]
}
Теперь вы можете добавить дополнительные узлы в набор репликации, ссылаясь на имя хоста, которое вы им дали.
rs.add("localhost:27019")
{ "ok" : 1 }
Сделайте это для каждого из оставшихся членов репликации. Теперь ваш набор репликации должен быть запущен.
Чтобы проверить состояние набора реплик, введите команду rs.status ().
rs.status()
Надеюсь это поможет.