MongoDBレプリカセットの構築
MongoDBレプリカセット(Replica Set)は、1つのPrimaryノードと1つ以上のSecondaryノードからなる自動フェイルオーバ機能を持つプライマリ・スレーブ・クラスタです.レプリカセットの動作モードは次の図です.
レプリカ・セットのデータ同期プロセス:
Primaryノードはデータを書き込み、SecondaryはPrimaryのoplogを読み取ることでコピー情報を得て、データのコピーを開始し、コピー情報を自分のoplogに書き込む.操作に失敗した場合、バックアップノードは現在のデータ・ソースからのデータのコピーを停止します.あるバックアップノードが何らかの理由でオフになった場合、再起動すると自動的にoplogの最後の操作から同期が開始され、同期が完了すると、自分のoplogに情報が書き込まれます.コピー操作はまずデータをコピーし、コピーが完了してからoplogに書き込むため、同じ操作が2部同期する可能性がありますが、MongoDBは設計当初からこの問題を考慮してoplogの同じ操作を複数回実行していました.一度実行する効果と同じです.
簡単に言えば、
Primaryノードがデータ操作を完了すると、Secondaryは一連の動作を行い、データの同期を保証する:1:自分のlocalライブラリのoplogをチェックする.rs集合は最近のタイムスタンプを見つけます.2:Primaryノードlocalライブラリoplogを確認します.rsセットで、このタイムスタンプより大きいレコードを見つけます.3:見つかったレコードを自分のoplogに挿入する.rsコレクションでは、これらの操作を実行します.
環境構築(以下linuxシステム、windowsシステム同理)
1:インストールプログラムをダウンロードします.アドレスは次のとおりです.https://www.mongodb.org/downloads必要に応じて適切なバージョンをダウンロード
2:解凍してbinディレクトリに入り、プロファイルを作成します(そうでなければ起動するたびに各パラメータを入力します):mongode.conf
構成内容を入力します(参考までに、各パラメータは実際のニーズで調整してください):
構成パラメータ
(起動前にdbPath:/home/soft/mongodb-3.2.1/dataというディレクトリが作成されたことを覚えています)
3:他の2台のサーバ(公式推奨レプリカセットのメンバーは3または奇数)を同様に構成し、それぞれ実行します./mongod -f mongod.confはmongodbを起動します.このとき各機器は依然として単機モードでありmongoプログラムを実行して初期化する必要がある(しかもこのように初期化するしかない)
4:いずれかのサーバで実行します./mongo入力コマンド:
レプリカセットの初期化
詳細な構成パラメータについては、次の項目を参照してください.https://docs.mongodb.org/manual/reference/replica-configuration/
5:rs.status()を入力してレプリカセットのステータスを表示します.エラーがなければ、レプリカセットが短時間で初期化に成功し、通常の出力は次のようになります.
レプリカセットの構成情報を変更する必要がある場合があります.手順は次のとおりです.
1.ホスト上でmongoプログラム2を実行する.var conf=rs.conf()を入力します. 3.conf.members[n]={......各種jsonパラメータ}//は初期化と同様に修正する.rs.reconfig(conf, {force:true}); 5.rs.status()レプリカセットのステータスの表示、変更に成功したかどうか
mongoの数字は0から始まり、javaの開始位置と同じです.
に注意
レプリケーション・セットの実行中に、レプリケーション・セットのバージョンのアップグレード、ノードのメンテナンスなど、ノードを再起動する必要があるシーンに遭遇することは避けられません.ノードを再起動する過程で、 shutdown Primary(shutdownはSecondary oplogが10 s以内に追いつくのを待つ) Primaryが終了すると、残りのノードは新しいPrimary(レプリケーションセットは1または2ノード例外のみを含む) を選出する. Primaryは、現在のレプリケーションセットに新しいPrimaryがあるため、このPrimaryはSecondaryのロールで実行されます. 新しいPrimary同期の過程から、自分が データを失わずに複製セットを再起動したい場合は、より優雅に開く方法が必要です.複製セット内のすべてのSecondaryノード を1つずつ再起動する PrimaryにstepDownコマンドを送信し、primaryがSecondary に降格するのを待つダウングレード後のPrimary を再起動
注意:Secondaryの同期がPrimaryに追いつかない場合、ステップ2が失敗する可能性があります.この場合、stepDownが成功するまでステップ2を再試行する必要があります.ステップ2はまた、replsetReconfigコマンドを呼び出してノード優先度を調整することによって、Secondaryがより高い優先度を持つようにし、PrimaryがSecondaryに降格するのを待つこともできる.
したがって、接続レプリケーションセットはPrimaryに直接接続しないでください.そうしないと、ノードロールの切り替え時にエラーを正しく許容できず、サービスが高いことは保証されません.
レプリカ・セットのデータ同期プロセス:
Primaryノードはデータを書き込み、SecondaryはPrimaryのoplogを読み取ることでコピー情報を得て、データのコピーを開始し、コピー情報を自分のoplogに書き込む.操作に失敗した場合、バックアップノードは現在のデータ・ソースからのデータのコピーを停止します.あるバックアップノードが何らかの理由でオフになった場合、再起動すると自動的にoplogの最後の操作から同期が開始され、同期が完了すると、自分のoplogに情報が書き込まれます.コピー操作はまずデータをコピーし、コピーが完了してからoplogに書き込むため、同じ操作が2部同期する可能性がありますが、MongoDBは設計当初からこの問題を考慮してoplogの同じ操作を複数回実行していました.一度実行する効果と同じです.
簡単に言えば、
Primaryノードがデータ操作を完了すると、Secondaryは一連の動作を行い、データの同期を保証する:1:自分のlocalライブラリのoplogをチェックする.rs集合は最近のタイムスタンプを見つけます.2:Primaryノードlocalライブラリoplogを確認します.rsセットで、このタイムスタンプより大きいレコードを見つけます.3:見つかったレコードを自分のoplogに挿入する.rsコレクションでは、これらの操作を実行します.
環境構築(以下linuxシステム、windowsシステム同理)
1:インストールプログラムをダウンロードします.アドレスは次のとおりです.https://www.mongodb.org/downloads必要に応じて適切なバージョンをダウンロード
2:解凍してbinディレクトリに入り、プロファイルを作成します(そうでなければ起動するたびに各パラメータを入力します):mongode.conf
構成内容を入力します(参考までに、各パラメータは実際のニーズで調整してください):
構成パラメータ
##
net:
port: 27017
##
systemLog:
destination: file
path:
"mongod.log"
logAppend:
true
storage:
##
engine: wiredTiger
##
dbPath: /home/soft/mongodb-3.2.1/data
## , ,
journal:
enabled:
true
#enable at production
wiredTiger:
engineConfig:
cacheSizeGB: 1
statisticsLogDelaySecs: 3600
journalCompressor: snappy
directoryForIndexes:
true
collectionConfig:
blockCompressor: snappy
indexConfig:
prefixCompression:
true
processManagement:
##
fork:
true
replication:
## oplog
oplogSizeMB: 2048
##
replSetName: candao_qc
secondaryIndexPrefetch: all
enableMajorityReadConcern:
false
(起動前にdbPath:/home/soft/mongodb-3.2.1/dataというディレクトリが作成されたことを覚えています)
3:他の2台のサーバ(公式推奨レプリカセットのメンバーは3または奇数)を同様に構成し、それぞれ実行します./mongod -f mongod.confはmongodbを起動します.このとき各機器は依然として単機モードでありmongoプログラムを実行して初期化する必要がある(しかもこのように初期化するしかない)
4:いずれかのサーバで実行します./mongo入力コマンド:
レプリカセットの初期化
var
conf = {
"_id"
:
"candao_qc"
,
members : [{
"_id"
:0,
// ID
"host"
:
"192.168.86.73:27017"
,
// IP
"priority"
:1,
// ( , 1)
},...]
}
rs.initiate(conf);
// Mongo primary priority , primary , primary, primary , priority , primary.
// , ,
詳細な構成パラメータについては、次の項目を参照してください.https://docs.mongodb.org/manual/reference/replica-configuration/
5:rs.status()を入力してレプリカセットのステータスを表示します.エラーがなければ、レプリカセットが短時間で初期化に成功し、通常の出力は次のようになります.
レプリカセットの構成情報を変更する必要がある場合があります.手順は次のとおりです.
1.ホスト上でmongoプログラム2を実行する.var conf=rs.conf()を入力します. 3.conf.members[n]={......各種jsonパラメータ}//は初期化と同様に修正する.rs.reconfig(conf, {force:true}); 5.rs.status()レプリカセットのステータスの表示、変更に成功したかどうか
mongoの数字は0から始まり、javaの開始位置と同じです.
に注意
レプリケーション・セットの実行中に、レプリケーション・セットのバージョンのアップグレード、ノードのメンテナンスなど、ノードを再起動する必要があるシーンに遭遇することは避けられません.ノードを再起動する過程で、
shutdown Primary
を提案します.これにより、 primary secondary
になる可能性があります. oplog
を持っていることに気づき、rollbackを先に行います.(rollbackのデータは300 Mを超えなければ取り戻せる)注意:Secondaryの同期がPrimaryに追いつかない場合、ステップ2が失敗する可能性があります.この場合、stepDownが成功するまでステップ2を再試行する必要があります.ステップ2はまた、replsetReconfigコマンドを呼び出してノード優先度を調整することによって、Secondaryがより高い優先度を持つようにし、PrimaryがSecondaryに降格するのを待つこともできる.
したがって、接続レプリケーションセットはPrimaryに直接接続しないでください.そうしないと、ノードロールの切り替え時にエラーを正しく許容できず、サービスが高いことは保証されません.
#
mmm:PRIMARY> use admin
switched to db admin
mmm:PRIMARY> db.shutdownServer()