## 定義
ファイルレベル同期とは、パッケージマネージャーを介さずにマスターイメージのファイルシステムをサーバーフリート全体に直接同期することで、全サーバーの状態をゴールデンイメージと一致させるフリート管理手法である。rsync を原型とするが、大規模本番環境ではクライアントプル型のカスタム実装が一般的。ファイル変更後のシェルトリガー(デーモン再起動等)・I/O スロットリング・差分同期を組み合わせ、サービスへの影響を最小化しながら確実な状態収束を実現する。(Source: [[@2013__LISA__Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One]])
## 利点と特性
- **べき等性**: いかなる破損状態からでも再同期で正常状態に回復できる。パッケージ DB 破損、部分適用失敗などの障害に耐性がある。
- **均一性の強制**: 全マシンを同一状態に保つ。異なる設定が混在することで生じるデバッグの複雑性を排除する。
- **パッケージマネージャー非依存**: rpm・dpkg のデータベース破損・設定ファイル競合・予期しないマシン状態による失敗を回避する。
- **差分レビュー可能性**: イメージを Perforce 等のバージョン管理システムにチェックインし、変更差分をレビューできる。
## 制約と注意点
- マシン固有の設定ファイル(ネットワーク設定・ログファイル等)は同期対象から除外する必要がある。
- パッケージ postinstall スクリプトの多くが機能しないため、個別のトリガー機構が必要。
- SSH ホスト鍵のようにマシンごと一意であるべきファイルをゴールデンイメージに含められない。
- カスタム設定・カスタムパッケージは同期範囲外に配置するか、明示的に除外リストに入れる必要がある。
## 横断的知見
- **ファイルレベル同期の根本的限界はチェックサム計算コスト**: rsync はファイル・ブロックのチェックサムを同期のたびに計算するため、データ量が増えるほど同期時間が線形に増大する。[[ブロックレベル差分同期]](dsync)はこれを回避するため最大 2 桁の高速化を達成した。(Source: [[@2013__LISA__Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One]], [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]])
- **設計レベルの対比**: Marc Merlin(Google)の実装はファイルレベル同期でフリート管理を実現し、Knauth & Fetzer(TU Dresden)の dsync はブロックレベルで同期効率を解決した。同じ LISA 2013 年の 2 論文が「何を同期の単位とするか」という設計軸の両極を示している。(Source: 両論文)
## 未解決の問い
- ファイルレベル同期と Infrastructure as Code(Ansible・Puppet・Chef 等)はどのように位置づけられ、どのような場合にどちらが適切か?
- コンテナ化・不変インフラ(イミュータブルインフラ)との関係は? ファイルレベル同期は「事前コンテナ時代の不変インフラ」として見なせるか?
- Google の独自実装に近い OSS 実装として何が存在するか?(Fabric・Salt・その他)
- I/O スロットリングのアルゴリズム・パラメーター設定に関する定量的な知見はあるか?
## 関連
- [[@2013__LISA__Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One]] — Google でのファイルレベル同期実装の詳細
- [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]] — rsync の限界を克服するブロックレベル同期の提案(対比論文)
- [[ブロックレベル差分同期]] — ファイルレベル同期の対概念
- [[ライブアップグレード]] — ファイルレベル同期を基盤とした OS ライブアップグレード手法
- 関連 MOC: [[SRE - MOC]]
## 出典
- [[@2013__LISA__Live Upgrading Thousands of Servers from an Ancient Red Hat Distribution to 10 Year Newer Debian Based One]]
- [[@2013__LISA__dsync - Efficient Block-wise Synchronization of Multi-Gigabyte Binary Data]]