Gitness 基盤におけるデータ保護と復旧プロセス
DevOps プロセスにおいて、Gitness はコード管理から CI/CD パイプラインまでをサポートする重要な役割を担っています。しかし、システム障害や人的ミスによるデータ損失は開発フローに重大な影響を与えます。そのため、堅牢な災害復旧(DR)計画の策定は必須です。ここでは、データの階層化保護から具体的なバックアップ手法、復旧手順までの全体像を解説します。
保護戦略とデータ分類
Gitness の DR アプローチは、多層防御に基づいています。プラットフォーム内のデータをカテゴリ別に分類し、それぞれに適した保護レベルを適用します。
データタイプ別保護モデル
| データ種類 | 保存先 | 保護手段 |
|---|---|---|
| メタデータ | リレーショナルデータベース | トランザクションログ + 定期ダンプ |
| リポジトリ | Git ストレージ | ミラーリング + ソフトデリート |
| ビルド成果物 | オブジェクトストレージ | クロスリージョン複製 |
目標指標の定義
ビジネス要件に応じて以下の復旧目標を設定することが推奨されます。
| 対象 | RTO(復旧時間目標) | RPO(復旧時点目標) |
|---|---|---|
| システム設定・ユーザー情報 | 60 分未満 | 5 分未満 |
| ソースコード履歴 | 120 分未満 | 60 分未満 |
| アーティファクト | 240 分未満 | 24 時間以内 |
バックアップの実装方法
データベースの保全
PostgreSQL を利用している場合、論理バックアップを用いたスクリプトを Cron で動作させます。
#!/bin/bash
# 変数定義
DB_CONTAINER=gitness_postgres
BACKUP_DIR="/mnt/external_storage/dumps"
DATE_STAMP=$(date +"%Y%m%d_%H%M")
# ディレクトリ確保
mkdir -p $BACKUP_DIR
# データベースフルダンプ
echo "Starting full dump..."
docker exec -i $DB_CONTAINER pg_dump -U postgres -Fc gitness_db \
> "${BACKUP_DIR}/full_backup_${DATE_STAMP}.dump"
# バックアップファイルの整合性チェック
if [ $? -eq 0 ]; then
echo "Backup successful at ${DATE_STAMP}"
else
echo "Backup failed!" >&2
exit 1
fi
設定パラメータについては、コンフィグ管理モジュール内で確認可能です。
コードリポジトリの同期
Git レポの冗長化には、以下の手法を組み合わせてください。
- ロカールミラー: NFS や SAN 上の別ボリュームへクローン作成。
- リモートミラー: 外部ホストへプッシュするリモートエンドポイント設定。
- 自動同期: コントローラ層で定期的に実行されるジョブ処理。
設定情報のバージョン管理
環境依存の設定も Git で管理すべきです。以下のようなファイルが含まれます。
- `.env` ファイル(機密情報は除外)
- サーバー構成ファイル
- フロントエンドの設定値
フェーズ別の復旧手順
論理的な削除からの回復
Gitness では、削除されたリポジトリやスペースを一時的に保持する機能を提供しています。
プロジェクト領域のリストア
管理者権限を持って API を叩くことで、名前を再付与して復元可能です。
curl -X POST https://gitness.example.com/api/v1/space-refs/my-work-space:main/restore \\
-H "Authorization: Bearer {ADMIN_TOKEN}" \\
-H "Content-Type: application/json" \\
-d '{
"identifier": "new-safety-space",
"parent": "root-org"
}'
この操作により、元の子要素構造や権限情報が再現されます。
データベース障害時の復旧
ストレージ破損などの物理障害が発生した場合の手順です。
- サービス停止:
docker compose down gitness_app - DB コンテナへのリストア:
cat /mnt/external_storage/dumps/full_backup_latest.dump | \ docker exec -i gitness_db pg_restore -U postgres -d gitness_db --clean --if-exists - 起動と健全性チェック:
docker compose up -d gitness_app ./binary_health_check
完全システム再生成
大規模障害時に行う全体制復元フロー:
- インフラの再構築(Docker/Kubernetes)
- ネットワーク設定と認証情報の適用
- データベースコンテナの起動と初期ロード
- アプリケーションコンテナの起動
- ミラーレポジトリからのクローン同期
- 機能検証(デプロイパイプライン等)
訓練と維持管理
計画の有効性を担保するため、定期的な演练が不可欠です。
- 月次: 単一リポジトリの消去と回復テスト
- 四半期: データベースのスナップショット適用テスト
- 年次: フェイルオーバーを含む完全シミュレーション
チェック項目例
每次演练時に確認すべきポイント:
- バックアップファイルの暗号化と無欠損状況
- 計測された RTO と目標値の比較
- コミット履歴の不整合がないか確認
- アクセス制御ポリシーの有効確認
- マニュアル改訂が必要かどうかの判断
トラブルシューティング準備
予期せぬ問題に対応するため、以下の対策を講じておきます。
- フォーマット互換性: バージョン間でのバックアップ形式変化を確認
- 容量余裕: リカバリ先のディスクサイズを見積もる
- 緊急アクセス: ルートユーザーのパスワードを安全に保管
運用効率化のベストプラクティス
手動操作のミスを減らすために自動化と可視化を行います。
- スケジュールされた作業: アプリケーション側のタスクスケジューラを活用してバックアップ実行
- アラート設定: バックアップ失敗時の通知チャネルを確立
- 監視ダッシュボード: 復旧に必要な時間の測定ツール導入