MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Installation/Einrichtung von Mongos in Elastic Beanstalk

Ich habe einen Ordner namens „.ebextensions“ und eine Datei namens „aws.config“ erstellt. Der Inhalt dieser Datei ist wie folgt:-

files: 
  "/etc/yum.repos.d/mongodb.repo":
    mode: "000644"
    content: |
      [MongoDB]
      name=MongoDB Repository
      baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
      gpgcheck=0
      enabled=1
container_commands:
  01_enable_rootaccess:
    command: echo Defaults:root \!requiretty >> /etc/sudoers
  02_install_mongo:
    command: yum install -y mongo-10gen-server
    ignoreErrors: true
  03_turn_mongod_off:
    command: sudo chkconfig mongod off
  04_create_mongos_startup_script:
    command: sudo sh -c "echo '/usr/bin/mongos -configdb $MONGO_CONFIG_IPS -fork -logpath /var/log/mongo/mongos.log --logappend' > /etc/init.d/mongos.sh"
  05_update_mongos_startup_permissions:
    command: sudo chmod +x /etc/init.d/mongos.sh
  06_start_mongos:
    command: sudo bash /etc/init.d/mongos.sh

Diese Datei macht Folgendes:-

  • Erzeugt eine "mongodb.repo"-Datei (siehe http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).

Führt 4 Containerbefehle aus (diese werden ausgeführt, nachdem der Server erstellt wurde, aber bevor die WAR-Datei bereitgestellt wird. Diese sind:-

  1. Root-Zugriff aktivieren - dies ist für "sudo"-Befehle erforderlich.
  2. Mongo installieren – Installieren Sie Mongo als Dienst mit dem Befehl yum. Wir brauchen nur "mongos", aber das wurde noch nicht vom Mongo-Server getrennt. Dies kann sich in Zukunft ändern.
  3. Ändere die Konfiguration für mongod auf "off" - das bedeutet, wenn der Server neu startet, wird das mongod-Programm nicht ausgeführt, wenn der Server neu startet.
  4. Erstellen Sie ein Skript, um Mongos auszuführen. Beachten Sie die $MONGO_CONFIG_IPS in Schritt 4, Sie können diese über die Konfigurationsseite in Elastic Beanstalk übergeben. Dies wird bei einem Serverneustart ausgeführt.
  5. Zur Ausführung Berechtigungen festlegen. Aus diesem Grund habe ich 4/5 gemacht, anstatt sie in einen files:-Abschnitt zu stecken, weil die IP-Adressen nicht aus der Umgebungsvariable erstellt wurden.
  6. Führen Sie das in Schritt 4 erstellte Skript aus.

Das funktioniert für mich. Meine WAR-Datei stellt einfach eine Verbindung zu localhost her und der gesamte Datenverkehr geht über den Router. Ich bin ein paar Tage darüber gestolpert, da die Dokumentation sowohl in Amazon AWS als auch in MongoDB ziemlich dünn ist.

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

AKTUALISIEREN :- Wenn Sie Probleme mit meiner alten Antwort haben, versuchen Sie bitte Folgendes - sie funktioniert für Version 3 von Mongo und wird derzeit in unserem Produktions-MongoDB-Cluster verwendet.

Diese Version ist dahingehend fortgeschrittener, dass sie internes DNS (über AWS Route53) verwendet – beachten Sie mongo-cfg1.internal ... . Dies sind empfohlene Best Practices und es lohnt sich, Ihre private Zone mit Route53 einzurichten. Das bedeutet, wenn es ein Problem mit einer der MongoDB-Konfigurationsinstanzen gibt, können Sie die defekte Instanz ersetzen und die private IP-Adresse in Route53 aktualisieren – es sind keine Aktualisierungen in jedem Elastic Beanstalk erforderlich, was wirklich cool ist. Wenn Sie jedoch keine Zone erstellen möchten, können Sie die IP-Adressen einfach in configDB einfügen Attribut (wie mein erstes Beispiel).

files: 
  "/etc/yum.repos.d/mongodb.repo":
    mode: "000644"
    content: |
      [mongodb-org-3.0]
      name=MongoDB Repository
      baseurl=http://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.0/x86_64/
      gpgcheck=0
      enabled=1
  "/opt/mongos.conf":
    mode: "000755"
    content: |
      net:
        port: 27017
      operationProfiling: {}
      processManagement:
        fork: "true"
      sharding:
        configDB: mongo-cfg1.internal.company.com:27019,mongo-cfg2.internal.company.com:27019,mongo-cfg3.internal.company.com:27019
      systemLog:
        destination: file
        path: /var/log/mongos.log
container_commands:
  01_install_mongo:
    command: yum install -y mongodb-org-mongos-3.0.2
    ignoreErrors: true
  02_start_mongos:
    command: "/usr/bin/mongos -f /opt/mongos.conf > /dev/null 2>&1 &"