sql >> Base de Datos >  >> NoSQL >> MongoDB

Instalación/configuración de Mongos en Elastic Beanstalk

Creé una carpeta llamada ".ebextensions" y un archivo llamado "aws.config". El contenido de este archivo es el siguiente:-

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

Lo que hace este archivo es:-

  • Crea un archivo "mongodb.repo" (ver http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).

Ejecuta 4 comandos de contenedor (estos se ejecutan después de que se crea el servidor pero antes de que se implemente WAR. Estos son:-

  1. Habilite el acceso a la raíz:esto es necesario para los comandos "sudo" afaik.
  2. Instalar Mongo:instala mongo como un servicio usando el comando yum. Solo necesitamos "mongos", pero aún no se ha separado del servidor mongo. Esto puede cambiar en el futuro.
  3. Cambie la configuración de mongod a "apagado":esto significa que si el servidor se reinicia, el programa mongod no se ejecuta si el servidor se reinicia.
  4. Crear script para ejecutar mongos. Tenga en cuenta los $MONGO_CONFIG_IPS en el paso 4, puede pasarlos usando la página de configuración en Elastic Beanstalk. Esto se ejecutará al reiniciar el servidor.
  5. Establecer permisos para ejecutar. Esta razón por la que hice 4/5 en lugar de poner en una sección de archivos:es que no creó las direcciones IP de la variable de entorno.
  6. Ejecute el script creado en el paso 4.

Esto funciona para mí. Mi archivo WAR simplemente se conecta a localhost y todo el tráfico pasa por el enrutador. Me tropecé con esto durante un par de días ya que la documentación es bastante escasa tanto en Amazon AWS como en MongoDB.

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

ACTUALIZAR :- Si tiene problemas con mi respuesta anterior, intente lo siguiente:funciona para la versión 3 de Mongo y actualmente se usa en nuestro clúster de producción MongoDB.

Esta versión es más avanzada porque utiliza DNS interno (a través de AWS Route53):tenga en cuenta el mongo-cfg1.internal ... . Estas son las mejores prácticas recomendadas y vale la pena configurar su zona privada usando Route53. Esto significa que si hay un problema con una de las instancias de configuración de MongoDB, puede reemplazar la instancia rota y actualizar la dirección IP privada en Route53; no se requieren actualizaciones en cada beanstalk elástico, lo cual es realmente genial. Sin embargo, si no desea crear una zona, simplemente puede insertar las direcciones IP en configDB atributo (como mi primer ejemplo).

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