自己管理型レプリカセット ノードのメンテナンスの実行
Overview
レプリカセットにより、メンテナンスウィンドウの大部分が MongoDB 配置を利用可能な状態に保つことができます。
このドキュメントでは、レプリカセットの各ノードのメンテナンスを実行するための基本的な手順について説明します。 さらに、この特定のシーケンスは、プライマリが使用できない時間を最小限に抑え、配置全体への影響を制御するようにします。
これらの手順は、特にMongoDB の最新バージョンへのアップグレードなどの手順の一般的なレプリカセット操作の基準として使用します。
手順
レプリカセットの各ノードに対して、セカンダリ ノードから始まり、プライマリで終了するまでに次の一連のイベントが実行されます。
セカンダリを別のポートでスタンドアロンとして再起動します。
オペレーティング システムの shell プロンプトで、 mongod
をスタンドアロン インスタンスとして再起動します。
構成ファイルを使用している場合は、次の構成を更新します。
replication.replSetName
オプションをコメントアウトします。net.port
を別のポートに変更します。 元のポート設定をコメントとして書き留めておきます。setParameter
セクションでパラメータdisableLogicalSessionCacheRefresh
をtrue
に設定します。mongod
がシャードまたはコンフィギュレーションサーバーのノードである場合は、次の操作も行う必要があります。sharding.clusterRole
オプションをコメントアウトします。セクションでパラメータ
skipShardingConfigurationChecks
をtrue
setParameter
に設定します。
たとえば、メンテナンスのためにシャード/コンフィギュレーションサーバーのレプリカセット ノードのメンテナンスを実行する場合、更新された構成ファイルには次の例のような内容が含まれます。
net: bindIp: localhost,<hostname(s)|ip address(es)> port: 27218 # port: 27018 #replication: # replSetName: shardA #sharding: # clusterRole: shardsvr setParameter: skipShardingConfigurationChecks: true disableLogicalSessionCacheRefresh: true
コマンドライン オプションを使用する場合は、次の構成更新を行って再起動します。
--port
を別のポートに変更します。--setParameter
オプションでパラメータdisableLogicalSessionCacheRefresh
をtrue
に設定します。mongod
がシャードまたはコンフィギュレーションサーバーのノードである場合は、次の操作も行う必要があります。シャード ノードの場合は
--shardsvr
を削除し、コンフィギュレーションサーバー ノードの場合は--configsvr
を削除します。セクションでパラメータ
skipShardingConfigurationChecks
をtrue
setParameter
に設定します。
たとえば、シャーディングされたクラスターの一部ではないレプリカセット ノードを再起動するには、次のようにします。
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter disableLogicalSessionCacheRefresh=true
たとえば、メンテナンスのためにシャード/コンフィギュレーションサーバーのレプリカセット ノードを再起動するには、次の手順を実行します。
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true
警告
非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
レプリカセット メンバーをスタンドアロン インスタンスとして再起動する場合でも、常に同じユーザーでmongod
を起動します。
セカンダリ でメンテナンス操作を実行します。
ノードがスタンドアロンである間は、 mongosh
を使用してメンテナンスを実行します。
mongo --port 27218
重要
ノードがスタンドアロンである間は、このノードに書込み (write) は複製されず、このノードへの書込み (write) はレプリカセットの他のノードに複製されることもありません。
このスタンドアロンでの書込みが、レプリカセットに再び追加されたときにノードに適用される oplog の書込みと競合しないことを確認します。
mongod
レプリカセットのメンバーとして を再起動します。
すべてのメンテナンス タスクを実行した後、次の手順で、 mongod
をレプリカセットのノードとして通常のポートで再起動します。
mongosh
から、メンテナンス完了後にスタンドアロン サーバーをシャットダウンします。
use admin db.shutdownServer()
mongod
インスタンスを元の構成のレプリカセット メンバーとして再起動します。つまり、スタンドアロンとして起動する際に行った構成変更を元に戻します。
Tip
disableLogicalSessionCacheRefresh
パラメーターは必ず削除してください。
シャード ノードまたはコンフィギュレーションサーバー ノードの場合は、 skipShardingConfigurationChecks
パラメータを必ず削除してください。
起動したら、 mongosh
を再起動されたインスタンスに接続します。
セカンダリがプライマリ に追いつくのに時間がかかります。 mongosh
から、次のコマンドを使用して、ノードがRECOVERING
状態からSECONDARY
状態に追いついたことを確認します。
rs.status()
最後にプライマリのメンテナンスを実行します。
すべてのセカンダリのメンテナンス タスクが完了した後にプライマリのメンテナンスを実行するには、
mongosh
をプライマリに接続し、rs.stepDown()
を使用してプライマリを降格し、セカンダリの 1 つが新しいプライマリに選出されるようにします。 5 分間、ノードが再度プライマリに選出されないようにするには、 300秒の待機期間を指定します。rs.stepDown(300) プライマリが降格すると、レプリカセットは新しいプライマリを選択します。
mongod
をスタンドアロン インスタンスとして再起動し、次の構成更新を行います。
構成ファイルを使用している場合は、次の構成を更新します。
replication.replSetName
オプションをコメントアウトします。net.port
を別のポートに変更します。 元のポート設定をコメントとして書き留めておきます。--setParameter
オプションでパラメータdisableLogicalSessionCacheRefresh
をtrue
に設定します。mongod
がシャードまたはコンフィギュレーションサーバーのノードである場合は、次の操作も行う必要があります。sharding.clusterRole
オプションをコメントアウトします。セクションでパラメータ
skipShardingConfigurationChecks
をtrue
setParameter
に設定します。
たとえば、メンテナンスのためにシャード/コンフィギュレーションサーバーのレプリカセット ノードのメンテナンスを実行する場合、更新された構成ファイルには次の例のような内容が含まれます。
net: bindIp: localhost,<hostname(s)|ip address(es)> port: 27218 # port: 27018 #replication: # replSetName: shardA #sharding: # clusterRole: shardsvr setParameter: skipShardingConfigurationChecks: true disableLogicalSessionCacheRefresh: true
警告
非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
コマンドライン オプションを使用する場合は、次の構成更新を行います。
--port
を別のポートに変更します。--setParameter
オプションでパラメータdisableLogicalSessionCacheRefresh
をtrue
に設定します。mongod
がシャードまたはコンフィギュレーションサーバーのノードである場合は、次の操作も行う必要があります。シャード ノードの場合は
--shardsvr
を削除し、コンフィギュレーションサーバー ノードの場合は--configsvr
を削除します。セクションでパラメータ
skipShardingConfigurationChecks
をtrue
setParameter
に設定します。
たとえば、シャーディングされたクラスターの一部ではないレプリカセット ノードを再起動するには、次のようにします。
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter disableLogicalSessionCacheRefresh=true
たとえば、メンテナンスのためにシャード/コンフィギュレーションサーバーのレプリカセット ノードを再起動するには、次の手順を実行します。
mongod --port 27218 --dbpath /srv/mongodb --bind_ip localhost,<hostname(s)|ip address(es)> --setParameter skipShardingConfigurationChecks=true --setParameter disableLogicalSessionCacheRefresh=true
警告
非ローカルホスト(例: (一般にアクセス可能な)IP アドレスを使用して、クラスターを不正アクセスから保護していることを確認します。 セキュリティ推奨事項の完全なリストについては、「自己管理型配置のセキュリティ チェックリスト」を参照してください。 最低限、認証を有効化し、ネットワーク インフラストラクチャの強化 を検討してください。
スタンドアロンになった でメンテナンス タスクを実行します。
重要
ノードがスタンドアロンである間は、このノードに書込み (write) は複製されず、このノードへの書込み (write) はレプリカセットの他のノードに複製されることもありません。
このスタンドアロンでの書込みが、レプリカセットに再び追加されたときにノードに適用される oplog の書込みと競合しないことを確認します。
すべてのメンテナンス タスクを実行した後、
mongod
インスタンスを元の構成のレプリカセット メンバーとして再起動します。つまり、スタンドアロンとして起動する際に行った構成変更を元に戻します。Tip
disableLogicalSessionCacheRefresh
パラメーターは必ず削除してください。シャード ノードまたはコンフィギュレーションサーバー ノードの場合は、
skipShardingConfigurationChecks
パラメータを必ず削除してください。