同期モードのミラーディスクに対して、小さなサイズのシリアルな書き込み要求を多数おこなう場合や、Oracle データベースの作成や拡張をおこなった場合に、書き込みの完了に著しく時間がかかります。
非同期モードやミラーブレイクをした状態ではすぐに書き込みが完了します。原因について教えてください。
Linux OS による TCP 通信の確認応答の遅延(TCP遅延ACK)の影響により発生することを確認しています。
TCP遅延ACK の詳細については以下の Red Hat 社の情報やご利用の OS 観点でご確認ください。
TCP 遅延 ACK と遅延送信を制御するにはどうすればよいですか?
TCP遅延ACK の影響を受けているかどうかは、ミラー統計情報の Sync Ack Time, Cur(ミラー同期の ACK 応答時間、最新値)を確認します。影響を受けている場合は、ミラーディスクへの書き込みをおこなっている期間に Sync Ack Time, Cur が約 40 ミリ秒となる状態が継続します。シリアルな書きこみ要求を連続しておこなう場合、I/O 要求のたびに約 40 ミリ秒の応答遅延が積み重なることで全体の完了が遅くなります。
この影響を回避するには、下記の設定をおこない OS の TCP遅延ACK を無効(quickack を有効)にします。
<NetworkManager による quickack 設定手順例>
- Red Hat Enterprise Linux 9.1 からは NetworkManager が quickack ルート属性をサポートしています。本設定方法では OS 再起動後も quickack の設定が維持されます。
両サーバで実施します。
-
ip route show コマンドでルート情報を確認します。
ミラーディスクコネクトで使用するネットワークに静的ルートがない場合は、ip route add コマンドで静的ルートを作成します。
-
nmcli コマンドにてミラーディスクコネクトで使用する静的ルートに対して quickack オプションを有効化し、TCP遅延ACK を無効化します。
例)
# nmcli connection modify <connection> ipv4.routes "<ROUTE> quickack=1"
-
手順2. で設定をしたネットワークデバイスを再起動します。
例)
# nmcli device disconnect <device>
# nmcli device connect <device>
-
ip route show コマンドで quickack に 1 が設定されていることを確認します。
|
<IP コマンドによる quickack 設定手順例>
- 本設定は永続的ではなく OS の起動のたびに再設定が必要になるため、OS の起動時に設定がおこなわれるようにしてください。
両サーバで実施します。
-
ip route show コマンドでルート情報を確認します。
ミラーディスクコネクトで使用するネットワークに静的ルートがない場合は、ip route add コマンドで静的ルートを作成します。
-
ip route change コマンドにてミラーディスクコネクトで使用する静的ルートに対して quickack オプションを有効化し、TCP遅延ACK を無効化します。
例)
# ip route change <ROUTE> dev eth0 proto kernel scope link src <ADDRESS> metric <METRIC> quickack 1
-
ip route show コマンドで quickack に 1 が設定されていることを確認します。
|
TCP遅延ACK の設定方法は OS に依存しますので、詳細は OS 観点でご確認ください。
本設定をおこなった後に、同期モードのミラーディスクへの書き込み時間が改善されるかをご確認ください。
ミラー統計情報については、メンテナンスガイドのミラー統計情報採取機能をご確認ください。