MongoDBでゆるふわDB体験

第4回 MongoDBのレプリケーションを構築してみよう

この記事を読むのに必要な時間:およそ 6.5 分

はじめに

今回は,MongoDBのレプリケーションについて説明します。

最初にレプリケーションの概要を説明します。次に実際に構築する手順を説明した後,レプリケーションに必要な設定項目について解説します。最後にMongoDBのレプリケーションで重要な機能であるOplog,書き込み保証などについて解説します。

前回の記事の最後に,シャーディングについて説明すると書きましたが,予定を変更しましてレプリケーションから先に説明します。シャーディングは次回取り上げる予定です。

レプリケーションのメリット

まずは,MongoDBが採用しているマスター/スレーブ方式のレプリケーションの一般的なメリットについて説明します。マスター/スレーブ方式のレプリケーションは以下のようなメリットをもたらします。

可用性の向上

レプリケーションは主に冗長性を得るために設計され,多くのプロダクション環境で導入されています。マスターノードがスレーブノードと同期していることから,マスターノードに障害が起きてもデータロストやサービス停止時間を最小限にすることが可能です。また近年ではDR(ディザスタリカバリ)対応のため,地理的に離れたデータセンターにノードを分散させる設計も多く見られます。

保守性の向上

レプリケーションは負荷の高い操作をスレーブノードで実行できることにより,メンテナンス性を高めてくれます。たとえばバックアップをスレーブノードで行い,不要な負荷をマスターノードにかけないようにすることは広く行われています。他にも負荷の高い大規模なインデックス構築なども,まずはスレーブノードで構築し,スレーブを既存のマスターと交代させ,その後新たなスレーブでもう一度インデックスを構築するといった方法を実施することが可能です。

負荷分散による性能の向上

レプリケーションを使用すれば,読み取り(Read)の負荷をノード間で分散させることができます。負荷のほとんどがReadで占められているようなアプリケーションの場合,Readの負荷をスレーブに分散させることによりシステムをスケールさせることが可能です。MongoDBではv2.2から,Readノードの分散をドライバで実装可能となりました。データの読み取り一貫性レベルに応じて,どのノードからReadするかをアプリケーションから容易に設定することが可能です。詳細は,本連載の第2回 MongoDB 2.2の新機能に記載されています。

MongoDBレプリケーション概要

MongoDBには多くのRDBが実装しているマスター/スレーブ方式のレプリケーション機能があります。レプリケーションは1つのMongoDBにあるデータを別のMongoDBに複製できる機能です。データの複製は非同期で行われます。従来のRDBに無い機能として,MongoDBは自動フェイルオーバーを実装しています※1)⁠マスターに障害が発生しても自動的にフェイルオーバーとリカバリが可能です。また,後ほど説明する「書き込み保証」「読み取り負荷分散」はスケーラブルに設計されたMongoDBの特徴的な機能です。

MongoDBではマスターのことをプライマリ,スレーブのことをセカンダリと呼びます。MongoDBのレプリケーションの最小構成は,3つのノードが必要です。

  1. 2つのフルノードと1つのアービター(図1)
  2. 3つのフルノード(図2)

図1 2つのフルノードと1つのアービター

図1 2つのフルノードと1つのアービター

図2 3つのフルノード

図2 3つのフルノード

セカンダリは,プライマリのデータのコピーを保持します。アービターはデータのコピーを保持しませんが,フェイルオーバーの際に新しいプライマリノードを選択する役割を果たします。

MongoDBのレプリケーションには以下の2つがあります。

  • マスター - スレーブレプリケーション
  • レプリカセット

レプリカセットはv1.6から追加されたもので,マスター - スレーブレプリケーションの上位機能であり,自動化されたフェイルオーバー機能を提供します。現在ではレプリカセットが推奨されています。したがって,本記事ではレプリカセットについて解説します。

MongoDBのレプリケーションはレプリカセット機能で提供されます。それでは実際にレプリカセットを構築してみましょう。

※1)
MySQLでは自動フェイルオーバーが次のバージョンの5.6から実装されます。

著者プロフィール

藤崎祥見(ふじさきしょうけん)

野村総合研究所 OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。

Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。

実家がお寺で,住職の資格を所持する坊主系エンジニア。

Twitter:@syokenz


渡部徹太郎(わたなべてつたろう)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。

藤崎と共同で丸の内MongoDB勉強会を始める。

趣味は自宅サーバ。好きなものはLinuxとRuby。

Twitter:@fetarodc


林田敦(はやしだあつし)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIや製品開発業務に従事。

丸の内MongoDB勉強会では広報兼雑用係を務める。

趣味はレザークラフト,ダイビング,スキー,キャンプ,ジェットスキー,カメラ等々。作って滑って撮って潜れるエンジニア。

Facebook:Atsushi Hayashida

コメント

コメントの記入