MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Installazione/configurazione di Mongos in Elastic Beanstalk

Ho creato una cartella chiamata ".ebextensions" e un file chiamato "aws.config". Il contenuto di questo file è il seguente:-

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

Ciò che fa questo file è:-

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

Esegue 4 comandi contenitore (vengono eseguiti dopo la creazione del server ma prima della distribuzione di WAR. Questi sono:-

  1. Abilita accesso root - questo è richiesto per i comandi "sudo" afaik.
  2. Installa Mongo - installa mongo come servizio usando il comando yum. Abbiamo solo bisogno di "mongos", ma questo non è stato ancora separato dal server mongo. Questo potrebbe cambiare in futuro.
  3. Cambia la configurazione per mongod su "off" - questo significa che se il server si riavvia il programma mongod non viene eseguito se il server si riavvia.
  4. Crea uno script per eseguire mongos. Nota i $MONGO_CONFIG_IPS nel passaggio 4, puoi passarli utilizzando la pagina di configurazione in Elastic Beanstalk. Verrà eseguito al riavvio del server.
  5. Imposta le autorizzazioni per l'esecuzione. Per questo motivo ho fatto 4/5 invece di inserirlo in un file:la sezione è che non ha creato gli indirizzi IP dalla variabile di ambiente.
  6. Esegui lo script creato nel passaggio 4.

Questo funziona per me. Il mio file WAR si collega semplicemente a localhost e tutto il traffico passa attraverso il router. Sono inciampato per un paio di giorni su questo dato che la documentazione è piuttosto scarsa sia in Amazon AWS che in MongoDB.

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

AGGIORNAMENTO :- Se hai problemi con la mia vecchia risposta, prova quanto segue:funziona per la versione 3 di Mongo ed è attualmente utilizzato nel nostro cluster MongoDB di produzione.

Questa versione è più avanzata in quanto utilizza il DNS interno (tramite AWS Route53) - nota il mongo-cfg1.internal ... . Si tratta delle migliori pratiche consigliate e vale la pena configurare la tua zona privata utilizzando Route53. Ciò significa che se si verifica un problema con una delle istanze di MongoDB Config, puoi sostituire l'istanza danneggiata e aggiornare l'indirizzo IP privato in Route53:nessun aggiornamento richiesto in ogni beanstalk elastico, il che è davvero interessante. Tuttavia, se non vuoi creare una zona puoi semplicemente inserire gli indirizzi IP in configDB attributo (come il mio primo esempio).

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