ロードの高可用性
Doris には、データロード時の高可用性を確保するための仕組みが複数あります。このドキュメントでは、Doris のデフォルトのロード動作と、ロードの可用性を高めるための追加オプション、特に 最小ロードレプリカ数(Min Load Replica Num) 機能について詳しく説明します。
このドキュメントでは、次のことを学べます。
- Doris のデフォルトの多数派書き込み方式と、その仕組みを理解する。
- 一部のレプリカが利用できない場合に、最小ロードレプリカ数を使ってロードの成功率を高める。
- テーブル単位とグローバルの設定方法、および両者の優先順位を把握する。
適用シナリオ
| シナリオ | 推奨方式 | 説明 |
|---|---|---|
| データの信頼性を最も重視する | デフォルトの多数派書き込み | 過半数のレプリカへの書き込みに成功した場合にのみ、ロードが成功したとみなされる |
| 一部の BE ノードが一時的に利用できない | min_load_replica_num を設定する | 過半数に満たない数のレプリカへの書き込みでも、ロードの成功を許容する |
| ロード速度を重視する | min_load_replica_num を設定する | 整合性より可用性を優先する |
デフォルトの多数派書き込み方式
デフォルトでは、Doris はデータの信頼性と整合性を確保するために多数派書き込み方式を使用します。
- 書き込みに成功したレプリカの数がレプリカ総数の半数を超えると、ロードは成功したとみなされます。
- たとえば、レプリカが三つあるテーブルでは、ロードが成功するには少なくとも 2 つのレプリカへの書き込みに成功する必要があります。
動作の仕組み
多数派書き込みは、次の流れで実行されます。
- データの分散: ロードタスクは、まず対象となるすべての BE ノードにデータを分散します。
- 並列書き込み: 各 BE ノードは、データの書き込み処理を並列に実行します。
- 書き込みの確認応答: 各 BE ノードは、データの書き込みを完了すると FE に確認応答を送ります。
- 多数派の確認: FE は書き込みに成功したレプリカの数を集計します。その数が過半数に達すると、ロードは成功したとみなされます。
- トランザクションのコミット: FE はロードトランザクションをコミットし、データを外部から参照できるようにします。
- 非同期レプリケーション: 書き込みに成功しなかったレプリカには、システムがバックグラウンドでデータを非同期に複製し、最終的にすべてのレプリカ間で整合性を確保します。
多数派書き込み方式は、Doris におけるデータの信頼性とシステムの可用性のバランスを取ります。特別な要件がある場合には、最小ロードレプリカ数などのオプションを使って、システムの柔軟性をさらに高めることができます。
最小ロードレプリカ数
多数派書き込み方式はデータの信頼性を確保する一方で、状況によってはシステムの可用性に影響します。たとえば、レプリカが二つの場合、ロードを完了するには両方への書き込みに成功する必要があります。そのため、ロード中は両方のレプリカが利用できる状態でなければなりません。
この問題に対処し、ロードの可用性を高めるために、Doris は 最小ロードレプリカ数(Min Load Replica Num) オプションを提供します。
機能の説明
最小ロードレプリカ数では、データのロード時に書き込みが成功していなければならないレプリカの最小数を指定できます。書き込みに成功したレプリカの数がこの値以上であれば、ロードは成功したとみなされます。
代表的なユースケース
- 一部のノードが利用できない場合でも、データを正常にロードする必要があるとき。
- ロード速度を重視し、可用性を高めるために整合性をある程度犠牲にできるとき。
設定方法
最小ロードレプリカ数は、テーブル単位の設定とグローバル設定の両方に対応しています。
1. テーブル単位の設定
方法 A: テーブル作成時に設定する
min_load_replica_num を PROPERTIES に含めた CREATE TABLE 文を実行します。
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 を使って動的に調整します。
ALTER TABLE example_table
SET ( 'min_load_replica_num' = '2' );
2. グローバル設定
FE の設定項目 min_load_replica_num で指定します。
| 項目 | 値 |
|---|---|
| 設定項目 | min_load_replica_num |
| 有効な値 | 0 より大きい値 |
| デフォルト値 | -1(グローバルの最小ロードレプリカ数が無効であることを示す) |
FE の設定項目の確認と変更については、FE 設定ドキュメントを参照してください。
設定の優先順位
テーブルプロパティとグローバル設定の両方を指定した場合は、次の優先順位が適用されます。
テーブルプロパティ > グローバル設定 > デフォルトの多数派ルール
テーブルプロパティが未設定または無効で、グローバル設定が有効な場合、そのテーブルの最小ロードレプリカ数は次の値になります。
min(min_load_replica_num configured in FE, table replica count / 2 + 1)
その他の高可用性の仕組み
Doris は、最小ロードレプリカ数のオプションに加え、ロードの可用性を高めるために次の仕組みも採用しています。
| 仕組み | 機能 |
|---|---|
| ロードの再試行 | 一時的な問題で失敗したロードタスクを自動的に再試行する |
| 負荷分散 | ロードタスクを異なる BE ノードに分散し、単一ノードに負荷が集中するのを防ぐ |
| トランザクションの仕組み | データの整合性を確保し、失敗時には自動的にロールバックする |
よくある質問(FAQ)
Q1: min_load_replica_num に replication_num より大きい値を設定できますか?
いいえ。最小ロードレプリカ数は「ロード中に書き込みに成功していなければならないレプリカの最小数」を意味するため、レプリカの総数以下にする必要があります。グローバル設定が適用される場合、システムは自動的に min(min_load_replica_num configured in FE, table replica count / 2 + 1) を採用します。
Q2: min_load_replica_num を有効にした後、書き込みに成功しなかったレプリカではデータが失われますか?
いいえ。ロードのコミット後、書き込みに成功しなかったレプリカにも、バックグラウンドでの非同期レプリケーションによって最終的にデータが補われ、レプリカ間の整合性が確保されます。
Q3: min_load_replica_num はいつ使用すべきですか?
一部の BE ノードが一時的に利用できない場合、レプリカのスケジューリングがまだ完了していない場合、または強い整合性よりもロードの可用性を重視する場合に、このオプションを有効にできます。これにより、少数のレプリカの異常が原因でロードがブロックされるのを防げます。
Q4: テーブルプロパティとグローバル設定の両方を指定した場合、どちらが適用されますか?
テーブルプロパティが優先されます。グローバル設定が使用されるのは、テーブルプロパティが未設定または無効な場合だけです。どちらも設定されていない場合は、デフォルトの多数派ルールが適用されます。