1760463037
2025-10-14 16:10:00
ライトストリーム は、SQLite データベースをクラウド ストレージにリアルタイムでバックアップするオープンソース ツールです。私はそれが大好きで、私のすべてのプロジェクトでそれを使用しています。
ライトストリーム Fly.ioが所有していますそして彼らは、LiteFS と呼ばれる代替プロジェクトを支持して、Litestream での開発をほぼ 2 年間一時停止しました。 2週間前、Litestreamの作成者であり主任開発者であるBen Johnson氏は、 発表された 彼らは焦点を Litestream に戻し、新しいリリース 0.5.0 を公開したところだということです。
私は Litestream 0.5.0 を試しましたが、他の Litestream ユーザーには、実稼働環境に導入する前に別のリリースとより広範なテストを行うよう警告します。新しいバージョンの Litestream への移行では、大変な経験をしました。
注記: Litestream について文句を言っているわけではありません。私は Litestream が大好きなので、新たな開発が見られてうれしいです。他の Litestream ユーザーが私と同じバグに遭遇しないようにしたいと思っています。
予想される移行作業 🔗︎
Litestream の以前のバージョンから v0.5.0 以降にアップグレードする際には、意図的に行われる 2 つのタスクがあります。
- バックアップ形式が変更されたため、Litestream 0.5.0 は、Litestream の以前のバージョンで作成されたバックアップから復元できません。
- の
litestream.yml設定ファイルの形式が若干変更されました。以前は、と呼ばれる配列フィールドがありましたreplicasですが、0.5.0 ではこれが という辞書に変更されます。replica(特異)。
ライトストリームが公開したのは、 役立つ移行ガイド さらに詳しく。
Litestream 0.5.0 の利点の 1 つは、 公式の litestream Docker イメージ。以前の Docker コンテナーはすべて、大量の定型文を必要としていました Litestream の正しいバージョンをダウンロードするには これをコンテナ内で利用できるようにしましたが、今では Dockerfile の 1 行に減りました。
COPY --from=litestream/litestream:0.5.0 /usr/local/bin/litestream /app/litestream
Litestream 0.5.0 へのテスト移行 🔗︎
Litestream 0.5.0 をテストするために、自分のプロジェクトにデプロイしてみました。 何ができたか。これは、次の理由からテストに適したプロジェクトです。
- であることはすでに発表しました このサービスをシャットダウンしますそのため、ユーザーはサイトの使用を停止しました。
- サーバーは次の理由で失敗し続けました Litestream 0.3.13 のバグ それは0.5.0で修正されました。
Backblaze バックエンドへのアップロードが機能しなくなります 🔗︎
移行を開始するために、Litestream 0.3.13 を使用してデータの最新コピーをダウンロードし、次に Litestream 0.5.0 を使用して、それを Litestream の新しい形式で Backblaze のクラウド ストレージにアップロードしようとしました。しかし、私はこのエラーに遭遇しました:
error" db=store.db replica=s3 error="write ltx file: s3: upload to db/0000/0000000000000001-0000000000000001.ltx: operation error S3: PutObject, resolve auth scheme: resolve endpoint: endpoint rule error, Custom endpoint `s3.us-west-002.backblazeb2.com` was not a valid URI"
以前のバージョンでも同じレプリカ定義が機能していたので、少し戸惑いました。
access-key-id: ${LITESTREAM_ACCESS_KEY_ID}
secret-access-key: ${LITESTREAM_SECRET_ACCESS_KEY}
dbs:
- path: ${DB_PATH}
replica:
url: s3://${LITESTREAM_BUCKET}/db
endpoint: ${LITESTREAM_ENDPOINT}
Backblaze S3 エンドポイントを指定する別の方法をいくつか試しましたが、Litestream はバックアップを試行する前にそれらをすべて構成エラーとして拒否しました。私の持っていた構成は、Litestream が有効な構成として受け入れた唯一のものでしたが、バックアップに失敗しました。
提出しました Backblaze レプリカが「カスタム エンドポイント … 有効な URI ではありませんでした」 #789 で失敗すると Litestream 開発者の Cory LaNou それを修正しました 次の日。
Litestream の新しい形式でデータを Backblaze にアップロードできるようになったので、Litestream 0.5.0 を What Got completed に統合することのブロックが解除されました。
-if-replica-exists 消えた 🔗︎
導入しました Litestream 0.5.0 から何が完了したかしかし、サーバーは次のエラーで起動に失敗しました。
flag provided but not defined: -if-replica-exists
コマンドのドキュメントを確認したところ、次のように書かれていました -if-replica-exists まだサポートされていました:
$ litestream restore -help | grep if-replica-exists --after-context=1
-if-replica-exists
Returns exit code of 0 if no backups found.
その旗が判明したのは、 誤って削除された そして 0.5.1で戻ってきます。
復元が失敗する transaction not available 🔗︎
喪失にもめげず -if-replica-exists、 私 開始スクリプトから削除しました。しかし、サーバーは新しいエラーで起動に失敗しました。
level=ERROR msg="failed to run" error="cannot calc restore plan: transaction not available"
これは、この未解決の Litestream の問題と一致しており、憂慮すべき重大度「クリティカル – 完全なデータ損失」であることが判明しました。
Litestream はディレクトリを作成しなくなりました 🔗︎
この時点で、私は回復して実行するために何でも試してみたいと思っていたので、最新の最先端バージョンの Litestream を実行しました。 Dockerコンテナ内のソースからビルドする。
幸いなことに、最新バージョンでは問題を回避できました transaction not available 私が直面していた問題は、Litestream によってさらに前進しました。
残念ながら、克服すべきエラーがまだ 1 つありました。
level=ERROR msg="failed to run" error="create temp database path: open /app/data/store.db.tmp: no such file or directory"
これは実際には非常に単純だったので、何が起こっているのかについてかなり強い疑念を抱きました。 Litestream の以前のバージョンでは、SQLite データベースを復元するように指示した場合、 /app/data/store.db そして /app/data パスが存在しない場合、Litestream はファイルを書き込む前にパスを作成しようとします。
ソースを確認すると、このコード フローでフォルダー作成ロジックが失われていることがわかりましたが、修正するのは十分簡単だったので、修正プログラムを作成しました。
成功! 🔗︎
と Litestream の私のフォーク 決勝戦で mkdir 修正が適用され、What Got Done が再び起動して実行されました。
Litestream 0.5.x をプレリリース フォークで動作させることはできましたが、もう 1 ~ 2 回のリリースでは、他のプロジェクトにデプロイするのは保留するつもりです。 0.5.0 の変更は、Litestream 関係者が予想していたよりも破壊的だったようで、依然としていくつかの深刻なバグと格闘しています。
また、開発バージョンでは修正されているものの、製品リリースにはまだ反映されていない重大なバグが他にもいくつかあります。
注記: 繰り返しますが、これは Litestream に対する批判ではありません。ストリーミング レプリケーションを正しく行うのは難しく、彼らが行っていることは私が作成できるものよりもはるかに堅牢です。バグレポートに迅速に対応し、問題を修正してくれた Litestream チームに感謝しています。
#Litestream #0.5.0 #で保留 #mtlynch.io