Как правильно установить набор реплик 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()

Надеюсь это поможет.

Другие вопросы по тегам