MongoDBでレプリケーションやってみた

2021年4月21日水曜日

Azure Cluster Database MongoDB 冗長化

t f B! P L

はじめに

MongoDBをWindowsのWSFCでクラスタリングしている環境をリプレースすることになったので、改めてMongoDBの冗長化について調べてみました。少し調べてみると、レプリケーションという設定があるようで、WSFCなどのクラスタソフトを使用しなくても冗長化を実現できるようです。SQL ServerでいうところのAlwaysOnのような構成が組めるようです。

今回はMongoDBでのレプリケーション設定方法を確認していきます。


環境

今回は下記のように3台のサーバで設定を行います。
db1がPrimary、db2がSeconadary、db3はdb1とdb2のどちらが起動しているかを監視する監視の役割です。


ダウンロード

https://www.mongodb.com/download-center#community

Windows Server のIEだとオンプレミス版のインストーラがダウンロードできないので、Chromeをインストールしてからダウンロードしました。

インストール

ダウンロードしたインストーラを起動して「next」を押していきます。
下記のところはCompleteを選択しました。

起動確認

インストールが完了するとMongoDB Compassという管理ツールが起動しました。
Serviceの状況を確認するとMongoDBが起動していることがわかります。

接続確認

コマンドプロンプトで「C:\Program Files\MongoDB\Server\4.4\bin」に移動し、mongoというコマンドを実行し、MongoDBに接続します。
その後、「show dbs」コマンドで登録済みのデータベースを確認します。
admin,config,localのデータベースが表示されればOKです。

レプリケーション設定

mongod.cfgの修正

ここからいよいよレプリケーション設定を行っていきます。
まずは「db1」サーバの下記ファイルを修正します。
"C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg"
メモ帳などで開いたら、下記のように修正します。

変更前
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1
 
変更後
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0

続けて、
#replication:
と記載されている箇所があるので、こちらを
replication:
  replSetName: "rep"
と修正します。

設定ファイルを修正したら、サービスを再起動します。

同じことをdb2/db3サーバにも行います。

ポート許可設定

Windows ServerのデフォルトではMongoDBが使用するポートでの通信が許可されていないため、許可設定を行います。MongoDBは27017ポートを使用するのでこちらのポートでの通信を許可します。この設定をdb1/db2/db3のサーバに行います。


メンバーサーバの追加

ここからはレプリカセットに対してメンバーサーバを追加していきます。
まずはdb1サーバ上で、コマンドプロンプトから「mongo」コマンドを実行し、
db1サーバのMongoDBに接続します。
次に下記のコマンドでレプリカセットを初期化します。
rs.initiate()
そのあと、続けてセカンダリとなるdb2を登録します。
rs.add( { host: "db2:27017", priority: 0, votes: 0 } )
最後に監視サーバとしてdb3を登録します。
rs.addArb("db3:27017")
実行すると下記のような表示になります。

rs.status()でレプリカ設定を確認できます。

priority,votesの設定変更

ここまでの設定だけだと、Primaryが停止してもフェールオーバーしないことがわかりました。db2のpriorityが0になっており、priority0のサーバはPrimaryに昇格できないためです。Primaryが停止したときに自動的にSecondaryがPrimaryに昇格するためには「priority」と「votes」を設定する必要があります。

var conf=rs.conf()
conf.members[0].priority = 100
conf.members[0].votes = 1
conf.members[1].priority = 10
conf.members[1].votes = 1
conf.members[2].priority = 0
conf.members[2].votes = 1
rs.reconfig(conf)
以上でようやく、レプリケーションの設定完了です。

フェイルオーバーテスト

Primary(db1)のMongoDBのサービスを停止して、db2がPrimaryに昇格するか確認します。

停止前

db1サーバがPrimaryとなっており、db1、db2サーバともにMongoDBが起動している状態です。

停止後

db2がPrimaryになりました。



PV

PVアクセスランキング にほんブログ村

ブログ村

このブログを検索

自己紹介

システムエンジニアとして12年ほど勤めたあと、社内SEに転職しました。 2017年に転職して、2019年に中古マンションを買いました。

リモートデスクトップのプロキシ越え

社内ネットワークからクラウド上のサーバにリモートデスクトップしたい Azureなどのクラウド環境にWindowsOSを立ち上げると、インターネット経由でリモートデスクトップ接続することになります。会社のネットワークからインターネットにアクセスする場合はプロキシサーバーやファイ...

QooQ