Сценарии инициализации для mongos и конфигурационный сервер для шардинга MongoDB

Я создал шардинг в локальной среде для целей тестирования.

У меня есть три сервера конфигурации на 1 машине и 1 маршрутизатор запросов на одной машине и два узла данных на двух разных машинах.

Все работает нормально, но моя проблема в том, что я не могу поддерживать активный процесс на разных портах, так как у меня нет скрипта запуска / остановки. Я запускаю процессы в командной строке с & в конце концов, чтобы сделать его активным, это очень плохой способ сохранить процесс активным, и иногда он умирает автоматически.

Пожалуйста, помогите или укажите способ использования сценариев, а также сценарий может обрабатывать различные порты, чтобы активировать весь процесс на одной машине.

2 ответа

Решение

Для сервера конфигурации мы можем использовать следующий скрипт:

#!/bin/bash

### BEGIN INIT INFO
# Provides:        MongoDB Config Server
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop MongoDB Config server
### END INIT INFO

start() {
        /usr/bin/mongod --configsvr --dbpath /home/configdb/ --port 27018 &
}

stop() {
        for a in `ps -ef | grep 27018 | awk '{print $2}'`; do kill -9 $a; done
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

Мы можем использовать сценарии, как показано в примере ниже для query_router:

#!/bin/bash

### BEGIN INIT INFO
# Provides:        MongoDB Config Server
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop MongoDB Config server
### END INIT INFO

start() {
        /usr/bin/mongos --configdb 192.168.3.187:27018 --port 27019 &
}

stop() {
        for a in `ps -ef | grep 27019 | awk '{print $2}'`; do kill -9 $a; done
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

Мы не можем использовать конфигурацию монго по умолчанию для монго, потому что при запуске также необходимо определить базу данных конфигурации и информацию о порте.

Вы никогда не должны пытаться управлять несколькими экземплярами из одного сценария инициализации, поскольку это создает целый объем лишней административной работы, когда вы выполняете запуск / выключение любого из экземпляров.

Вам следует искать один сценарий инициализации для каждого отдельного экземпляра процесса базы данных, так как это лучшая практика Linux.

По большей части вы сможете использовать стандартный сценарий инициализации MongoDB, а затем сделать переименованную копию для каждого экземпляра базы данных.

Затем вы должны создать отдельные файлы конфигурации для каждого экземпляра, которые должны содержать немного разные конфигурации, и запускать каждый экземпляр на своем собственном порту, своем собственном dbpath и своем лог-файле.

Затем вы можете указать каждый скрипт инициализации в файле конфигурации для его экземпляра, и все должно работать как запланировано.

Наконец, в MongoDB вы должны использовать опцию --fork, которая обеспечивает безопасный способ отсоединения MongoDB от экземпляра оболочки. Если вам абсолютно необходимо продолжать использовать shell fork (оператор &), то вам следует заключить MongoDB в "nohup", чтобы избежать закрытия экземпляра завершением вашей оболочки. Это будет выглядеть примерно так: nohup <mongodb cmd and arguments> &

Изменить: Вы можете использовать тот же процесс, чтобы использовать те же сценарии инициализации для запуска MongoS. Вам нужно найти строку, которая устанавливает mongod двоичный как тот, который будет выполнен. Под всеми производными Debian это будет DAEMON переменная. Измените это, чтобы указать mongos вместо mongod и уходи.

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