9

シャーディングについては、複数の mongos インスタンスを使用できるようにしたいと考えています。各アプリケーション サーバーに mongos を配置することをお勧めします。独自のサーバーで負荷分散するだけだと思っていましたが、この記事http://craiggwilson.com/2013/10/21/load-balanced-mongos/は、これに問題があることを示しています。

だから私はそれをアプリケーションサーバーに置くことに戻りました。ただし、Elastic Beanstalk を使用しています。これにパッケージ インストールとして Mongo をインストールできます。ただし、これにより Mongos で問題が発生します。mongodb.conf ファイルを使用して mongos を起動する方法を見つけることができませんでした。レプリケートされたサーバーまたは構成サーバーの場合、conf ファイルにエントリを追加すると、希望どおりに起動する可能性があります。しかし、Mongos ではそれができません。Mongo をインストールすると、実際には mongodb として起動します。その動作を停止し、設定サーバーを指し示す Mongos として開始する必要があります。

私が考えることができるのは次のとおりです。

データベースを「通常」モードで自動起動するmongodb起動スクリプトを強制終了します。構成サーバーを指す、mongos を起動する新しい upstart スクリプトを作成します。

これについて何か考えはありますか?または、私が単に鈍感であるかどうかを知っている人はいますか?新しいmongodb.confファイルをBeanstalkにコピーして、サーバーをmongosとして起動できますか?

すぐにこれを行う予定はありませんが、部品が揃っていないかのように、事後に豆の木サーバーを完全に再構築する必要があるため、ある程度準備する必要があります. すべてのソフトウェアがインストールされた状態で、すぐに展開したいと思います。

4

2 に答える 2

29

「.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 がデプロイされる前に実行されます。これらは次のとおりです。

  1. root アクセスを有効にします。これは、「sudo」コマンドの場合に必要です。
  2. Mongo のインストール - yum コマンドを使用して、mongo をサービスとしてインストールします。「mongos」だけが必要ですが、これはまだmongoサーバーから分離されていません。これは将来変更される可能性があります。
  3. mongod の構成を「オフ」に変更します。これは、サーバーが再起動した場合に mongod プログラムが実行されないことを意味します。
  4. mongos を実行するスクリプトを作成します。ステップ 4 の $MONGO_CONFIG_IPS に注意してください。これらは、Elastic Beanstalk の設定ページを使用して渡すことができます。これは、サーバーの再起動時に実行されます。
  5. 実行する権限を設定します。これらの理由は、files: セクションに入れるのではなく、環境変数から IP アドレスを作成しなかったことです。
  6. 手順 4 で作成したスクリプトを実行します。

これは私にとってはうまくいきます。私の WAR ファイルは単純に localhost に接続し、すべてのトラフィックはルーターを通過します。ドキュメントはAmazon AWSとMongoDBの両方でかなりスリムであるため、私はこれについて数日間つまずきました.

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


更新: - 私の古い回答に問題がある場合は、次のことを試してください - Mongo のバージョン 3 で動作し、現在、実稼働の MongoDB クラスターで使用されています。

このバージョンは、mongo-cfg1.internal ... (AWS Route53 経由で) 内部 DNS を使用するという点でより高度です - . これは推奨されるベスト プラクティスであり、Route53 を使用してプライベート ゾーンを設定する価値があります。これは、MongoDB Config インスタンスの 1 つに問題がある場合、壊れたインスタンスを置き換えて、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 &"
于 2013-11-14T16:32:04.803 に答える
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']
于 2015-10-31T06:59:54.763 に答える