ApsaraDB for MongoDB は、バランサー(balancer)に対する管理をサポートします。 特別なビジネスシナリオでは、balancer を有効または無効にしたり、アクティブウィンドウを設定したり、balancer に関連するその他の操作を実行したりできます。
注意事項
- balancer はシャードクラスタアーキテクチャの機能であり、シャードクラスタインスタンスにのみ適用されます。
- balancer に関連する操作はインスタンスのリソースを占有する可能性があるため、オフピーク時に balancer を管理することをお勧めします。
balancer の無効化
ApsaraDB for MongoDB は、デフォルトで balancer を有効にします。 特別なビジネスシナリオで balancer を無効にするには、次の手順に従います。
- mongo shell を介した ApsaraDB for MongoDB への接続.
- mongos ノードに接続すると、mongo shell で次のコマンドを実行して構成データベースに切り替えます。
構成の使用
- 以下のコマンドを実行して、実行ステータスを確認します。
while( sh.isBalancerRunning() ) { print("waiting..."); sleep(1000); }
- コマンドが値を返さない場合、balancer はタスクを実行していないと示しています。 この場合 balancer の無効化を実行できます。
- コマンドが Waiting を返した場合、balancer はチャンクの移行を実行していると示しています。 この場合 balancer を無効にすることはできません。あえて無効化を実行する場合は、データに一致性問題が生じる可能性があります。
- balancer がタスクを実行していないことを確実にした場合のみ、次のコマンドを実行して balancer を無効にします。
sh.stopBalancer()
balancer の有効化
シャードを構成している場合、balancer は有効になった後すぐにシャード間のバランシングタスクを開始できます。 バランシングはインスタンスのリソースを占有するため、オフピーク時にこの操作を実行することをお勧めします。
- mongo shell を介した ApsaraDB for MongoDB への接続。
- mongos ノードに接続した後、mongo shell で次のコマンドを実行して構成データベースに切り替えます。
構成の使用
- 次のコマンドを実行して、balancer を有効にします。
sh.setBalancerState(true)
balancer のアクティブタイムウィンドウの設定
balancer がチャンクを移行している間のビジネスへの悪影響を避けるために、指定された期間内にのみ balancer がチャンクを移行できるようにアクティブタイムウィンドウを設定できます。
注 この操作を実行する前に、balancer が有効になっていることを確認する必要があります。 balancer を有効にする方法については、 balancer の有効化をご参照ください。
- mongo shell を介した ApsaraDB for MongoDB への接続
- mongos ノードに接続した後、mongo shell で次のコマンドを実行して構成データベースに切り替えます。
構成の使用
- 次のコマンドを実行して、balancer のアクティブタイムウィンドウを設定します。
db.settings.update( { _id: "balancer" }, { $set: { activeWindow : { start : "<start-time>", stop : "<stop-time>" } } }, { upsert: true } )
注- <start-time>: HH:MM 形式の開始時刻。HH の値の範囲は 00 から 23、MM の値の範囲は 00 から 59 です。
- <stop-time>: HH:MM 形式の終了時刻。HH の値の範囲は 00 から 23、MM の値の範囲は 00 から 59 です。
sh.status()
コマンドを実行して balancer のアクティブタイムウィンドウをチェックすることができます。 たとえば、次のコマンド出力は、balancer のアクティブタイムウィンドウが 01:00~03:00 であることを示しています。
次の操作を実行することもできます。 たとえば、balancer を常に実行させるには、次のコマンドを実行してアクティブタイムウィンドウの設定を消去します。
db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })