MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Instalação/configuração do Mongos no Elastic Beanstalk


Criei uma pasta chamada ".ebextensions" e um arquivo chamado "aws.config". O conteúdo deste arquivo é o seguinte:-
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

O que este arquivo faz é:-
  • Cria um arquivo "mongodb.repo" (consulte http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/).

Executa 4 comandos de contêiner (esses são executados após a criação do servidor, mas antes da implantação do WAR. São eles:-
  1. Ative o acesso root - isso é necessário para os comandos "sudo" afaik.
  2. Instalar o Mongo - instale o mongo como um serviço usando o comando yum. Precisamos apenas de "mongos", mas isso ainda não foi separado do servidor mongo. Isso pode mudar no futuro.
  3. Altere a configuração do mongod para "off" - isso significa que, se o servidor reiniciar, o programa mongod não será executado se o servidor reiniciar.
  4. Crie um script para executar mongos. Observe o $MONGO_CONFIG_IPS na etapa 4, você pode passá-los usando a página de configuração no Elastic Beanstalk. Isso será executado na reinicialização do servidor.
  5. Defina permissões para executar. Esses motivos que eu fiz 4/5 em vez de colocar em arquivos:seção é que ele não criou os endereços IP da variável de ambiente.
  6. Execute o script criado na etapa 4.

Isso funciona para mim. Meu arquivo WAR simplesmente se conecta ao localhost e todo o tráfego passa pelo roteador. Eu tropecei por alguns dias sobre isso, pois a documentação é bastante escassa tanto no Amazon AWS quanto no MongoDB.

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

ATUALIZAÇÃO :- Se você estiver tendo problemas com minha resposta antiga, tente o seguinte - funciona para a versão 3 do Mongo e atualmente está sendo usado em nosso cluster MongoDB de produção.

Esta versão é mais avançada, pois usa DNS interno (via AWS Route53) - observe o mongo-cfg1.internal ... . Essas são as melhores práticas recomendadas e vale a pena configurar sua zona privada usando o Route53. Isso significa que, se houver um problema com uma das instâncias do MongoDB Config, você poderá substituir a instância quebrada e atualizar o endereço IP privado no Route53 - não são necessárias atualizações em cada beanstalk elástico, o que é muito legal. No entanto, se você não quiser criar uma zona, basta inserir os endereços IP em configDB atributo (como meu primeiro exemplo).
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 &"