Apache Doris
S3 リポジトリを通じて Apache Doris のテーブルを RustFS にバックアップし、リストアします。
このガイドでは、リアルタイム分析データウェアハウスである Apache Doris を、S3 バックアップリポジトリを通じて RustFS に接続します。オールインワンの Doris コンテナを起動し、RustFS バケットを指す S3 リポジトリを作成してテーブルをバックアップし、削除したあと RustFS からリストアします。この流れは apache/doris:all-in-one-4.1.3 と rustfs/rustfs-x86-musl:v2.3.1 で検証済みです。
Docker が必要です。このデプロイはローカルでの統合テストを目的としており、本番環境向けではありません。
アーキテクチャ
リポジトリは doris-backups バケット配下の名前付き S3 ロケーションです。BACKUP SNAPSHOT はテーブルのメタデータとタブレットのデータファイルをアップロードし、RESTORE SNAPSHOT はそれらを新しいテーブルへダウンロードします。
Doris を起動してリポジトリを作成する
先にバケットを作成します。Doris はバケットを作成しません。
rc alias set rustfs http://<your-rustfs-endpoint>:9000 <your-access-key> <your-secret-key>
rc mb rustfs/doris-backupsRustFS と同じ Docker ネットワーク上でオールインワンコンテナを起動します。
docker run -d --name doris --network oo-rustfs_default \
-p 8030:8030 -p 9030:9030 apache/doris:all-in-one-4.1.3フロントエンドが健全になるのを待ち、MySQL プロトコルで接続します(ポート 9030、ユーザー root、オールインワンイメージではパスワードなし)。
行を持つテストテーブルを作成します。
CREATE DATABASE rustfs_demo;
CREATE TABLE rustfs_demo.events
(id INT, name VARCHAR(50))
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
INSERT INTO rustfs_demo.events VALUES (1, 'doris-on-rustfs'), (2, 'backup-test');エンドポイントを RustFS コンテナの IP アドレスに、両方の認証情報プレースホルダーを置き換えて、S3 リポジトリを作成します。
CREATE REPOSITORY `rustfs_repo`
WITH S3
ON LOCATION "s3://doris-backups/rustfs-repo"
PROPERTIES (
"AWS_ENDPOINT" = "http://<rustfs-container-ip>:9000",
"AWS_ACCESS_KEY" = "<your-access-key>",
"AWS_SECRET_KEY" = "<your-secret-key>",
"AWS_REGION" = "us-east-1",
"AWS_PATH_STYLE_ACCESS" = "true"
);Doris 4.1 は AWS_PATH_STYLE_ACCESS を有効にしても、バケットをエンドポイントのホスト名へ解決します。そのためホスト名のエンドポイントは UnknownHostException: doris-backups.rustfs で失敗します。コンテナの IP アドレスを使うとパススタイルアクセスのリクエストになり、動作します。SHOW REPOSITORIES で、リポジトリが空の ErrMsg とともに登録されたことを確認します。
テーブルを RustFS へバックアップする
テーブルのスナップショットを取得します。
BACKUP SNAPSHOT rustfs_demo.demo_snapshot
TO rustfs_repo
ON (events);ステートメントはすぐに戻ります。バックアップジョブはバックグラウンドで実行されます。状態を監視します。
SHOW BACKUP;State が FINISHED になるまで待ちます。スナップショットのメタデータとタブレットのデータファイルは、この時点でバケット内のオブジェクトになっています。
RustFS 内のバックアップを確認する
バケットを一覧します。
rc ls rustfs/doris-backups/ -rリポジトリには、リポジトリ記述子、スナップショットのメタデータ、タブレットファイルが保存されます。
rustfs-repo/__palo_repository_rustfs_repo/__repo_info
rustfs-repo/__palo_repository_rustfs_repo/__ss_demo_snapshot/__meta.d50ecf9b...
rustfs-repo/__palo_repository_rustfs_repo/__ss_demo_snapshot/__ss_content/.../...dat...
RustFS からテーブルをリストアする
テーブルを削除し、スナップショットからリストアします。タイムスタンプは SHOW SNAPSHOT ON REPOSITORY rustfs_repo; が表示するスナップショット名から取ります。
DROP TABLE rustfs_demo.events;
RESTORE SNAPSHOT rustfs_demo.demo_snapshot
FROM rustfs_repo
ON (events)
PROPERTIES (
"backup_timestamp" = "2026-09-21-16-35-12",
"replication_num" = "1"
);リストアジョブの完了を待ち、データを確認します。
SHOW RESTORE;
SELECT count(*) FROM rustfs_demo.events;2デプロイを停止またはリセットする
データを残したまま Doris を停止します。
docker rm -f dorisバックアップは doris-backups バケットに残り、同じリポジトリを登録した任意の Doris クラスターへリストアできます。削除する場合はバケットを取り除きます。
rc rb rustfs/doris-backups --forceトラブルシューティング
リポジトリ作成時に UnknownHostException: doris-backups.rustfs が出る
Doris はバケットとエンドポイントから仮想ホスト形式のホスト名を組み立てています。上記のとおり、AWS_ENDPOINT に RustFS コンテナの IP アドレスを使い、AWS_PATH_STYLE_ACCESS = "true" を併用します。
バックアップが長時間 SNAPSHOTING のままになる
バックエンドがタブレットファイルをアップロードしています。バックエンドが健全で(SHOW BACKENDS;)、エンドポイントへ到達できることを確認します。オールインワンイメージでは、起動後に両方のプロセスが準備完了を報告するまで 1〜2 分かかります。
Failed to create repository: ... file status
バケットが存在しないか、認証情報が誤っています。rc mb で doris-backups を作成し、アクセスキーの組を再確認します。
次のステップ
- 追加の Doris 操作を採用する前に、S3 互換性ノートを確認します。
- アクセスキー管理で、本番用の専用認証情報を作成します。
- 定期スナップショットをスケジュールするには、Doris のバックアップとリストアのドキュメントに従います。