Plusieurs Mongos sur un serveur

11

Je ne parle pas de sharding . Nous avions un serveur de test (Linux) et il y en a déjà un mongoqui appartient à un autre projet / sous-groupe. Est-il possible d'exécuter plusieurs instances isolées de mongodbsur une seule machine? Comment puis-je le faire?

Om Nom Nom
la source

Réponses:

14

Oui, vous pouvez le faire en spécifiant différents numéros de port et répertoires de données pour les autres instances de mongod, puis en spécifiant le nouveau numéro de port dans le client.

Par exemple:

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

Vous pouvez également modifier les numéros de port du serveur de partition et du serveur de configuration si vous en avez besoin.

dsolimano
la source
1
Est-il possible de spécifier cela dans mongodb.conf? Ou devrais-je créer un script pour ce faire? (sur * nix)
Justin
@Justin, vous pouvez certainement spécifier ces options dans un fichier de configuration - voir mongodb.org/display/DOCS/File+Based+Configuration . Mais ensuite, vous devez toujours transmettre différents fichiers de configuration aux différentes instances.
dsolimano
Merci @dsolimano, j'ai deux scripts dans rc.d pour deux instances de Mongo. J'ai spécifié différents chemins pour le db, le pid, la journalisation et leur ai donné différents ports pour écouter. Il est également en cours de fork, et lorsque le deuxième script s'exécute, il échoue car mongo est déjà en cours d'exécution (la première instance). Donc, je suppose que ma vraie question était (je n'ai pas eu beaucoup de chance de trouver cela sur le Web): pouvez-vous avoir deux instances fourchues en cours d'exécution en même temps? Merci
Justin
@Justin, je pense que cela s'élève probablement au niveau d'une nouvelle question, peut-être devriez-vous la poser sur ce site? Il semble que la façon dont vous démarrez Mongo cause un problème.
dsolimano
3

Les mesures que j'ai prises sont les suivantes:

  1. Copiez le fichier conf /etc/mongod.conf dans mongod2.conf et également dans mongod3.conf
  2. Modifier les fichiers de conf pour avoir différents ports et différents chemins de base de données
  3. Copiez le script de démarrage init.d /etc/init.d/mongod vers mongod2 et également vers mongod3
  4. Copiez le mongod binaire / usr / bin / mongod dans / usr / bin / mongod2 et également dans / usr / bin / mongod3
  5. Modifiez les scripts de démarrage init.d et avez modifié les éléments suivants:

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

    ....

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

Remplacé / var / lock / subsys / mongod par / var / lock / subsys / mongod2 (mongod3, respectivement) partout où je l'ai trouvé.

Résistez à la tentation de remplacer mongod.lock par mongod2.lock (ou mongod3.lock, respectivement). Ils se trouvent dans différents dossiers (les dossiers de base de données sont différents) et ne seront pas en conflit.

Maintenant je peux

service mongod start|stop|status

service mongod2 start|stop|status

service mongod3 start|stop|status

et aussi

mongo --port <port_number> 

pour chaque instance de mongo (rappelez-vous les paramètres de port des fichiers conf)

Je ne connais aucun effet secondaire de renommer le binaire mongod ..

J'espère que cela t'aides.

[Édition ultérieure] Pour démarrer les instances automatiquement, il suffit de ln -s /etc/init.d/mongod2 /etc/rc.d/rc3.d/S86mongod et ln -s /etc/init.d/mongod3 / etc / rc .d / rc3.d / S87mongod :)

aemilianvs
la source
Ah bien! a fait exactement la même chose sans beaucoup de chance avant parce que je ne pensais pas que nous devrions également dupliquer l'exécutable mongod lui-même. Tout va bien maintenant.
Bach
Dans mon cas, en utilisant Ubuntu 16.01, il n'y avait pas de init.dscripts. Pouvez-vous fournir du init.dcontenu de script?
Shubham A.