LinuCレベル4 システムアーキテクト 可用性の設計 問22
可用性の設計/データレプリケーションと災害対策同一データセンター内の2台のサーバー(主系:NVMe SSD搭載、副系:SATA HDD搭載)でDRBD(Protocol C)を使ってPostgreSQLのデータ領域をブロックレベルでレプリケーションする構成を検討している。この設計上の問題点として最も適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル4 システムアーキテクトの出題範囲「可用性の設計」に対応。実際の試験問題ではありません)
- AProtocol CはローカルへのNVMe書き込みとリモートのHDDへの書き込みが両方完了した時点でACKを返すため、副系のHDDのランダム書き込み性能が主系の書き込みレイテンシの下限を決めることになる
- BProtocol Cはローカルへの書き込み完了のみでACKを返すため、副系のHDDの速さは主系の書き込みレイテンシに影響せず、副系内でI/Oキューが蓄積されるだけである
- CProtocol Cはリモートノードのバッファメモリへの受信でACKを返すため、副系にHDDを使っていても主系のNVMeの書き込み速度に引きずられることはなく、性能問題は発生しない
- DProtocol Cでは主系のNVMeの速さがACKタイミングを決めるため、副系のストレージ種別にかかわらず常にNVMe相当の書き込みレイテンシが確保され、性能問題はフェイルオーバー後にのみ現れる
正解:A
解説
DRBDのProtocol C(同期モード)では、主系のローカルストレージへの書き込みと副系のリモートストレージへの書き込みが両方完了した時点でACKをアプリケーションに返します。副系にHDDを使う場合、NVMe SSDと比べてHDDのランダム書き込みレイテンシが格段に高いため、副系のI/O性能が全体の書き込みレイテンシのボトルネックになります。PostgreSQLのような小さなランダム書き込みが多い用途では、副系にもNVMeやSSDを使うか、主系のローカル書き込みと副系のメモリ受信でACKを返すProtocol Bへの変更を検討する必要があります。
選択肢ごとの解説
- A正しい。Protocol CはローカルとリモートのディスクI/Oを両方待ってACKを返します。副系のHDDがランダム書き込みのボトルネックになり、主系のNVMeの性能を活かせなくなります。副系にも高速ストレージを使うか、Protocol Bへの変更を検討する必要があります。
- B誤り。ローカルの書き込み完了のみでACKを返すのはProtocol A(非同期)の動作です。Protocol CはリモートのディスクI/O完了まで必ず待ちます。副系のHDDの遅さは主系の書き込みレイテンシに直接影響します。
- C誤り。リモートノードのバッファメモリへの受信でACKを返すのはProtocol B(メモリ同期)の動作です。Protocol Cはリモートのディスク書き込み完了を待ちます。
- D誤り。Protocol Cのメカニズム上、主系のストレージがどれだけ速くてもリモートのディスク書き込みが完了するまでACKは返されません。副系のHDDが遅ければ、その遅さが即座に主系の書き込みレイテンシに反映されます。