開発者ドキュメント

UbuntuVPSのMongoDBにレプリケーションセットを実装する方法

ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章


MongoDBは、非常に人気のあるNoSQLデータベースです。 多くの場合、アプリケーションデータとWebサイト情報を保存および管理するために使用されます。 MongoDBは、動的なスキーマ設計、簡単なスケーラビリティ、およびプログラムで簡単にアクセスできるデータ形式を誇っています。

このガイドでは、データの高可用性を確保し、堅牢なフェイルオーバーシステムを作成するために、データレプリケーションを設定する方法について説明します。 これは、データベースのダウンが組織やビジネスに悪影響を与える可能性がある本番環境では重要です。

システムにMongoDBがすでにインストールされていることを前提としています。 Ubuntu 12.04 にMongoDBをインストールする方法については、ここをクリックしてください。

MongoDBレプリケーションセットとは何ですか?


MongoDBは、「レプリケーションセット」と呼ばれる実装を通じてレプリケーションを処理します。 基本的な形式のレプリケーションセットは、マスタースレーブ構成のノードにいくぶん似ています。 単一のプライマリメンバーは、セカンダリメンバーに変更を適用するためのベースとして使用されます。

レプリケーションセットとマスタースレーブレプリケーションの違いは、プライマリメンバーが使用できなくなった場合に備えて、レプリケーションセットに固有の自動フェイルオーバーメカニズムがあることです。

二次メンバーのカスタマイズオプション


すべてのセカンダリメンバーがレプリケーションセットの標準ルールに準拠することを望まない場合があります。 レプリケーションセットには最大12人のメンバーを含めることができ、選挙の状況では最大7人が投票します。

優先度0のレプリケーションメンバー


特定のセットメンバーをプライマリポジションに選出すると、アプリケーションのパフォーマンスに悪影響を与える可能性がある状況がいくつかあります。

たとえば、リモートデータセンターにデータを複製する場合、または特定のメンバーのハードウェアがセットのメインアクセスポイントとして機能するのに不十分な場合、優先度0を設定すると、このメンバーがプライマリにならないようにすることができますが、データのコピーを続行できます。

非表示のレプリケーションメンバー


状況によっては、クライアントがアクセスおよび表示できるメンバーのメインセットを、目的が異なり干渉してはならないバックグラウンドメンバーから分離する必要があります。

たとえば、分析作業のベースとなるセカンダリメンバーが必要な場合があります。これは、最新のデータセットの恩恵を受けますが、作業メンバーに負担をかけることになります。 このメンバーを非表示に設定することにより、レプリケーションセットの一般的な操作に干渉することはありません。

非表示のメンバーは、プライマリメンバーにならないように、必ず優先度0に設定されますが、選挙では投票します。

遅延レプリケーションメンバー


セカンダリメンバーの遅延オプションを設定することにより、セカンダリがプライマリのoplogからコピーする各アクションの実行を待機する時間を制御できます。

これは、誤って削除されないように保護したり、破壊的な操作から回復したりする場合に便利です。 たとえば、セカンダリを半日遅らせた場合、セカンダリはそれ自体のデータセットに対して誤った操作をすぐに実行することはなく、変更を元に戻すために使用される可能性があります。

遅延メンバーはプライマリメンバーになることはできませんが、選挙に投票することはできます。 ほとんどの場合、プロセスが古いデータを読み取らないように、これらを非表示にする必要があります。

レプリケーションセットを構成する方法


レプリケーションセットを構成する方法を示すために、プライマリと2つのセカンダリを使用して単純なセットを構成します。 これは、フォローするために3つのVPSインスタンスが必要になることを意味します。 Ubuntu12.04マシンを使用します。

セットのメンバーとなる各マシンにMongoDBをインストールする必要があります。 このチュートリアルに従って、 Ubuntu12.04にMongoDBをインストールする方法を学ぶことができます。

3つのサーバーインスタンスすべてにMongoDBをインストールしたら、ドロップレットが相互に通信できるようにいくつかの設定を行う必要があります。

次の手順は、rootユーザーとしてログインしていることを前提としています。

DNS解決を設定する


MongoDBインスタンスが相互に効果的に通信するには、各メンバーの適切なホスト名を解決するようにマシンを構成する必要があります。 これを行うには、各レプリケーションメンバーのサブドメインを構成するか、 /etc/hosts 各コンピューター上のファイル。

長期的にはサブドメインを使用する方がおそらく良いでしょうが、すぐに軌道に乗るために、hostsファイルを介してこれを行います。

間もなく複製される各メンバーで、 /etc/hosts ファイル:

nano /etc/hosts

ローカルホストを構成する最初の行の後に、レプリケーションセットの各メンバーのエントリを追加する必要があります。 これらのエントリは次の形式を取ります。

 IPアドレス mongohost0.example.com

セットのメンバーのIPアドレスは、DigitalOceanコントロールパネルで取得できます。 そのコンピューターのホスト名として選択する名前は任意ですが、わかりやすい名前にする必要があります。

私たちの例では、 /etc/hosts 次のようになります。

 127.0.0.1 localhost mongo0 123.456.789.111  mongo0.example.com  123.456.789.222  mongo1.example.com  123.456.789.333  mongo2.example.com

このファイルは、(ほとんど)セット内のすべてのホストで同じである必要があります。 各メンバーのファイルを保存して閉じます。

次に、これらの新しい変更を反映するようにドロップレットのホスト名を設定する必要があります。 各VPSのコマンドは、その特定のマシンに付けた名前を反映します。 /etc/hosts ファイル。 次のようなコマンドを各サーバーで発行する必要があります。

ホスト名mongo0.example.com

各サーバーでこのコマンドを変更して、選択した名前をファイルに反映させます。

編集します /etc/hostname これも反映するファイル:

 nano / etc / hostname
  mongo0.example.com

これらの手順は、各ノードで実行する必要があります。

MongoDB構成ファイルでレプリケーションの準備をする


MongoDB構成を開始するために最初に行う必要があるのは、各サーバーでMongoDBプロセスを停止することです。

各サーバーで、次のように入力します。

service mongodb stop

次に、データの保存に使用するディレクトリを構成する必要があります。 次のコマンドでディレクトリを作成します。

mkdir /mongo-metadata

データディレクトリが作成されたので、新しいレプリケーションセット構成を反映するように構成ファイルを変更できます。

nano /etc/mongodb.conf

このファイルでは、いくつかのパラメーターを指定する必要があります。 まず、調整します dbpath 作成したディレクトリを指す変数:

dbpath=/mongo-metadata

ポート番号指定の前からコメントを削除して、デフォルトのポートで開始されるようにします。

port = 27017

ファイルの下部に向かって、前のコメントフォームを削除します replSet パラメータ。 この変数の値を、わかりやすい値に変更してください。

replSet = rs0

最後に、サーバーインスタンスを生成した後にシェルを使用できるように、プロセスフォークを作成する必要があります。 これをファイルの最後に追加します。

fork = true

ファイルを保存して閉じます。 次のコマンドを発行して、レプリケーションメンバーを開始します。

mongod --config /etc/mongodb.conf

これらの手順は、レプリケーションセットの各メンバーで繰り返す必要があります。

レプリケーションセットを開始し、メンバーを追加します


これで、レプリケーションセットの各メンバーを構成し、 mongod 各マシンでプロセスを実行すると、レプリケーションを開始して各メンバーを追加できます。

メンバーの1人に、次のように入力します。

mongo

これにより、現在のメンバーのMongoDBプロンプトが表示されます。

次のように入力して、レプリケーションセットを開始します。

rs.initiate()

これにより、レプリケーションセットが開始され、現在接続しているサーバーがセットの最初のメンバーとして追加されます。 次のように入力すると、これを確認できます。

rs.conf()

{
    "_id" : "rs0"
    "version" : 1,
    "members" : [
        {
            "_id" : 0,
            "host" "mongo0.example.com:27017"
        }
    ]
}

これで、ノードに指定したホスト名を参照して、レプリケーションセットにノードを追加できます。 /etc/hosts ファイル:

rs.add("mongo1.example.com")

{ "ok" : 1 }

残りのレプリケーションメンバーごとにこれを実行します。 これで、レプリケーションセットが稼働しているはずです。

結論


データストレージターゲットごとにレプリケーションセットを適切に構成することにより、データベースは、使用不可やハードウェア障害からある程度保護されます。 これは、あらゆる生産システムにとって不可欠です。

レプリケーションセットは、本質的に外部からは見えないため、アプリケーションとのシームレスなインターフェイスを提供します。 すべての複製メカニズムは内部で処理されます。 MongoDBシャーディングの実装を計画している場合は、シャードサーバーコンポーネントごとにレプリケーションセットを実装することをお勧めします。

モバイルバージョンを終了