はじめに
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という管理ツールが起動しました。
コマンドプロンプトで「C:\Program Files\MongoDB\Server\4.4\bin」に移動し、mongoというコマンドを実行し、MongoDBに接続します。
その後、「show dbs」コマンドで登録済みのデータベースを確認します。
レプリケーション設定
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")
実行すると下記のような表示になります。
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が起動している状態です。
0 件のコメント:
コメントを投稿