OpenRun が Litestream をプラットフォームに統合、SQLite レプリケーションを運用フリーに
セルフホスト型 GitOps プラットフォーム OpenRun が、Litestream サポートを標準搭載。SQLite データベースは S3 互換ストレージへ継続的にレプリケーションされ、空のボリュームでは自動復元が実行される。アプリの変更も、サイドカー設定も、復元ロジックも不要。

OpenRun は、Docker、Podman、Kubernetes 上で Web アプリや社内ツールをデプロイするためのオープンソースのセルフホスト型 GitOps プラットフォームで、Litestream サポートを標準搭載した。SQLite データベースは AWS S3 または S3 互換オブジェクトストレージ(Cloudflare R2、MinIO、SeaweedFS)へ継続的にレプリケーションされ、復元は自動で行われる。OpenRun が空または再作成されたアプリボリュームを検出すると、アプリを起動する前にレプリカからデータベースを復元する。同じ設定は、Docker/Podman の単一ノードと Kubernetes の両方で機能する。
売り文句はこうだ。アプリケーション開発者は、Litestream をインストールしたり、オブジェクトストレージを設定したり、コンテナイメージを変更したり、復元ロジックを実装したりすることなく、通常どおり SQLite を使える。その運用負担はプラットフォーム側に移る。
仕組み
Litestream の設定は、OpenRun サーバー設定で一度だけ定義される。SQLite サービスがその設定を参照し、アプリはサービスにバインドする。アプリは /data にマウントされた永続ボリュームを取得し、注入された環境変数(SQLITE_DB_PATH、SQLITE_DIR)を介してデータベースを見つける。アプリがそのディレクトリに作成するすべての *.db ファイル(実行時に作成されるファイルを含む)がレプリケーションされる。変更はデフォルトで通常約 1 秒以内にレプリケーションされる(sync_interval は設定可能)。
Docker と Podman では、OpenRun はアプリのデータボリュームを共有するアプリごとのコンパニオンコンテナで Litestream を実行する。空のボリュームでアプリコンテナが起動する前に、復元コンテナがレプリケーションされたデータベースを引き戻す。アプリがアイドル時にゼロへスケールすると、Litestream コンテナは最終同期を実行して停止する。
Kubernetes では、バインドのボリュームは PersistentVolumeClaim になり、OpenRun は復元 init コンテナとネイティブの Litestream サイドカー(Kubernetes 1.29 以降)をアプリポッドに自動的に追加する。サイドカーはアプリコンテナより先に起動し、アプリコンテナより後に終了するため、秩序あるシャットダウン中に最終同期が可能になる。SQLite バインドを持つアプリは、Recreate 更新戦略で単一レプリカとして実行され、更新中に複数のアプリポッドが同じ SQLite ボリュームに書き込むのを防ぐ。
復旧シナリオ
アプリボリュームが失われた場合、復旧は自動だ。次回起動時に空のボリュームを検出し、復元コンテナを実行し、復元されたデータに対してアプリを起動する。レプリカはバインドによってキー付けされるため、同じバインドを新しいアプリにアタッチすると、そのアプリの新しいボリュームにもデータが復元される。
ノード全体が失われた場合、メタデータレプリケーションが有効になっていれば、復旧手順は次のとおりだ。新しいマシンに OpenRun をインストールし、同じ設定ファイルでサーバーを起動する。起動時にサーバーはメタデータデータベースがないことを検出し、レプリカからメタデータと監査データベースを復元し、すべてのアプリ、バインド、サービス、バージョン、監査履歴をそのままの状態で起動する。各アプリは最初のリクエストで再デプロイされ、コンテナ起動前に自身のレプリカから SQLite データを復元する。
レプリケーションは非同期だ。デフォルトの 1 秒の sync_interval では、突然のクラッシュでオブジェクトストレージに到達していない直近約 1 秒分の書き込みが失われる可能性がある。ノード喪失シナリオは CI テストでエンドツーエンドに実行される。テストはサーバーを強制終了し、コンテナ、ボリューム、OpenRun インストールディレクトリを削除し、すべてがオブジェクトストアから自動的に再構築されることを検証する。
モニタリング
openrun replication status は、オブジェクトストレージ内のレプリカ一覧とレプリケーションコンテナの状態を組み合わせて、レプリケーションされたすべてのデータベースの状態を報告する。そのため、オブジェクトストレージに最新のレプリカがまだ含まれている場合でも、失敗したレプリケーションコンテナを確認できる。ステータスはコンソールアプリでも確認できる。
アプリケーション開発者は、Litestream をインストールしたり、オブジェクトストレージを設定したり、コンテナイメージを変更したり、復元ロジックを実装したりすることなく、通常どおり SQLite を使える。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。