Open3
litestreamメモ
はじめに
これは個人用メモ.ほぼ公式チュートリアルから個人的に必要な部分を拾っているのみなので,ちゃんと公式読んだほうがよい
とはいえ参考になったらLIKEお願いします!
公式
litestreamチュートリアル
install
brew install benbjohnson/litestream/litestream
minIOのセットアップ(ローカルで動くs3互換サーバー)
docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
起動したらlocalhost:9001
にアクセスし,ログイン
Username: minioadmin
Password: minioadmin
Bucketを作成 mybkt
sqliteデータベースとレコードを作成
sqlite3 fruits.db
CREATE TABLE fruits (name TEXT, color TEXT);
INSERT INTO fruits (name, color) VALUES ('apple', 'red');
INSERT INTO fruits (name, color) VALUES ('banana', 'yellow');
データを確認するには下記のコマンド
sqlite3 fruits.db 'SELECT * FROM fruits'
litestreamを使って,データベースをminIOへreplicate
export LITESTREAM_ACCESS_KEY_ID=minioadmin
export LITESTREAM_SECRET_ACCESS_KEY=minioadmin
litestream replicate fruits.db s3://mybkt.localhost:9000/fruits.db
litestreamのプロセスはそのまま残したままにしておく
minIOコンソールでbucketを確認してdbが保存されていることを確認
別のターミナルを開き,minIOからrestoreできることを確認
export LITESTREAM_ACCESS_KEY_ID=minioadmin
export LITESTREAM_SECRET_ACCESS_KEY=minioadmin
litestream restore -o fruits2.db s3://mybkt.localhost:9000/fruits.db
sqlite3 fruits2.db 'SELECT * FROM fruits'
さらに別のターミナルを開き,継続的にreplicatesされていることを確認
まずはINSERTを実行
sqlite3 fruits.db
# sql
INSERT INTO fruits (name, color) VALUES ('grape', 'purple');
export LITESTREAM_ACCESS_KEY_ID=minioadmin
export LITESTREAM_SECRET_ACCESS_KEY=minioadmin
litestream restore -o fruits3.db s3://mybkt.localhost:9000/fruits.db
sqlite3 fruits3.db 'SELECT * FROM fruits'
fruits3にもgrapeが書き込まれている,つまり,継続的にsqliteがreplicateされていることを確認
litestreamをDockerで使うには
2パターンある
- 別コンテナで実行するパターン(sidecarパターン)
- 同一コンテナで実行するパターン
2つに共通する設定について
litestreamプロセスに渡す必要があるもの
- credentials
LITESTREAM_ACCESS_KEY_ID
LITESTREAM_SECRET_ACCESS_KEY
- dbファイルの場所(path)
- s3の場所(URL)
これらはlitestream.ymlとしてlitestreamに読み込ませることもできる
yamlとしては以下のような感じ.正確なものは公式referenceを見ること
# litestream.yml
access-key-id: YOUR_ACCESS_KEY_ID
secret-access-key: YOUR_SECRET_ACCESS_KEY
dbs:
- path: /data/db
replicas:
- url: s3://BUCKET/db
別コンテナで実行するパターン (sidecar)
docker run \
-v /local/path/to/data:/data \
-v /local/path/to/litestream.yml:/etc/litestream.yml \
litestream/litestream replicate
同一コンテナで実行するパターン
litestream replicate -exec "myapp -myflag myarg"
# 上記をDockerfileのCMDとして設定してやればよさそう?
もしくは設定ファイルに以下のようにexec:
を記載する
exec: myapp -myflag myarg
dbs:
- path: /path/to/db