Ответ 1
Выполните следующие команды из оболочки Unix:
mongo --port 27017 --eval 'db.adminCommand("shutdown")'
mongo --port 27018 --eval 'db.adminCommand("shutdown")'
mongo --port 27019 --eval 'db.adminCommand("shutdown")'
Я использую ubuntu.
Я запускаю три набора реплик mongod следующим образом:
$ mongod --replSet setname --logpath "1.log" --dbpath /data/rs1 --port 27017 --smallfiles --fork
$ mongod --replSet setname --logpath "2.log" --dbpath /data/rs2 --port 27018 --smallfiles --fork
$ mongod --replSet setname --logpath "3.log" --dbpath /data/rs3 --port 27019 --smallfiles --fork
Как я могу их закрыть?
Выполните следующие команды из оболочки Unix:
mongo --port 27017 --eval 'db.adminCommand("shutdown")'
mongo --port 27018 --eval 'db.adminCommand("shutdown")'
mongo --port 27019 --eval 'db.adminCommand("shutdown")'
Я не думаю, что принятый ответ правильный. После некоторого поиска в Google, я нашел это в группе пользователей mongodb лучшим ответом.
Выключить:
- Запуститеdb.runCommand({ replSetFreeze: numOfSeconds })
на вторичныхdb.runCommand({ replSetFreeze: numOfSeconds })
чтобы предотвратитьdb.runCommand({ replSetFreeze: numOfSeconds })
на первичный
- Запуститеrs.stepDown(seconds)
на основной; он проверит, чтобы убедиться, что хотя бы один из вторичных серверов достаточно захвачен для оплога, прежде чем уйти в отставку. Выберите разумно долгое время ожидания.
- Когда все вторично,db.shutdownServer()
для всегоДля запуска:
- Запуститеrs.freeze(seconds)
на обоих вторичныхrs.freeze(seconds)
с длительным тайм-аутом (скажем, 1-2 минуты)
- Воспитывать первичную
- Используйте stepDown, чтобы исправить случай, если вторичный сервер каким-то образом станет первичным
Простого выключения недостаточно, вы должны предотвратить переход вторичных узлов в первичные.
1) Войдите в оболочку mongo на вторичных серверах.
2) Остановите вторичные серверы, используя следующую команду:
use admin
db.shutdownServer()
2] Перейдите в Linux shell- на вторичных серверах и введите следующую команду:
sudo service mongod stop
Для получения дополнительной информации, пожалуйста, проверьте ссылку ниже:
http://www.tutespace.com/2016/03/stopping-and-starting-mongodb.html
Используйте ps -ef | grep mongod
, получите pids для mongod с номерами портов 27017-27019 и уничтожьте процессы с помощью pids.
mongod --port 27017 --shutdown
mongod --port 27018 --shutdown
mongod --port 27019 --shutdown
Кстати, если есть какая-то возможность, то в будущем вы будете использовать sharding, было бы лучше избегать портов 27018 и 27019. Это порты по умолчанию для некоторых компонентов кластера осколков. В MongoDB 3.2 в Windows я использую следующую последовательность:
mongo mongodb://localhost:27019/admin --eval "db.shutdownServer({timeoutSecs: 10})"
mongo mongodb://localhost:27018/admin --eval "db.shutdownServer({timeoutSecs: 10})"
mongo mongodb://localhost:27017/admin --eval "db.shutdownServer({timeoutSecs: 10})"
выключение второго уровня для предотвращения отката.
mongo admin --port <port> --eval "<db.auth if needed>;db.shutdownServer()"
источник: университетский курс mongodb
Это старый вопрос, но я все же думаю, что я должен ответить на этот вопрос.
Выполните следующую команду в оболочке unix
ps -ef | grep mongo
Это даст вам список pid (идентификаторов процессов), соответствующих портам 27017,27018 и 27019. Вы можете использовать pid для уничтожения всех членов replicaset