ステートフル サービスのレプリカ セットのサイズは、2 つのパラメーターを使用して構成されます。
- TargetReplicaSetSize - サービスのレプリカ セットごとにシステムが作成して維持するレプリカの数
- MinReplicaSetSize - サービスのレプリカ セットごとに許容されるレプリカの最小数
これら 2 つのパラメーターの背後にある基本的な考え方は、このような構成により、2 つのエラーが同時に発生しても、パーティションのクォーラムが失われないようにすることです。 そのような状況は、1 つの計画されたフェールオーバー (ノードやレプリカをダウンさせるアップグレード) と 1 つの計画されていないフェールオーバー (ノード クラッシュ) が行われると発生する可能性があります。
たとえば、TargetReplicaSetSize = 5、MinReplicaSetSize = 3 の場合は、通常 (障害なし)、レプリカ セットの Service Fabric ビューに 5 つのレプリカが表示されます。 障害が発生すると、レプリカ セットの Service Fabric ビューは MinReplicaSetSize に達するまで減少します。
Service Fabricでは、このビューで保持されているレプリカの数のマジョリティ クォーラムが使用されるため、MinReplicaSetSize のマジョリティ クォーラムは、すべての操作の信頼性の最小レベルです。 レプリカの総数が MinReplicaSetSize のマジョリティ クォーラムを下回った場合、それ以上の書き込みは許可されません。 サービスがクォーラム損失状態になった場合、クォーラム損失から復帰するには、レプリカが特定の順序で戻ることが必要な場合があることに注意してください。
重要
TargetReplicaSetSize = 5、MinReplicaSetSize = 3 の例では、MinReplicaSetSize のマジョリティ クォーラムは 2 です。 つまり、3 つの障害が同時に発生し、実行している残りのレプリカが 2 つだけになっても、Service Fabric のレプリカ セットのビューには 3 つのレプリカがまだあり (2 つはアップ、1 つはダウン)、残っている 2 つの実行状態のレプリカで、マジョリティ クォーラムを満たすのに十分です。
最適でない構成の例
TargetReplicaSetSize = 3、MinReplicaSetSize = 2
この種の構成は、クォーラム損失になることがよくあります (計画されたフェールオーバーと計画されていないフェールオーバーが同時に発生すると常に)。 クォーラム損失から回復するには、1 つのレプリカが復帰するだけでは十分ではありません。レプリカ セットの一部であったまさにそのレプリカが、復帰する必要があります。
- パーティションには、3 つのレプリカ A、B、C があります
- レプリカ A がダウンし、Service Fabric はレプリカ セットを 2 (B、C) に減らします
- 計画されていないフェールオーバーが発生してレプリカ B もダウンすると、パーティションはクォーラム損失状態になります
- レプリカ A が復帰した場合、A は現在のレプリカ セット (B、C) の一部ではないので、パーティションはクォーラム損失状態のままです。 レプリカ B が復帰した場合にのみ、クォーラム損失は解消されます。
TargetReplicaSetSize = 3、MinReplicaSetSize = 3
この種の構成は、クォーラム損失になることがよくあります (計画されたフェールオーバーと計画されていないフェールオーバーが同時に発生すると常に)。 ただし、これらのどのレプリカが復帰しても、パーティションはクォーラム損失からすぐに回復します。
警告
この種の構成はまだ最適ではなく、TagetReplicaSetSize =3、MinReplicaSetSize = 2 よりわずかに優れているだけです。
- パーティションには、3 つのレプリカ A、B、C があります
- レプリカ A がダウンしても、レプリカ セットは同じままです (A、B、C)
- 計画されていないフェールオーバーが発生してレプリカ B もダウンすると、パーティションはクォーラム損失状態になります
- レプリカ A または B のいずれかが復帰すると、A と B はどちらも現在のレプリカ セットの一部なので、パーティションのクォーラムはすぐに復元されます
次のステップ
- クォーラム損失と Azure Service Fabric でのディザスター リカバリーについて理解する
- Service Fabric のサポート オプションについて学びます。