sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongos Installation/Setup i Elastic Beanstalk

Jag skapade en mapp som heter ".ebextensions" och en fil som heter "aws.config". Innehållet i denna fil är som följer:-

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

Vad den här filen gör är:-

  • Skapar en "mongodb.repo"-fil (se http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).

Kör 4 containerkommandon (dessa körs efter att servern skapats men innan WAR distribueras. Dessa är:-

  1. Aktivera root-åtkomst - detta krävs för "sudo"-kommandon afaik.
  2. Installera Mongo - installera mongo som en tjänst med kommandot yum. Vi behöver bara "mongos" men detta har ännu inte separerats från mongoservern. Detta kan ändras i framtiden.
  3. Ändra config för mongod till "off" - detta betyder att om servern startar om så körs inte mongod-programmet om servern startar om.
  4. Skapa skript för att köra mongos. Notera $MONGO_CONFIG_IPS i steg 4, du kan skicka in dessa med hjälp av konfigurationssidan i Elastic Beanstalk. Detta kommer att köras vid en omstart av servern.
  5. Ange behörigheter för att köra. Dessa anledningar till att jag gjorde 4/5 i motsats till att lägga in i en fil:avsnitt är att det inte skapade IP-adresserna från miljövariabeln.
  6. Kör skriptet som skapades i steg 4.

Det här fungerar för mig. Min WAR-fil ansluter helt enkelt till localhost och all trafik går genom routern. Jag snubblade runt i ett par dagar på detta eftersom dokumentationen är ganska smal i både Amazon AWS och MongoDB.

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

UPPDATERA :- Om du har problem med mitt gamla svar, försök med följande - det fungerar för version 3 av Mongo och används för närvarande i vårt produktions MongoDB-kluster.

Den här versionen är mer avancerad genom att den använder intern DNS (via AWS Route53) - observera mongo-cfg1.internal ... . Detta är rekommenderade bästa praxis och väl värt att ställa in din privata zon med hjälp av Route53. Detta innebär att om det finns ett problem med en av MongoDB Config-instanserna kan du ersätta den trasiga instansen och uppdatera den privata IP-adressen i Route53 - inga uppdateringar krävs i varje elastisk bönstjälk vilket är riktigt coolt. Men om du inte vill skapa en zon kan du helt enkelt infoga IP-adresserna i configDB attribut (som mitt första exempel).

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


  1. Heroku Custom Domain fungerar inte

  2. gör om HLL för många falska positiva

  3. MongoDB $inc

  4. Hur returnerar man Mongoose-resultat från hittametoden?