負荷分散高可用性
概要
Dorisはデータインポート中の高可用性を確保するための様々なメカニズムを提供しています。本記事では、Dorisのデフォルトのインポート動作と、インポート可用性を向上させるための追加オプション、特に最小書き込みレプリカ数機能について詳しく説明します。
過半数書き込み
デフォルトでは、Dorisはデータの信頼性と一貫性を確保するために過半数書き込み戦略を採用しています:
- 正常に書き込まれたレプリカ数が総レプリカ数の半分を超えた場合、インポートは成功したと見なされます。
- 例えば、3つのレプリカを持つテーブルの場合、インポートが成功したと見なされるには、少なくとも2つのレプリカが正常に書き込まれる必要があります。
動作原理
-
データ配布:インポートタスクは最初に関連するすべてのBEノードにデータを配布します。
-
並列書き込み:各BEノードはデータ書き込み操作を並列で処理します。
-
書き込み確認:データ書き込み完了後、各BEノードはFEに確認を送信します。
-
過半数判定:FEは正常に書き込まれたレプリカ数をカウントし、過半数に達した時点でインポートが成功したと見なします。
-
トランザクションコミット:FEはインポートトランザクションをコミットし、データを外部から見えるようにします。
-
非同期レプリケーション:正常に書き込まれなかったレプリカについては、システムがバックグラウンドで非同期的にデータをレプリケートし、すべてのレプリカ間で最終的な一貫性を確保します。
過半数書き込み戦略は、データの信頼性とシステムの可用性の間のDorisのバランスです。特別な要件があるシナリオに対して、Dorisは最小書き込みレプリカ数などの他のオプションを提供し、システムの柔軟性をさらに向上させます。
最小書き込みレプリカ数
過半数書き込み戦略はデータの信頼性を確保しますが、特定のシナリオではシステムの可用性に影響を与える可能性があります。例えば、2レプリカの状況では、インポートを完了するために両方のレプリカが正常に書き込まれる必要があり、これはインポートプロセス中にレプリカが利用できない状況が許可されないことを意味します。
この問題に対処し、インポートの可用性を向上させるために、DorisはMin Load Replica Numオプションを提供しています。
機能説明
最小書き込みレプリカ数により、ユーザーはデータインポート中に正常に書き込まれる必要があるレプリカの最小数を指定できます。正常に書き込まれたレプリカ数がこの値以上になった場合、インポートは成功したと見なされます。
使用ケース
-
一部のノードが利用できない場合でも、データインポートを保証する必要がある場合。
-
データインポート速度に対する要件が高く、ユーザーがより高い可用性のために一部の信頼性を犠牲にすることを厭わない場合。
設定方法
1. 単一テーブル設定
a. テーブル作成時に設定:
CREATE TABLE example_table
(
id INT,
name STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 10
PROPERTIES
(
'replication_num' = '3',
'min_load_replica_num' = '2'
);
b. 既存のテーブルを変更する:
ALTER TABLE example_table
SET ( 'min_load_replica_num' = '2' );
2. グローバル設定
FE設定項目 min_load_replica_num を通じて設定します。
-
有効な値:0より大きい値
-
デフォルト値:-1(グローバル最小書き込みレプリカ数が有効でないことを示す)
優先度:テーブルプロパティ > グローバル設定 > デフォルト過半数ルール
テーブルプロパティが設定されていないか無効で、グローバル設定が有効な場合、テーブルの最小書き込みレプリカ数は:
min(FE設定のmin_load_replica_num, テーブルのレプリカ数/2 + 1)
FE設定項目の表示と変更については、FE設定ドキュメントを参照してください。
その他の高可用性メカニズム
最小書き込みレプリカ数オプションに加えて、Dorisはインポート可用性を向上させるために以下のメカニズムも採用しています:
-
インポート再試行:一時的な障害によって失敗したインポートタスクを自動的に再試行します。
-
Load Balancing:インポートタスクを異なるBEノードに分散し、単一ポイントへの過度な圧力を回避します。
-
トランザクションメカニズム:データの整合性を保証し、障害発生時に自動的にロールバックします。