Upstart-Skript in Ubuntu für Mongodb


11

Ich bin neu in Linux und Mongodb. Ich habe mongodb bereits auf Ubuntu installiert, möchte aber eine weitere Instanz auf einem anderen Port ausführen. Wie ich aus anderen Fragen und Foren verstanden habe, muss es ein Startskript geben. /programming/7300109/ubuntu-start-upstart-second-instance-of-mongodb

Ich kann jedoch kein Startskript auf meinem Server finden oder finden. Wenn ich ein Startskript erstelle, wo sollte ich es finden, um es als Dienst zu starten.

oder gibt es eine andere richtige und einfache Möglichkeit, eine andere Instanz von mongodb auf demselben Server, aber auf einem anderen Port zu starten?

Antworten:


8

Laufen Sie vom 10gen-Repository oder vom Standard-Debian / Ubuntu-Repo? Ich empfehle die Verwendung des offiziellen 10gen-Repository.

Überprüfen Sie diesen Link - [10gen MongoDB How-To Install unter Ubuntu:] http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/ . Es ist am besten, die vorherige Mongodb-Installation vor dieser Änderung zu deinstallieren. Dazu müssen Sie auch Ihre Repository-Quelle (in /etc/apt/source.list) ändern. Dies wird jedoch auch im obigen Link beschrieben. Ich empfehle die Verwendung von upstart über sysvinit und die Verarbeitung wird in der Anleitung beschrieben.

Bei der Einrichtung von 10gen Ubuntu befindet sich die Konfigurationsdatei in /etc/mongodb.conf.

Es gibt verschiedene Möglichkeiten, wie Sie einen separaten Mongod-Prozess ausführen können. Eine Möglichkeit besteht darin, ihn einfach von der CLI aus auszuführen.

sudo -u mongodb mongod --dbpath /var/tmp/mongotest --logpath /var/tmp/mongotest_log --port 3001 &

welches produzieren wird (mit 'ps')

mongodb   2210  3.3  1.5 259012 15300 pts/0    Dl   11:48   0:00 mongod --dbpath /var/tmp/mongotest --logpath /var/tmp/mongotest_log --port 3001

und Sie können über den cli -> mongod --port 3001 verbinden

Eine andere Möglichkeit ist das Erstellen einer Kopie von /etc/mongodb.conf -

sudo cp /etc/mongodb.conf /etc/mongodbnew.conf and editing the following lines in the new file - 


# mongodbnew.conf

dbpath=/var/lib/mongodbnew

#where to log
logpath=/var/log/mongodb/mongodbnew.log

port = 27018

Ich habe den Datenbankpfad (in dem die Mongodb-Dateien gespeichert sind) von / var / lib / mongodb in / var / lib / mongodbnew geändert. Der Protokollpfad wurde von mongodb.log in mongodbnew.log geändert, und der Port wurde von der Standardeinstellung 27017 auf 27018 geändert (Sie müssen auch das # entfernen, um die Zeile auskommentieren zu können).

Ich habe auch die oberste Zeile geändert, um den neuen Namen dieser Konfigurationsdatei wiederzugeben.

Sie müssen auch das Datenverzeichnis erstellen, da es nicht vorhanden ist. Ohne dieses Verzeichnis wird der Mongod-Prozess nicht gestartet und es wird sichergestellt, dass der Eigentümer und die Gruppe Mongodb sind.

sudo mkdir /var/lib/mongodbnew
sudo chown -R mongodb:mongodb mongodbnew/

Erstellen und ändern Sie außerdem die Berechtigungen Ihrer Protokolldatei.

sudo touch /var/log/mongodb/mongodbnew.log && sudo chown mongodb:mongodb /var/log/mongodb/mongodbnew.log

Geben Sie Folgendes ein, um Ihren neuen Mongod-Prozess (im Hintergrund) über die CLI zu starten

sudo -u mongodb /usr/bin/mongod --config /etc/mongodbnew.conf &

die folgendes auf den Bildschirm senden -

"Alle Ausgaben gehen an: /var/log/mongodb/mongodbnew.log"

Überprüfen Sie, ob die Mongod-Prozesse mit "ps" ausgeführt werden -

sysadmin@ubuntu:/var/lib$ ps auwx | grep mongo | egrep -v 'grep|sudo'
mongodb    921 11.3  1.5 627672 15608 ?        Ssl  10:56   4:30 /usr/bin/mongod --config /etc/mongodb.conf
mongodb   2137  7.8  1.5 627672 15880 pts/0    Sl   11:36   0:00 /usr/bin/mongod --config /etc/mongodbnew.conf

Führen Sie die Mongo-Shell aus, um zu überprüfen, ob Sie eine Verbindung herstellen können.

$ mongo --port 27018
MongoDB shell version: 2.0.5
connecting to: 127.0.0.1:27018/test
> 

Mit lsof sollten Sie jetzt Ihre beiden Mongod-Prozesse sehen, den ursprünglichen, der an 27017 gebunden ist, und den neuen, der an 27018 gebunden ist.

$ sudo lsof -i :27017
COMMAND PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  921 mongodb    6u  IPv4   9066      0t0  TCP *:27017 (LISTEN)
sysadmin@ubuntu:/var/lib$ sudo lsof -i :27018
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mongod  2137 mongodb    6r  IPv4  11923      0t0  TCP *:27018 (LISTEN)

Kopieren Sie die ursprüngliche Init-Konfigurationsdatei, um sicherzustellen, dass die beiden Prozesse beim Start ausgeführt werden.

sudo cp /etc/init/mongodb.conf /etc/init/mongodbnew.conf

was zu zwei Dateien führen sollte, wie z.

$ ls -lart /etc/init/mongo*
-rw-r--r-- 1 root root 536 May  8 15:51 /etc/init/mongodb.conf
-rw-r--r-- 1 root root 554 Jun 11 11:43 /etc/init/mongodbnew.conf

Bearbeiten Sie die neue Datei mongodbnew.conf mit vi oder wie auch immer Sie möchten -


## Ubuntu upstart file at /etc/init/mongodbnew.conf

limit nofile 20000 20000

kill timeout 300 # wait 300s between SIGTERM and SIGKILL.

pre-start script
    mkdir -p /var/lib/mongodbnew/
    mkdir -p /var/log/mongodbnew/
end script

start on runlevel [2345]

auf Runlevel anhalten [06]

script
  ENABLE_MONGODB="yes"
  if [ -f /etc/default/mongodbnew ]; then . /etc/default/mongodbnew; fi
  if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec                /usr/bin/mongod -- --config /etc/mongodbnew.conf; fi

Skript beenden

Ich habe dies unter Ubuntu 12.04 getestet und es scheint gut zu funktionieren, auch nach einem Neustart. Ich habe es offensichtlich nicht in der Produktion ausgeführt. Entschuldigung, wenn es oben einen Tippfehler gibt, aber es gibt viele Informationen und ich habe möglicherweise etwas verpasst.

Schließlich ist hier ein Link zu Replikatsätzen, der Ihnen helfen könnte, da es Beispiele für das Starten mehrerer Mongod-Instanzen über die CLI gibt - http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial .



2

Ich bin auf ein Problem mit der obigen Antwort gestoßen, bei dem stop-start-daemon einen neuen Prozess mit demselben Namen nicht mehr als einmal startet. Es gibt jedoch ein --nameArgument, mit dem Sie die Zeile in Ihrem Startskript so ändern können /etc/init/, dass sie einen neuen Namen enthält, damit sie beginnt. Etwas wie das:

if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --name mongodb-shard2 --exec /usr/bin/mongod -- --config /etc/mongodb-shard2.conf; fi

In diesem Fall --namemacht das Argument diese Instanz eindeutig und ermöglicht es ihr, getrennt von anderen Mongod-Instanzen zu starten.


0

upstart Skripte finden Sie in /etc/init/


Danke, es gibt eine mongodb.conf, aber es ist die Standard-Conf-Datei für die Standard-Instanz

Ich habe mir gerade meine mongodb.conf angesehen, die vermutlich zur Konfiguration / etc / default / mongodb enthält, und dann mongodb mit start-stop-daemon

Sie können diese Datei kopieren und den Befehl ändern, um mongodb mit einem anderen Port zu starten. Sie möchten wahrscheinlich eine völlig neue Konfigurationsdatei angeben, damit Sie Protokolldateien usw. ändern können
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.