Сценарии Init для mongos и сервер конфигурации для sharding MongoDB

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

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

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

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

2 ответов


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

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

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

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

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

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

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


для config server мы можем использовать следующий скрипт:

#!/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 }'`; do kill -9 $a; done
}

case  in
  start|stop) ;;
  restart) stop; start;;
  *) echo "Run as  <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 }'`; do kill -9 $a; done
}

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

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