rs.conf()メソッドまたはreplSetGetConfigコマンドを使用して、レプリカセットの構成にアクセスできます。
レプリカセットの構成を変更するには、rs.reconfig() メソッドを使用して、構成ドキュメントをメソッドに渡します。
警告
MongoDB のバージョンによって検証ルールが異なる可能性があるため、異なるバージョンの MongoDB のノードを含むレプリカセットの再設定は避けてください。
レプリカセット構成ドキュメントの例
次のドキュメントは、レプリカセット構成ドキュメントの表現を示しています。お使いのレプリカセットの構成には、以下の設定の一部しか含まれていない場合があります。
{ _id: <string>, version: <int>, term: <int>, protocolVersion: <number>, writeConcernMajorityJournalDefault: <boolean>, configsvr: <boolean>, members: [ { _id: <int>, host: <string>, arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, secondaryDelaySecs: <int>, votes: <number> }, ... ], settings: { chainingAllowed : <boolean>, heartbeatIntervalMillis : <int>, heartbeatTimeoutSecs: <int>, electionTimeoutMillis : <int>, catchUpTimeoutMillis : <int>, getLastErrorModes : <document>, getLastErrorDefaults : <document>, replicaSetId: <ObjectId> } }
レプリカセット構成フィールド
_id型: string
レプリカセットの名前です。
_idは、replication.replSetNameまたはコマンドラインでmongodに指定された--replSetの値と同一である必要があります。Tip
レプリカセット名の設定については、
replSetNameまたは--replSetを参照してください。
versionタイプ: int
レプリカセット構成ドキュメントの改訂版を前の構成と区別するため、数字を 1 つずつ増やします。
レプリカセット ノードは、
termとversionを使用して「最新」 に関するコンシステント を実現します。レプリカ構成。メンバーがレプリカ構成ドキュメントを比較する場合、termが大きい構成ドキュメントが「最新」と見なされます。termが同じか存在しない場合、より大きいversionを含む構成ドキュメントが「最新」と見なされます。
termタイプ: int
機能の互換性バージョン(FCV)「4.4」以降でのみ使用可能です。
レプリカセット構成ドキュメントの改訂版を前の構成と区別するため、数字を 1 つずつ増やします。構成ドキュメントの
termは、再構成を実行したtermプライマリ のレプリカセットのタームと一致します。プライマリreplSetReconfigは、選挙で選出されるたびにタームが増加します。 操作で明示的に設定されている場合、プライマリは フィールドを無視します。term強制再構成を発行すると、replSetReconfigフィールドが削除されます。プライマリが次にtermを強制なしで発行すると、 は独自のタームに設定されます。レプリカセット ノードは、
termとversionを使用して「最新」 に関するコンシステント を実現します。レプリカ構成。メンバーがレプリカ構成ドキュメントを比較する場合、termが大きい構成ドキュメントが「最新」と見なされます。termが同じか存在しない場合、より大きいversionを含む構成ドキュメントが「最新」と見なされます。
configsvrタイプ: ブール値
デフォルト: false
レプリカセットがシャーディングされたクラスターのコンフィギュレーションサーバーに使用されるかどうかを示します。レプリカセットがシャーディングされたクラスターのコンフィギュレーションサーバー用である場合は、
trueに設定します。
protocolVersionタイプ: 数値
デフォルト: 1
MongoDB は
protocolVersion: 1のみをサポートし、protocolVersion: 0はサポートしなくなりました。
writeConcernMajorityJournalDefaultタイプ: ブール値
デフォルト: true
書込み保証 (write concern) でジャーナル オプション j が明示的に指定されていない場合の、
{ w: "majority" }書込み保証 (write concern) の動作を決定します。次の表に、
writeConcernMajorityJournalDefaultの値と、それに対応する{ w: "majority" }の動作を示します。値{ w: "majority" }動作true
MongoDB は、投票権を持つノードの過半数がディスク上のジャーナルに書込んだ後、書込み (write) 操作に確認応答を返します。
重要:
writeConcernMajorityJournalDefaultがtrueの場合、投票権を持つレプリカセットの全ノードはジャーナリングを実行する必要があります。レプリカセットの投票ノードのいずれかが インメモリストレージエンジンを使用する場合は、
writeConcernMajorityJournalDefaultをfalseに設定する必要があります。レプリカセットの投票ノードのいずれかが インメモリストレージエンジンを使用し、
writeConcernMajorityJournalDefaulttrueが"majority"の場合、"majority"書込み操作が失敗する可能性があります。失敗する可能性がある操作には、 コマンドや、 user management メソッドやreplSetStepDownrole managementmongosh"majority"メソッドなど、デフォルトで 書込み保証 (write concern)(書込み保証 (write concern)を使用するさまざまな メソッドがあります。バージョン4.2 以降(および4.0.13 および3.6.14 )、レプリカセットのメンバーが、 インメモリストレージエンジンを使用しているものの(投票または非投票)、レプリカセットの が
writeConcernMajorityJournalDefaulttrue に設定されている場合、レプリカセットノードはスタートアップ警告をログに記録します。false
MongoDB は、投票権を持つノードの過半数がメモリ内で操作を適用した後で、書込み (write) 操作に確認応答を返します。
警告:レプリカセットの投票ノードのいずれかが インメモリストレージエンジンを使用する場合は、
writeConcernMajorityJournalDefaultをfalseに設定する必要があります。バージョン4.2 以降(および4.0.13 および3.6.14 )、レプリカセットのメンバーが、 インメモリストレージエンジンを使用しているものの(投票または非投票)、レプリカセットの が
writeConcernMajorityJournalDefaulttrue に設定されている場合、レプリカセットノードはスタートアップ警告をログに記録します。writeConcernMajorityJournalDefaultがfalseに設定されているシャードがあるシャーディングされたクラスター( インメモリストレージエンジンを使用する投票ノードのあるシャードなど)ではトランザクションを実行できません。
members
membersタイプ: 配列
レプリカセットの各ノードに 1 つある、ノード構成ドキュメントの配列。 配列は 0
membersから始まるインデックスの配列です。各ノード固有の構成ドキュメントには、次のフィールドを含めることができます。
members[n]._idタイプ: 整数
レプリカセット内のノードの整数識別子です。すべてのノード間で一意です。
MongoDB 5.0 以降では、値は
0以上の任意の整数値にできます。以前は、この値は0から255までの整数に制限されていました。各レプリカセットノードには一意の
_idが必要です。現在の構成でその_idmembers[n]エントリがその を使用していない場合でも、_idの値を再利用しないでください。一度設定すると、ノードの
_idは変更できません。注意
membersレプリカ構成オブジェクトを更新するときは、配列インデックスを使用して 配列内のレプリカセットメンバーにアクセスします。配列インデックスは で始まります。このインデックス値を、0配列内の各ドキュメントのmembers[n]._idフィールドの値と混同membersしないでください 。
members[n].host型: string
セットのノードのホスト名と、指定されている場合はポート番号。
ホスト名は、レプリカセット内のすべてのホストで解決可能である必要があります。
警告
は、セットの すべて のノードが
members[n].hostに変換されるホスト上にない限り、 またはローカルlocalhostlocalhostインターフェースに変換される値を保持できません。
members[n].arbiterOnly任意。
タイプ: ブール値
デフォルト: false
アービタを指定するブール値です。値
trueは、ノードがアービタであることを示します。rs.addArb()メソッドを使用してアービタを追加する場合、メソッドは追加されたノードのmembers[n].arbiterOnlyをtrueに自動的に設定します。
members[n].buildIndexes任意。
タイプ: ブール値
デフォルト: true
mongodがこのノードに インデックスmembers[n].buildIndexesを構築するかどうかを示すブール値。この値は、レプリカセットにノードを追加するときにのみ設定できます。ノードがセットに追加された後は、 フィールドを変更できません。ノードを追加するには、rs.add()とrs.reconfig()を参照してください。クライアントからクエリを受信する
mongodインスタンスの場合はfalseに設定しないでください。次の条件がすべて当てはまる場合は、
buildIndexesをfalseに設定すると便利な場合があります。このインスタンスを を使用してバックアップを実行するためにのみ使用している
mongodumpこのノードはクエリを受け取らない。
インデックスの作成とメンテナンスが、ホスト システムに過度の負担をかける。
falseに設定しても、レプリケーションに必要な操作を容易にするために、セカンダリは_idフィールドにインデックスを構築します。警告
members[n].buildIndexesfalsemembers[n].priority0を に設定する場合は、 も に設定する必要があります。 がmembers[n].priority0でない場合、 MongoDB は、members[n].buildIndexesがfalseに等しいノードを追加しようとするとエラーを返します。ノードがクエリを受け取らないようにするには、インデックスを構築しないインスタンスをすべて隠ぺいする必要があります。
他のセカンダリは、 が false
members[n].buildIndexesのノードから複製できません。
members[n].hidden任意。
タイプ: ブール値
デフォルト: false
この値が
trueの場合、レプリカセットはこのインスタンスを隠ぺいし、db.hello()またはhelloの出力にノードを含めません。こうすることで、セカンダリの読み込み設定 (read preference) によって読み取り操作(つまり、クエリ)がこのホストするに到達することを防止できます。非表示ノードは、 書込み保証 (write concern) で発行された書込み
"majority"(write) 操作に確認応答を返せます。votes書込み保証 (write concern)で発行された書込み操作の場合、ノードは投票ノードでもある必要があります(つまり、 が0より大きい場合)。
members[n].priority任意。
型: プライマリ/セカンダリ ノードの場合は 0 から 1000 までの数値、アービタの場合は 0 または 1 の数値。
デフォルト: プライマリ/セカンダリのノードの場合は 1.0、アービタの場合は 0。
レプリカセットがプライマリになる相対的な可能性を示す数値。
ノードがプライマリになる可能性を高めるには、そのノードの
priority値を高く指定します。ノードがプライマリになる可能性を減らすには、そのノードの
priority値を低く指定します。
ノードの優先順位を変更すると、1 つ以上の選挙がトリガーされます。選挙アルゴリズムは、最も優先順位が高いノードをプライマリに選出するために最善を尽くします。しかし、優先順位の高いセカンダリが使用できる場合でも、優先順位の低いノードがプライマリになる場合があります。
優先順位の低いノードがプライマリになると、サーバーは最も優先順位の高いレプリカセットがプライマリになるまで、定期的に選挙を呼び出します。選挙が行われる頻度は、選出されたノードと最も優先順位の高いノードとの間の優先順位の違いによって決まります。
優先順位が
0のノードがプライマリになることはできません。投票権のないノード(つまり、
votesが0に設定されているノード)の優先順位は0である必要があります。Tip
members[n].tags任意。
型: ドキュメント
デフォルト: なし
tagsドキュメントには、レプリカセットのユーザー定義タグ フィールドと値のペアが含まれています。{ "<tag1>": "<string1>", "<tag2>": "<string2>",... } 読み取り操作では、読み込み設定 (read preference) でタグセットを指定して、指定したタグを持つレプリカセットに操作を指示できます。
詳しくは、「レプリカセットのタグセットの構成」を参照してください。
members[n].secondaryDelaySecs任意。
タイプ: 整数
デフォルト: 0
このレプリカセットがプライマリから "遅れる" 秒数。
遅延ノードを作成するにはこのオプションを使用します。遅延ノードは、過去のある時点におけるデータの状態を反映したデータのコピーを保持します。
遅延ノードは、
"majority"書込み保証votes(write0concern) 付きで発行された書込み (write) 操作の確認に貢献できます。ただし、設定された遅延値よりも早く書込み (write) 確認応答が返されることはありません。 書込み保証 (write concern)で発行された書込み操作の場合、ノードは投票ノードでもある必要があります(つまり、 が より大きい場合)。Tip
members[n].votes任意。
タイプ: 整数
デフォルト: 1
レプリカセット選挙においてサーバーが投じる投票数です。各ノードが持つ投票数は
1または0で、アービタ は常にちょうど1票を持ちます。が より大きいメンバーは、
priority00votesを持つことはできません。レプリカセットには最大50 7メンバーを含めることができますが、投票メンバーは メンバーのみです。7 1 つのレプリカセットに を超えるノードが必要な場合は、追加の投票権のないノードのために
members[n].votesから0を設定します。投票権のない(すなわち
votesが0の)メンバーは、priorityの0 を持っている必要があります。MongoDB 5.0 以降では、新しく追加されたセカンダリは投票権のあるノードとしてカウントされず、
SECONDARY状態に達するまで選出されません。投票権のないノードは、
"majority"書込み保証 (write concern) 付きで発行された書込み (write) 操作に確認応答できません。
settings
settings任意。
型: ドキュメント
レプリカセット全体に適用される構成オプションを含むドキュメントです。
settingsドキュメントには次のフィールドが含まれています。settings.chainingAllowed任意。
タイプ: ブール値
デフォルト: true
MongoDB5.0.1 以前で、 が次の場合。
settings.chainingAllowedMongoDB 5.0.2 以降
オーバーライドを有効にすると、レプリカセットのセカンダリ メンバーは、 が
settings.chainingAllowedfalseであっても、他のセカンダリ メンバーからデータを複製できます。settings.chainingAllowedを上書きしてセカンダリenableOverrideClusterChainingSettingノードからのレプリケーションを許可するには、 サーバーパラメータをtrueに設定します。enableOverrideClusterChainingSettingのデフォルトはfalseです。
settings.getLastErrorDefaults任意。
型: ドキュメント
MongoDB 5.0 以降では使用できません。
重要
MongoDB5.0 以降では、デフォルトの 以外の でデフォルトの書込み保証 (write concern)を指定することはできません。代わりに、
settings.getLastErrorDefaults{ w: 1, wtimeout: 0 }setDefaultRWConcernコマンドを使用して、レプリカセットまたはシャーディングされたクラスターのデフォルトの読み取りまたは書込み保証 (write concern)を設定します。
settings.getLastErrorModes任意。
型: ドキュメント
の使用を通じて書込み保証 (write
members[n].tagsconcern)を定義するために使用されるドキュメント。カスタム書込み保証 (write concern) は、データセンターの認識を提供できます。{ getLastErrorModes: { <name of write concern> : { <tag1>: <number>, .... }, ... } } は、書込み保証
<number>(write concern)を満たすために必要な異なるタグの値の数を示します。例、次のsettings.getLastErrorModesは、 という名前の書込み保証 (write concern)を定義し、datacenterdcタグの値が異なる 2 つのノードに書込みを伝播することを要求します。{ getLastErrorModes: { datacenter: { "dc": 2 } } } カスタム書込み保証 (write concern) を使用するには、書込み保証名を書込み保証 (write concern) 内の
wオプションに渡します。例:{ w: "datacenter" } 詳細と例については、「レプリカセットのタグセットの構成」を参照してください。
settings.heartbeatTimeoutSecs任意。
タイプ: int
デフォルト: 10
レプリカセットがお互いのハートビートが成功するまで待つ秒数です。あるノードが時間内に応答しない場合、他のノードは期限を過ぎたそのノードをアクセス不可としてマークします。
settings.electionTimeoutMillis任意。
タイプ: int
デフォルト: 10000(10 秒)
レプリカセットのプライマリが到達不能なときを検出するための時間制限(ミリ秒単位)。この設定は、
protocolVersion: 1を使用する場合のフェイルオーバーの区別を制御します。フェイルオーバータイムアウトはelectionTimeoutMillisの値を超えないことが予想されます。値を選択する際には、次の点を考慮してください。
値が大きいほどフェイルオーバーは遅くなりますが、プライマリ ノードやネットワークの速度低下やむらの影響を受けにくくなります。
値が小さいほどフェイルオーバーは速くなりますが、プライマリ ノードやネットワークの速度低下やむらの影響を受けやすくなります。
この設定は
protocolVersion: 1を使用する場合にのみ適用されます。注意
forceフィールドをtrueに設定せずにrs.stepDown()またはreplSetStepDownを使用してプライマリを降格すると、降格したプライマリは、選挙を直ちに呼び出す資格のあるセカンダリを指名します。
settings.catchUpTimeoutMillis任意。
タイプ: int
デフォルト: -1、キャッチアップ時間は無限。
新たに選出されたプライマリが、より新しい書込み (write) を行った可能性のある他のレプリカセットと同期(キャッチアップ)するまでの時間制限(ミリ秒単位)です。時間制限が無限の場合や長い場合には、選挙後に他のノードがロールバックする必要のあるデータ量は減りますが、フェイルオーバー時間は長くなる可能性があります。
新たに選出されたプライマリは、セットの他のノードに完全に追いつくと、キャッチアップ期間を早く終了します。キャッチアップ期間中は、新しく選出されたプライマリはクライアントからの書込み (write) に対応できません。キャッチアップを中止してプライマリへの移行を完了するには、
replSetAbortPrimaryCatchUpを使用します。
settings.catchUpTakeoverDelayMillis任意。
タイプ: int
デフォルト: 30000(30 秒)
ノードが現在のプライマリよりも進んでいると判断した後、キャッチアップ引き継ぎの開始を待つ時間(ミリ秒単位)です。キャッチアップ引き継ぎ中、現在のプライマリの進んだノードがレプリカセットの新しいプライマリになるための選挙を開始します。
引き継ぎを開始したノードが現在のプライマリよりも先行していると判断した後、指定されたミリ秒数待機してから、次のことを確認します。
まだ現在のプライマリよりも進んでいること
利用可能な全ノードの中で最新のノードであること
現在のプライマリが現在、そのノードをキャッチアップしていること
これらの条件をすべて満たしていると判断すると、引き継ぎを開始したノードは直ちに選挙に立候補します。
レプリカセット選挙の詳細については、「レプリカセット選挙」を参照してください。
注意
catchUpTakeoverDelayMillis-1を に設定すると、キャッチアップ引き継ぎが無効になります。 をcatchUpTimeoutMillis0に設定すると、プライマリのキャッチアップが無効になり、キャッチアップの引き継ぎも無効になります。