sql >> データベース >  >> NoSQL >> MongoDB

セルフホストのMongoDB

    たとえば、信頼できるクラウドサービスプロバイダーでMongoDBをホストしているのは、アイデアに集中し、ネットワーキング、ストレージ、アクセスなどのすべての微妙なキー管理領域を委任したいからです。

    あなたの小さなアイデアがビジネスに変わり始め、コストが急騰し始めるまで、それはすべて最初は良さそうです。そうでない場合でも、この投稿では、セルフホストソリューションに移行する場合に関連する技術的な複雑さ(および節約された費用)の概要を説明します。

    ところで、私たちはどのくらいの節約について話しているのですか? アトラスを簡単に比較してみましょう インスタンスとAWS上の自己ホスト型MongoDB 。

    アトラス(〜$ 166 /月)

    上記で選択した要件に基づいて$0.23/時間(〜cloud.mongodb.com)



    AWS(〜$ 36 /月)

    インスタンスの場合は1時間あたり0.0416ドル、EBSタイプとストレージに基づく追加料金(〜calculator.aws)

    インフラストラクチャだけで約4.5倍の節約になります!

    主な理由がわかったので、この投稿をまだ読んでいますが、これ以上苦労することなく、技術に飛び込みましょう。

    概要

    1. インフラストラクチャのセットアップ
    2. MongoDBのセットアップ
    3. 一括移行
    4. 接続スイッチのレイテンシーをブリッジするためのDelta-sync(古いクラスターには適用されません)

    コンテンツ全体が1つの場所で少し疲れる可能性があるため、これを2つの関連する投稿に分割します。

    1。インフラストラクチャのセットアップ

    RedHat Enterprise Linux 8を実行するインスタンスをセットアップするためのガイドの下で言及します AWSで。これは、MongoDBが一般的にxfsファイルシステムでより優れたパフォーマンスを発揮するためです。これをよりよく理解するための記事があります。

    EC2インスタンスをスピンアップ

    t3.smallを使用しました 2つのvCPUが付属するインスタンス および2GbのRAM 任意のインスタンスを選択できますが。

    DBは少なくとも1GBのRAMにアクセスできるようにすることをお勧めします および2つの実際のコア これは、デフォルトのエンジン WiredTigerによって処理されるキャッシュおよび同時実行メカニズム中のパフォーマンスに直接影響するためです。 。 RAMとCPUの要件に関連する本番環境に関する注意事項について詳しくは、こちらをご覧ください。 。

    構成の概要:

    • OS: Redhat Enterprise Linux 8(x64 Intelベース)
    • インスタンスタイプ: t3.small
    • ストレージ: 10GB (os)+ 30GB (データ)+ 3GB (ログ) EBS つまり、3つの別々のボリューム

    AWSでのVMの作成に精通していることを前提としています。

    ここで、インスタンスが実行状態になったら、 Elastic IPを割り当てます。 それにアクセスしてから、マシンにリモートログインするだけです。

    エラスティックIPが必要です インスタンスのパブリックホスト名を設定するには

    $ ssh -i <PEM_FILE> ec2-user@<ELASTIC_IP>

    追加のボリュームをマウントする

    まだマウントされていないデータとログのルートFS以外に2つのEBSボリュームを追加しました( 30Gbと3Gbを覚えていますか? )。

    を使用してボリュームブロックを一覧表示できます。
    $ sudo lsblk

    追加のボリュームは、ルートブロックの直後に一覧表示されます(矢印を参照)

    上の画像では、追加のボリュームに名前が付けられていることがわかります

    1. xvdb (データを保存するための30Gbスペース)
    2. xvdc (ログを保存するための3Gbスペース)

    それでは、これらのボリュームにファイルシステムを作成しましょう。

    $ sudo mkfs.xfs -L mongodata /dev/xvdb
    $ sudo mkfs.xfs -L mongologs /dev/xvdc

    -L ボリュームラベルを設定するためのエイリアスオプションです

    次に、ボリュームをマウントします。

    $ sudo mount -t xfs /dev/xvdb /var/lib/mongo
    $ sudo mount -t xfs /dev/xvdc /var/log/mongodb

    これらの変更を反映するには、システムを再起動する必要があります。したがって、意図しない再起動が発生した場合にデータベースストレージが失われないように、パーティションの永続性も必要になります。

    これは、fstabファイルでマウントルールを指定することで実現できます。詳細については、こちらをご覧ください。

    その前に、上記のパーティションのUUIDをコピーしましょう(これらは一意であり、システムの再起動時に変更されないため

    $ sudo blkid

    / dev / xvdbにリストされているUUIDをコピーします および/dev / xvdc 「LABEL」を参照してください ブロック識別用

    次に、/etc/fstabを開きます 次の形式で構成をファイルして貼り付けます。

    UUID=<COPIED_UUID_FOR_DATA> /var/lib/mongo xfs defaults,nofail 0 0
    UUID=<COPIED_UUID_FOR_LOGS> /var/log/mongodb xfs defaults,nofail 0 0

    ホスト名を更新

    ホスト名は、ネットワーク上のデータベースサーバーを識別するために使用されます。上記で割り当てられたElasticIPのいずれかを使用できます またはドメイン名(利用可能な場合)。 /etc/hostnameを開きます ファイルを作成し、エントリを追加します。例:

    ip-xx.us-east-2.compute.internal **<ELASTIC_IP> <DOMAIN_1> <DOMAIN_2>** ...

    プロセス制限の更新(オプション)

    これは、システムを安定させたまま、許容可能な接続の最大数を制御するためにオプションで必要です。/etc/security/limits.confを開きます。 ファイルを作成し、次のエントリを追加します。

    * soft nofile 64000
    * hard nofile 64000
    * soft nproc 32000
    * hard nproc 32000

    インフラ関連の前提条件がすべて並べ替えられたので、再起動 インスタンスを作成し、MongoDBのインストールに進みましょう。

    1。 MongoDBのセットアップ

    リポジトリソースを追加

    ファイル/etc/yum.repos.d/mongodb-org.4.2.repoを作成します 次のパッケージリポジトリの詳細を追加します。

    [mongodb-org-4.2]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

    それでは、MongoDBをインストールしましょう。

    $ sudo yum -y install mongodb-org

    ディレクトリの作成と権限の設定

    MongoDBはデフォルトで、次のパスを使用してデータと内部ログを保存します。

    / var / lib / mongo →データ
    / var / log / mongodb →ログ

    ディレクトリを作成する

    $ sudo mkdir /var/lib/mongo
    $ sudo mkdir /var/log/mongodb

    ユーザーとグループの権限を変更する

    $ sudo chown mongod:mongod /var/lib/mongo
    $ sudo chown mongod:mongod /var/log/mongod

    管理者ユーザーを作成する

    mongodデーモン/サービス ユーザーの作成に進む前に、最初に実行する必要があります。デフォルトの構成(/etc/mongod.confに保存されている)を使用しましょう。 )今のところ、デーモンプロセスを開始します。

    $ sudo -u mongod mongod -f /etc/mongod.conf

    上記のコマンドは、mongodデーモンをフォークモード(デフォルト)で起動します。

    それでは、サーバーにログインして、最初の管理者ユーザーを作成しましょう。

    モンゴシェルを開く

    $ mongo

    「admin」データベースを使用してroot-adminを作成します

    > use admin

    管理者ユーザーを作成する

    > db.createUser({user: "admin", pwd: "password", roles: [{role: "root", db: "admin"}]})

    通常のユーザーを作成する

    > db.createUser({user: "normal_user", pwd: "password", roles: [{role: "readWriteAnyDatabase", db: "admin"}]})

    今のところサーバーをシャットダウンします。変更した構成で再起動します

    > db.shutDownServer()

    認証の設定

    ここでは、データベース認証を有効にし、サーバーのバインドアドレスをパブリックドメインでアクセスできるように変更します。/etc/mongod.confを開きます。 以下の変更を加えます。

    # network interfaces
    net:
      port: 27017
      bindIp: 0.0.0.0 # accessible on the network address
    security:
      authorization: enabled # creds will be required for making db operations

    構成を保存して再起動 サーバー。

    $ sudo -u mongod mongod -f /etc/mongod.conf

    テストログイン

    クレデンシャルが機能するかどうかは、

    を使用して確認できます。
    $ mongo -u admin -p password

    これで初期設定は終わりです。詳細な移行プロセスとDBの本番環境を維持するためのヒントに関する次の関連記事にご期待ください。

    P.S.この投稿のキュレーションを手伝ってくれたPiyushKumarに感謝します!


    1. AWS管理:MongoDBホスティングコストを30%節約する方法

    2. JavaScriptを介してMongoDBに直接アクセスする

    3. コレクションからMongoDBプル配列要素

    4. (ノード:3341)非推奨警告:マングース:mpromise