複数マシン間で TiDB Cloud Filesystem を共有する
このワークフローでは、2 台のマシン上のユーザー、自動化処理、またはエージェントに対して、1 つの共有ワークスペースを提供します。scp やアーカイブのアップロードによる特定時点のコピーをやり取りすることなく、変更内容を両方のマシンから見える状態に保つ必要がある場合に使用します。
仕組み
マシン A が Filesystem を作成し、マシン B 用に別個のオーナートークンを生成します。その後、両方のマシンはデータプレーンコマンドまたはマウントされたディレクトリを通じて同じリモート名前空間にアクセスするため、書き込みはフラッシュ後にどちらのインターフェースからも見えるようになります。これにより、手動でのスナップショット同期やオブジェクトストレージ固有の転送ロジックなしで、共有ディレクトリのような動作を実現できます。
マシンごとに別のトークンを使用すると、マシン A を中断することなくマシン B のアクセスを取り消せます。両方のトークンはオーナーアクセスを付与するため、シークレットとして転送および保管してください。
前提条件
- マシン A で
tiが設定済みであること。 - 両方のマシンに
tiがインストールされていること。 - マシン A に
jqがインストールされていること。 - 安全なシークレット転送チャネルがあること。
Step 1. マシン A で Filesystem を作成する
umask 077
ti fs create-file-system --wait > ./filesystem.json
export FILE_SYSTEM_ID="$(jq -r '.file_system_id' ./filesystem.json)"
export TI_FS_TOKEN="$(jq -r '.fs_token' ./filesystem.json)"
ti fs generate-file-system-token \
--file-system-id "$FILE_SYSTEM_ID" \
--token-name machine-b \
--ttl 720h > ./machine-b-token.json
printf 'from machine A\n' | ti fs copy-file \
--from-stdin \
--to-remote /shared/origin.txt
machine-b-token.json の fs_token はシークレットマネージャーを通じて転送し、正規のリージョンコードを伝えてください。コントロールプレーン操作のために FILE_SYSTEM_ID はマシン A に保持し、トークンを安全に保管した後は両方の JSON ファイルを削除してください。
Step 2. マシン B をメモリ内で設定する
export TI_FS_TOKEN="<owner-token-from-secret-manager>"
export TI_REGION_CODE="<filesystem-region-code>"
TI_REGION_CODE には、Filesystem を作成したリージョンを設定します。ti configure は不要です。
Step 3. マシン B で直接可視性を確認する
ti fs read-file --path /shared/origin.txt
printf 'from machine B\n' | ti fs copy-file --from-stdin --to-remote /shared/second.txt
Step 4. マウントとデータプレーンの可視性を確認する
mkdir -p /path/to/shared-workspace
ti fs mount-file-system \
--mount-path /path/to/shared-workspace
cat /path/to/shared-workspace/shared/origin.txt
printf 'written through mount\n' > /path/to/shared-workspace/shared/mounted.txt
# Graceful unmount flushes pending writes before the data-plane read.
ti fs unmount-file-system --mount-path /path/to/shared-workspace
ti fs read-file --path /shared/mounted.txt
最初の読み取りにより、データプレーン経由の書き込みがマウント経由で見えることを確認できます。最後の読み取りにより、マウント経由の書き込みがフラッシュ後にデータプレーンから見えることを確認できます。
クリーンアップ
マシン B での作業
Step 4 の graceful アンマウント後、現在のシェルから認証情報を削除します。
unset TI_FS_TOKEN TI_REGION_CODE
マシン A での作業
rm -f ./filesystem.json ./machine-b-token.json
ti fs list-file-system-tokens --file-system-id "$FILE_SYSTEM_ID" --output text
ti fs delete-file-system-token \
--file-system-id "$FILE_SYSTEM_ID" \
--token-id "<machine-b-token-id>"
ti fs delete-file-system \
--file-system-id "$FILE_SYSTEM_ID"
セキュリティに関する注意事項
- 各 FS トークンはオーナーアクセスを付与します。チャットやコマンド履歴ではなく、シークレットとして転送し、マシンごとに別のトークンを使用してください。
- 複数のライターが同じパスを上書きする可能性があるため、ワークフローレベルで所有権を調整してください。
- graceful アンマウントが完了する前にマシンを終了しないでください。FUSE マウントをオンラインのまま維持しつつリモート永続性が必要な場合にのみ、明示的な drain を使用してください。