ストレージとコンピューティングを分離したクラスターの手動デプロイ
ストレージとコンピューティングを分離したクラスターのデプロイは、次の 8 つのステップで行います。
-
FoundationDB クラスターを準備する:既存の FoundationDB クラスターを使用するか、新しく作成します。
-
S3 または HDFS サービスをデプロイする:既存の共有ストレージを使用するか、新しく構築します。
-
Meta Service をデプロイする:Doris クラスター用の Meta Service をデプロイします。
-
data recycler プロセスをデプロイする:Doris クラスター用の独立した data recycler プロセスをデプロイします。このステップは任意です。
-
FE Master ノードを起動する:最初の FE ノードを Master FE ノードとして起動します。
-
FE Master クラスターを構築する:FE Follower/Observer ノードを追加して FE クラスターを構成します。
-
BE ノードを追加する:BE ノードをクラスターに追加して登録します。
-
Storage Vault を追加する:共有ストレージを使用して、1 つ以上の Storage Vault を作成します。
デプロイを始める前に、適切なバージョンの Doris をダウンロードできます。
前提条件
| 種類 | 要件 |
|---|---|
| オペレーティングシステム | Linux(CentOS 7 以降、Ubuntu 20.04 以降) |
| JDK | OpenJDK 17(JAVA_HOME の設定が必要) |
| FoundationDB | バージョン 7.1.x 系 |
| ネットワーク | ノード間でポートに接続できること(デフォルト:FE 8030、BE 9050、Meta Service 5000) |
| ディスク | SSD を推奨(特に FDB のデータディレクトリ用) |
ステップ 1:FoundationDB を準備する
このセクションでは、fdb_vars.sh と fdb_ctl.sh スクリプトを使用して FDB(FoundationDB)サービスを設定、デプロイ、起動する手順を説明します。doris tools をダウンロードし、fdb ディレクトリから fdb_vars.sh と fdb_ctl.sh を取得できます。
Doris はデフォルトで FDB 7.1.x 系に依存します。すでに FDB がインストールされている場合は、バージョンが 7.1.x 系であることを確認してください。それ以外のバージョンでは、Meta Service の起動に失敗します。
マシンの要件
通常、二重レプリカを持ち、単一マシンの障害に耐えられる FoundationDB クラスターを構成するには、SSD を搭載したマシンが少なくとも 3 台必要です。テスト環境や開発環境では、1 台のマシンでも FoundationDB を構築できます。
fdb_vars.sh スクリプトの設定
fdb_vars.sh スクリプトを設定する際は、次のパラメータを指定する必要があります。
| パラメータ | 説明 | 型 | 例 | 備考 |
|---|---|---|---|---|
| DATA_DIRS | FoundationDB が使用するデータディレクトリ | 絶対パスをコンマで区切ったリスト | /mnt/foundationdb/data1,/mnt/foundationdb/data2,/mnt/foundationdb/data3 | スクリプトを実行する前に、ディレクトリが存在することを確認してください。本番環境では、SSD と専用ディレクトリを推奨します。 |
| FDB_CLUSTER_IPS | クラスターの IP アドレス | IP アドレスをコンマで区切った文字列 | 172.200.0.2,172.200.0.3,172.200.0.4 | 本番クラスターには少なくとも 3 つの IP アドレスを指定してください。最初の IP アドレスがコーディネーターとして使用されます。高可用性のため、マシンを異なるラックに配置してください。 |
| FDB_HOME | FoundationDB のホームディレクトリ | 絶対パス | /fdbhome | デフォルトのパスは /fdbhome です。絶対パスを指定してください。 |
| FDB_CLUSTER_ID | クラスター ID | 文字列 | SAQESzbh | 各クラスターの ID は一意である必要があります。mktemp -u XXXXXXXX で生成できます。 |
| FDB_CLUSTER_DESC | FDB クラスターの説明 | 文字列 | dorisfdb | デプロイに合った分かりやすい値に変更することを推奨します。 |
必要に応じて、次のカスタムパラメータも指定できます。
| パラメータ | 説明 | 型 | 例 | 備考 |
|---|---|---|---|---|
| MEMORY_LIMIT_GB | FDB プロセスのメモリ上限(GB) | 整数 | MEMORY_LIMIT_GB=16 | 使用可能なメモリと FDB プロセスの要件に応じて調整してください。 |
| CPU_CORES_LIMIT | FDB プロセスが使用できる CPU コア数の上限 | 整数 | CPU_CORES_LIMIT=8 | 使用可能な CPU コア数と FDB プロセスの要件に応じて設定してください。 |
FDB クラスターのデプロイ
fdb_vars.sh で環境を設定した後、各ノードで fdb_ctl.sh スクリプトを使用して FDB クラスターをデプロイします。
./fdb_ctl.sh deploy
FDB サービスの起動
FDB クラスターのデプロイ後、fdb_ctl.sh スクリプトを使用して FDB サービスを起動します。
./fdb_ctl.sh start
上記のコマンドは FDB サービスを起動し、クラスターを稼働状態にして、FDB クラスターの接続文字列を取得します。この接続文字列は、後で MetaService の設定に使用できます。
fdb_ctl.sh スクリプトの clean コマンドは FDB のすべてのメタデータを削除し、データ損失を引き起こす可能性があります。本番環境では絶対に使用しないでください。
ステップ 2:S3 または HDFS サービスをインストールする(任意)
Doris のストレージとコンピューティングの分離モードでは、データの保存に S3 または HDFS サービスを使用します。すでに利用できるサービスがある場合は、そのまま使用できます。 ない場合は、以下の簡単な手順で MinIO をデプロイできます。
-
MinIO のダウンロードページで適切なバージョンとオペレーティングシステムを選び、対応する Server と Client のバイナリまたはインストールパッケージをダウンロードします。
-
MinIO Server を起動します。
export MINIO_REGION_NAME=us-east-1
export MINIO_ROOT_USER=minio # In older versions, this setting is MINIO_ACCESS_KEY=minio
export MINIO_ROOT_PASSWORD=minioadmin # In older versions, this setting is MINIO_SECRET_KEY=minioadmin
nohup ./minio server /mnt/data 2>&1 & -
MinIO Client を設定します。
# If you installed the client from an installation package, the client is named mcli. If you downloaded the client binary directly, it is named mc.
./mc config host add myminio http://127.0.0.1:9000 minio minioadmin -
バケットを作成します。
./mc mb myminio/doris -
動作を確認します。
# Upload a file
./mc mv test_file myminio/doris
# View the file
./mc ls myminio/doris
ステップ 3:Meta Service をデプロイする
-
設定
./conf/doris_cloud.confファイルでは、主に次のパラメータを変更します。brpc_listen_port:Meta Service の待ち受けポートです。デフォルトは 5000 です。fdb_cluster:FoundationDB クラスターの接続情報です。FoundationDB のデプロイ時に取得します。(Doris が提供するfdb_ctl.shスクリプトで FDB をデプロイした場合は、$FDB_HOME/conf/fdb.clusterファイルで確認できます。)
設定例:
brpc_listen_port = 5000
fdb_cluster = xxx:yyy@127.0.0.1:4500注:
fdb_clusterの値は、FoundationDB マシン上の/etc/foundationdb/fdb.clusterファイルの内容と一致させてください。(Doris が提供するfdb_ctl.shスクリプトで FDB をデプロイした場合は、$FDB_HOME/conf/fdb.clusterファイルで確認できます。)次の例では、ファイルの最終行を
doris_cloud.confのfdb_clusterフィールドに指定します。cat /etc/foundationdb/fdb.cluster
DO NOT EDIT!
This file is auto-generated, it is not to be edited by hand.
cloud_ssb:A83c8Y1S3ZbqHLL4P4HHNTTw0A83CuHj@127.0.0.1:4500 -
起動と停止
起動前に、環境変数
JAVA_HOMEが正しく設定され、OpenJDK 17 を指していることを確認してください。その後、msディレクトリに移動します。起動コマンドは次のとおりです。
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --daemon起動スクリプトの戻り値が 0 なら起動成功、それ以外なら起動失敗です。起動に成功すると、標準出力の最終行に "doris_cloud start successfully" と表示されます。
停止コマンドは次のとおりです。
bin/stop.sh本番環境では、Meta Service ノードを少なくとも 3 台用意してください。
-
複数の設定ファイルを使用する(任意、4.0.8 以降)
バージョン 4.0.8 以降では、
bin/start.shが環境変数CONF_FILESを通じて複数の設定ファイルを受け付けます。これにより、共通設定とノード固有の設定を分けて管理しやすくなります。export CONF_FILES="common.conf,doris_cloud.conf"
bin/start.sh --daemon適用されるルールは次のとおりです。
- 複数のファイルはコンマで区切ります。ファイルは左から右の順に読み込まれます。
- 相対パスは
${DORIS_HOME}/conf/を基準に解決されます。絶対パスも使用できます。ワイルドカードもサポートされます(例:conf.d/*.conf)。 - 同じ変数が複数回定義されている場合は、最初の定義が適用されます。後続のファイルでは上書きされません。
- シェルですでにエクスポートされている環境変数が最優先され、設定ファイルによって上書きされることはありません。
- 存在しないファイルはスキップされ、起動エラーにはなりません。
CONF_FILESを指定しない場合、以前のバージョンと同様にdoris_cloud.confのみが読み込まれます。
注この仕組みが扱うのは、設定ファイル内に
KEY=VALUE形式で記述された大文字の環境変数(例:JAVA_HOME)だけです。Meta Service 自体の設定項目は、引き続きdoris_cloud.confから読み込まれます。
ステップ 4:data recycler の独立デプロイ(任意)
Meta Service 自体には、メタデータ管理とデータリサイクルの両方の機能があります。これらの機能は別々にデプロイできます。data recycler を独立してデプロイする場合は、次の手順に従ってください。
-
新しい作業ディレクトリ(例:
recycler)を作成し、msディレクトリの内容をコピーします。cp -r ms recycler -
新しいディレクトリの設定ファイルで、BRPC の待ち受けポート
brpc_listen_portとfdb_clusterの値を変更します。data recycler を起動します。
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --recycler --daemonメタデータ操作機能のみを起動します。
export JAVA_HOME=${path_to_jdk_17}
bin/start.sh --meta-service --daemon
ステップ 5:FE Master ノードを起動する
-
fe.conf ファイルを設定する
fe.confファイルで、次の主要なパラメータを設定します。deploy_mode- 説明:Doris の起動モードを指定します。
- 形式:
cloudはストレージとコンピューティングの分離モードを示します。それ以外の値は、ストレージとコンピューティングの統合モードを示します。 - 例:
cloud
cluster_id- 説明:ストレージとコンピューティングを分離したアーキテクチャーにおける、クラスターの一意の識別子です。異なるクラスターには異なる
cluster_idの値を使用する必要があります。 - 形式:int
- 例:シェルスクリプト
echo $(($((RANDOM << 15)) | $RANDOM))を使用してランダムな ID を生成できます。 - 注:異なるクラスターには異なる
cluster_idの値を使用する必要があります。
- 説明:ストレージとコンピューティングを分離したアーキテクチャーにおける、クラスターの一意の識別子です。異なるクラスターには異なる
meta_service_endpoint- 説明:Meta Service のアドレスとポートです。
- 形式:
IP:Port - 例:
127.0.0.1:5000。複数の Meta Service エンドポイントをコンマで区切って設定できます。
-
FE Master ノードを起動する
起動コマンド:
bin/start_fe.sh --daemon最初の FE プロセスはクラスターを初期化し、FOLLOWER ロールで動作します。MySQL クライアントで FE に接続し、
show frontendsを実行して、起動した FE が Master であることを確認してください。
ステップ 6:FE Follower/Observer ノードを登録する
ほかのノードでは、同じ手順で設定ファイルを変更して起動します。その後、MySQL クライアントで Master ロールの FE に接続し、次の SQL コマンドで FE ノードを追加します。
ALTER SYSTEM ADD FOLLOWER "host:port";
host:port を FE ノードの実際のアドレスと edit-log ポートに置き換えてください。詳細は ADD FOLLOWER と ADD OBSERVER を参照してください。
本番環境では、最初の FE を含め、FOLLOWER ロールの FE ノードの総数を奇数にしてください。通常、3 台の FOLLOWER で十分です。Observer ロールの FE ノードは任意の台数にできます。
ステップ 7:BE ノードを追加する
Backend ノードをクラスターに追加するには、各 Backend で次の手順を実行します。
-
be.conf を設定する
be.confファイルで、次の主要なパラメータを設定します。- deploy_mode
- 説明:Doris の起動モードを指定します。
- 形式:
cloudはストレージとコンピューティングの分離モードを示します。それ以外の値は、ストレージとコンピューティングの統合モードを示します。 - 例:cloud
- file_cache_path
- 説明:ファイルキャッシュに使用するディスクパスなどのパラメータです。ディスクごとに要素を持つ配列で指定します。
pathはディスクパスを指定し、total_sizeはキャッシュサイズを制限します。-1 または 0 はディスク領域全体を使用することを意味します。 - 形式:[{"path":"/path/to/file_cache","total_size":21474836480},{"path":"/path/to/file_cache2","total_size":21474836480}]
- 例:[{"path":"/path/to/file_cache","total_size":21474836480},{"path":"/path/to/file_cache2","total_size":21474836480}]
- デフォルト:[{"path":"${DORIS_HOME}/file_cache"}]
- 説明:ファイルキャッシュに使用するディスクパスなどのパラメータです。ディスクごとに要素を持つ配列で指定します。
- deploy_mode
-
BE プロセスを起動する
次のコマンドで Backend を起動します。
bin/start_be.sh --daemon -
BE をクラスターに追加する
MySQL クライアントで任意の FE ノードに接続します。
ALTER SYSTEM ADD BACKEND "<ip>:<heartbeat_service_port>" [PROPERTIES properties];<ip>を新しい Backend の IP アドレスに、<heartbeat_service_port>を設定済みのハートビートサービスのポートに置き換えてください(デフォルトは 9050)。PROPERTIES を使用して、BE が所属するコンピュートグループを設定できます。
詳しい使い方は、ADD BACKEND と REMOVE BACKEND を参照してください。
-
BE の状態を確認する
Backend のログファイル(
be.log)を調べ、正常に起動してクラスターに参加したことを確認します。次の SQL コマンドでも Backend の状態を確認できます。
SHOW BACKENDS;クラスター内のすべての Backend と、それぞれの現在の状態が表示されます。
ステップ 8:Storage Vault を追加する
Storage Vault は、Doris のストレージとコンピューティングを分離したアーキテクチャーの重要な構成要素です。データを保存する共有ストレージ層を表します。HDFS または S3 互換のオブジェクトストレージを使用して、1 つ以上の Storage Vault を作成できます。Storage Vault の 1 つをデフォルトに設定できます。システムテーブルと Storage Vault を指定しないテーブルは、このデフォルトの Storage Vault に保存されます。デフォルトの Storage Vault は削除できません。以下では、Doris クラスター用の Storage Vault の作成方法を説明します。
-
HDFS Storage Vault を作成する
SQL で Storage Vault を作成するには、MySQL クライアントで Doris クラスターに接続します。
CREATE STORAGE VAULT IF NOT EXISTS hdfs_vault
PROPERTIES (
"type"="hdfs",
"fs.defaultFS"="hdfs://127.0.0.1:8020"
); -
S3 Storage Vault を作成する
S3 互換のオブジェクトストレージを使用して Storage Vault を作成するには、次の手順に従います。
- MySQL クライアントで Doris クラスターに接続します。
- 次の SQL コマンドを実行して S3 Storage Vault を作成します。
CREATE STORAGE VAULT IF NOT EXISTS s3_vault
PROPERTIES (
"type"="S3",
"s3.endpoint"="https://s3.us-east-1.amazonaws.com",
"s3.access_key" = "ak",
"s3.secret_key" = "sk",
"s3.region" = "us-east-1",
"s3.root.path" = "ssb_sf1_p2_s3",
"s3.bucket" = "doris-build-1308700295",
"provider" = "S3"
);ほかのオブジェクトストレージサービスで Storage Vault を作成する方法は、Storage Vault の作成 を参照してください。
-
デフォルトの Storage Vault を設定する
次の SQL 文でデフォルトの Storage Vault を設定します。
SET <storage_vault_name> AS DEFAULT STORAGE VAULT
FAQ
質問:Meta Service の起動時に「FDB version mismatch」というエラーが発生する場合は?
Doris はデフォルトで FDB 7.1.x 系に依存します。fdbserver --version を実行して、インストールされている FoundationDB のバージョンを確認してください。バージョンが一致しない場合は、正しいバージョンの FDB を再インストールしてください。
質問:FE ノードが正常に起動し、Master になったことを確認するには?
次のコマンドを実行して確認します。
mysql -h <fe_host> -P 9030 -u root -e "SHOW FRONTENDS;"
出力で、該当する FE の Role 列が MASTER であることを確認してください。
質問:起動後も BE ノードが「Starting」状態のままの場合は、どう調査すればよいですか?
次の手順で調査します。
- BE のログ
be.logでエラーメッセージを確認します。 meta_service_endpointが正しく設定され、Meta Service に接続できることを確認します。deploy_modeがcloudに設定されていることを確認します。SHOW BACKENDS;を実行して、詳細なエラーの説明を確認します。
質問:Storage Vault が正常に作成されたことを確認するには?
次の SQL を実行して確認します。
SHOW STORAGE VAULT;
作成した Vault の状態が OK であることを確認してください。
質問:BE ノードを追加すると「backend already exists」というエラーが返される場合は?
BE ノードがすでに存在するか、以前の登録情報が完全に削除されていない可能性があります。次のコマンドで古い登録情報を削除してから、再試行してください。
ALTER SYSTEM DROP BACKEND "<ip>:<port>";
トラブルシューティング
FE が Meta Service に接続できない
- 症状:FE のログに「connect to meta service failed」と表示されます。
- 調査手順:
- Meta Service プロセスが動作していることを確認します:
ps aux | grep doris_cloud。 meta_service_endpointの形式が正しいことを確認します(IP:Port形式)。- ノード間でネットワーク接続が可能なことを確認します(デフォルトのポートは 5000)。
- Meta Service プロセスが動作していることを確認します:
「Too many open files」で BE の起動に失敗する
- 調査手順:
ulimit -nを実行して、現在の上限を確認します。be.confにmax_open_files = 65535を追加します。- または、
ulimit -n 65535を実行してから BE を再起動します。
FDB クラスターの起動に失敗する
- 調査手順:
fdb_vars.shのDATA_DIRSに指定したディレクトリが存在し、権限が適切であることを確認します。- すべてのノードで
FDB_CLUSTER_IPSが同じように設定されていることを確認します。 /var/log/foundationdb/fdbserver.logの FDB ログを確認します。
注意事項
- FE と BE の
meta_service_endpointには、メタデータ操作を担当する Meta Service プロセスのみを指定してください。 - data recycler プロセスを
meta_service_endpointに指定しないでください。