Mongoレプリケーションを試すには

この三連休でMongoの良さとは?みたいな感じでSkypeしてて「Mongo」について書くかぁってなったので、
今日はMongoDBについて。

MongoDBの良さっていろいろあると思うねんけど、
例えば、設計ちょっとは楽になる。レプリケーション、分散が簡単、集計処理が簡単とか、ゾロゾロ出ると思います。

個人的に、バイト等でMongo使う機会あって、「お、ここめっちゃ楽や」ってすごく実感してます。

で、その中の一つのレプリケーションをローカルで体験できる記事を書こうかと。

レプリケーション


レプリケーションとは、masterの内容を別のコンピューター上で、内容を常に同期する機能のこと。

mongoの環境等は今回のブログでは書きません。

レプリケーションの構成をこのような感じにします。

mongoの標準ポートは、27017なんですが、そこを今回汚さない感じで体験してもらえればと思います。

Arbiterってのは、DBの死活監視をしてくれるもの。
pingコマンドを定期的に送ってて、Primaryが死んだとか全部判定してくれるやーつ。

では、この環境をローカルで作ります。
port:50000用にデータを保存するdbpathの設定をしましょう。

こんな感じでフォルダ作るだけでおk

あ、ついでにログを保存するフォルダも作りましょう。

これで、port:50000の下準備はできたので、

で、mongoサーバーを立ち上げてください。
ちょっとだけ、補足。

–forkでバックグランドで立ちあがるようになります。

–replSetで、レプリケーションのグループ名を決めます。今回はLocalRepにしましょう。

これで、同様にSecondaryのport:50001用とArbiterのport:50001も作りましょう

これで、三台のmongoサーバーが立ち上がりました。

それぞれのターミナルを複数立ち上げて、サーバーに入ってみましょう。
Arbiterには別に入らなくてよいです。

それでは、Primaryにデータを突っ込んでみましょう。
(port:50000での作業)

これで、LocalRepというグループにport:50000のデータベースは入ったと思います。
それでは、port:50001とport:50002をレプリケーションのグループに入れましょう

三つ入ったことが確認できます。

では、Secondaryはどうなっているか見てみましょう

セカンダリーで、読み込みの許可が必要なので
db.getMongo().setSlaveOk()
ってのを最初にかましてください

おぉぉーー!
Seondaryに入っているぞーー!

では、Primaryに一気に1000件ほど突っ込んでみましょう

(port:50000での作業)

何気にmongoコマンドライン上でこういうこと簡単にできるの嬉しい。楽しい。

おぉぉぉーー!同期されているぜー!!

Primaryを落としてみましょう。
(port:50000での作業)

すると、port:50001がプライマリーになって,port:50000が落ちていることがわかります。
もう一度、port:50000を起動して、rs.status()を見ると

で、port:50001がPrimaryで、port:50000がSecondaryになっていることがわかります。

「port:50000の方がサーバーの性能がいいので、Primaryになって欲しいな。。」って時は、prioiryの設定が必要です。

まずは、現在のconfigの設定を見てみましょう。

priorityの設定の定義を書いて
rs.reconfig(定義した値)

50000がPrimaryに戻っていることがわかります。

新しくmongoサーバーを購入して、レプリケーションに含ませるときは

PrimaryとSecondaryの切り替えをしたいときは

で現在の定義を確認して、priorityの設定をして

で完成。

こんな感じで、コマンドひとつでレプリケーションが簡単にできるのがMongoの良い所かと。

こーへい


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です