Mehrere Mongos auf einem Server

11

Ich spreche nicht von Scherben . Wir hatten eine Prüfung Server (Linux) und es gibt bereits ein , mongodie zu einem anderen Projekt / Subteam gehört. Ist es möglich , laufen mehrere isolierte Instanzen von mongodbauf einer Maschine? Wie kann ich es tun?

OM Nom Nom
quelle

Antworten:

14

Ja, Sie können dies tun, indem Sie unterschiedliche Portnummern und Datenverzeichnisse für die anderen Instanzen von mongodangeben und dann die neue Portnummer im Client angeben.

Beispielsweise:

./mongod --dbpath /foo/bar/otherpath --port some_other_port

Sie können bei Bedarf auch die Portnummern des Shard-Servers und des Konfigurationsservers ändern .

dsolimano
quelle
1
Ist es möglich, dies in mongodb.conf anzugeben? Oder müsste ich dafür ein Skript erstellen? (auf * nix)
Justin
@ Justin, Sie können diese Optionen sicherlich in einer Konfigurationsdatei angeben - siehe mongodb.org/display/DOCS/File+Based+Configuration . Dann müssen Sie jedoch noch verschiedene Konfigurationsdateien an die verschiedenen Instanzen übergeben.
Dsolimano
Danke @dsolimano, ich habe zwei Skripte in rc.d für zwei Instanzen von Mongo. Ich habe verschiedene Pfade für die Datenbank, die PID und die Protokollierung angegeben und ihnen verschiedene Ports zum Abhören gegeben. Es wird auch gegabelt, und wenn das zweite Skript ausgeführt wird, schlägt es fehl, da Mongo bereits ausgeführt wird (die erste Instanz). Ich denke also, meine eigentliche Frage war (ich hatte nicht viel Glück, dies im Web zu finden), ob zwei gegabelte Instanzen gleichzeitig ausgeführt werden können. Vielen Dank
Justin
@ Justin, ich denke, dies steigt wahrscheinlich auf das Niveau einer neuen Frage, vielleicht sollten Sie es auf dieser Seite stellen? Es hört sich so an, als ob etwas an der Art und Weise, wie Sie Mongo starten, ein Problem verursacht.
Dsolimano
3

Die Schritte, die ich unternommen habe, sind:

  1. Kopieren Sie die conf-Datei /etc/mongod.conf nach mongod2.conf und auch nach mongod3.conf
  2. Bearbeiten Sie conf-Dateien so, dass sie unterschiedliche Ports und unterschiedliche Datenbankpfade haben
  3. Kopieren Sie init.d start script /etc/init.d/mongod nach mongod2 und auch nach mongod3
  4. Kopieren Sie das binäre Mongod / usr / bin / mongod nach / usr / bin / mongod2 und auch nach / usr / bin / mongod3
  5. Bearbeiten Sie die Startskripte von init.d und ändern Sie Folgendes:

    CONFIGFILE = "/ etc / mongod2.conf" (mongod3.conf)

    ....

    mongod = $ {MONGOD- / usr / bin / mongod2} (mongod3)

Ersetzt / var / lock / subsys / mongod durch / var / lock / subsys / mongod2 (jeweils mongod3), wo immer ich es gefunden habe.

Widerstehen Sie der Versuchung, mongod.lock durch mongod2.lock (oder mongod3.lock) zu ersetzen. Sie befinden sich in verschiedenen Ordnern (Datenbankordner sind unterschiedlich) und führen nicht zu Konflikten.

Jetzt kann ich

service mongod start|stop|status

service mongod2 start|stop|status

service mongod3 start|stop|status

und auch

mongo --port <port_number> 

für jede Mongo-Instanz (merken Sie sich die Porteinstellungen aus den conf-Dateien)

Mir sind keine Nebenwirkungen beim Umbenennen der Mongod-Binärdatei bekannt.

Hoffe das hilft.

[Später bearbeiten] Um die Instanzen automatisch zu starten, ln -s /etc/init.d/mongod2 /etc/rc.d/rc3.d/S86mongod und ln -s /etc/init.d/mongod3 / etc / rc .d / rc3.d / S87mongod :)

aemilianvs
quelle
Ah Netter! habe genau das gleiche ohne viel Glück gemacht, weil ich nicht dachte, wir sollten auch die ausführbare Mongod-Datei selbst duplizieren. Alles gut jetzt.
Bach
In meinem Fall Ubuntu 16.01gab es mit keine init.dSkripte. Können Sie Skriptinhalte bereitstellen init.d?
Shubham A.