Mongos在Elastic Beanstalk中安装/设置

Car*_*ter 9 mongodb amazon-elastic-beanstalk

在分片的道路上,我们希望能够有多个mongos实例.建议似乎是将mongos放在每个应用程序服务器上.我以为我只是在他们自己的服务器上对它们进行负载平衡,但是这篇文章http://craiggwilson.com/2013/10/21/load-balanced-mongos/表明这有问题.

所以我回到应用程序服务器上.但是,我们正在使用Elastic Beanstalk.我可以在安装程序包上安装Mongo.但是,这会给Mongos带来问题.我无法找到如何让mongos启动使用mongodb.conf文件.对于复制的服务器或配置服务器,conf文件中的其他条目可以使其以我想要的方式启动.但我不能和蒙古人那样做.如果我安装Mongo,它实际上是以mongodb启动的.我需要消除这种行为,并让它以Mongos开始,指向我的配置服务器.

我能想到的只有:

杀死mongodb启动脚本,以"正常"模式自动启动数据库.创建一个启动mongos的新的upstart脚本,指向配置服务器.

有什么想法吗?或者有人知道我是否只是迟钝,我可以将一个新的mongodb.conf文件复制到beanstalk上,它将以mongos的形式启动服务器?

我们并没有计划这样做,但我们需要做一些准备,好像我没有这些部分,我需要在事后完全重建我的beanstalk服务器.在安装了所有软件的情况下,我宁愿准备好部署.

bob*_*sie 28

我创建了一个名为".ebextensions"的文件夹和一个名为"aws.config"的文件.该文件的内容如下: -

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
Run Code Online (Sandbox Code Playgroud)

这个文件的作用是: -

运行4个容器命令(这些命令在创建服务器之后但在部署WAR之前运行.这些命令是: -

  1. 启用root访问权限 - 这是"sudo"命令afaik所必需的.
  2. 安装Mongo - 使用yum命令将mongo安装为服务.我们只需要"mongos"但这还没有从mongo服务器中分离出来.这可能在将来发生变化.
  3. 将mongod的配置更改为"off" - 这意味着如果服务器重新启动,如果服务器重新启动,则不会运行mongod程序.
  4. 创建运行mongos的脚本.注意步骤4中的$ MONGO_CONFIG_IPS,您可以使用Elastic Beanstalk中的配置页面传递这些内容.这将在服务器重启时运行.
  5. 设置要执行的权限.这些原因我做了4/5而不是放入文件:部分是它没有从环境变量创建IP地址.
  6. 运行在步骤4中创建的脚本.

这适合我.我的WAR文件只是连接到localhost,所有流量都通过路由器.由于Amazon AWS和MongoDB的文档相当薄弱,我偶然发现了几天.

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


更新: - 如果您的旧答案有问题,请尝试以下内容 - 它适用于Mongo的第3版,目前正在我们的生产MongoDB集群中使用.

此版本更先进,因为它使用内部DNS(通过AWS Route53) - 请注意mongo-cfg1.internal ....这是建议的最佳做法,非常值得使用Route53设置您的私有区域.这意味着如果其中一个MongoDB配置实例出现问题,您可以替换损坏的实例并更新Route53中的私有IP地址 - 每个弹性beanstalk都不需要更新,这非常酷.但是,如果您不想创建区域,只需在configDB属性中插入IP地址(就像我的第一个示例).

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 &"
Run Code Online (Sandbox Code Playgroud)

  • 很好地发现了CargoMeister,我已经更新了第4步(并创建了另一个步骤5和6),因此它在init.d文件夹中创建了一个新的脚本文件(非常hacky).另一种方法是使用rc.local. (2认同)

Eri*_*ulz 6

我无法获得@ bobmarksie的解决方案,但感谢anowak和avinci 在这里为这个.ebextensions/aws.config文件:

files:
  "/home/ec2-user/install_mongo.sh" :
    mode: "0007555"
    owner: root
    group: root
    content: |
      #!/bin/bash
      echo "[MongoDB]
      name=MongoDB Repository
      baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
      gpgcheck=0
      enabled=1" | tee -a /etc/yum.repos.d/mongodb.repo
      yum -y update
      yum -y install mongodb-org-server mongodb-org-shell mongodb-org-tools

commands:
  01install_mongo:
    command: ./install_mongo.sh
    cwd: /home/ec2-user
    test: '[ ! -f /usr/bin/mongo ] && echo "MongoDB not installed"'

services:
  sysvinit:
    mongod:
      enabled: true
      ensureRunning: true
      commands: ['01install_mongo']
Run Code Online (Sandbox Code Playgroud)