在分片的路上往下看,我们希望能有多个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服务器。在安装了所有软件的情况下,我宁愿准备好部署。
答案 0 :(得分: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
这个文件的作用是: -
运行4个容器命令(这些命令在创建服务器之后但在部署WAR之前运行。它们是: -
这对我有用。我的WAR文件只是连接到localhost,所有流量都通过路由器。由于亚马逊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 &"
答案 1 :(得分:6)
我无法获得@ bobmarksie的解决方案,但感谢anowak和avinci here对此.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']