MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Installation/configuration de Mongos dans Elastic Beanstalk

J'ai créé un dossier appelé ".ebextensions" et un fichier appelé "aws.config". Le contenu de ce fichier est le suivant :-

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

Ce que fait ce fichier est :-

  • Crée un fichier "mongodb.repo" (voir http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).

Exécute 4 commandes de conteneur (celles-ci sont exécutées après la création du serveur mais avant le déploiement du WAR. Ce sont :-

  1. Activer l'accès root - ceci est requis pour les commandes "sudo" autant que je sache.
  2. Installer Mongo - installez mongo en tant que service à l'aide de la commande yum. Nous n'avons besoin que de "mongos" mais cela n'a pas encore été séparé du serveur mongo. Cela peut changer à l'avenir.
  3. Modifiez la configuration de mongod sur "off" - cela signifie que si le serveur redémarre, le programme mongod n'est pas exécuté si le serveur redémarre.
  4. Créer un script pour exécuter mongos. Notez les $MONGO_CONFIG_IPS à l'étape 4, vous pouvez les transmettre à l'aide de la page de configuration dans Elastic Beanstalk. Cela s'exécutera lors d'un redémarrage du serveur.
  5. Définir les autorisations d'exécution. C'est pourquoi j'ai fait 4/5 au lieu de mettre dans un fichier :la section est qu'il n'a pas créé les adresses IP à partir de la variable d'environnement.
  6. Exécutez le script créé à l'étape 4.

Cela fonctionne pour moi. Mon fichier WAR se connecte simplement à localhost et tout le trafic passe par le routeur. J'ai trébuché pendant quelques jours là-dessus car la documentation est assez mince à la fois dans Amazon AWS et MongoDB.

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

MISE À JOUR :- Si vous rencontrez des problèmes avec mon ancienne réponse, veuillez essayer ce qui suit - cela fonctionne pour la version 3 de Mongo et est actuellement utilisé dans notre cluster de production MongoDB.

Cette version est plus avancée dans la mesure où elle utilise le DNS interne (via AWS Route53) - notez le mongo-cfg1.internal ... . Il s'agit des meilleures pratiques recommandées et cela vaut la peine de configurer votre zone privée à l'aide de Route53. Cela signifie que s'il y a un problème avec l'une des instances de MongoDB Config, vous pouvez remplacer l'instance cassée et mettre à jour l'adresse IP privée dans Route53 - aucune mise à jour requise dans chaque haricot élastique, ce qui est vraiment cool. Cependant, si vous ne souhaitez pas créer de zone, vous pouvez simplement insérer les adresses IP dans configDB attribut (comme mon premier exemple).

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 &"