mstdn-maud-io を支えるストレージの話 / tokaidolug-yokohama-201905

8d165742bfa77804ae2fc8bd3962473b?s=47 hota
May 18, 2019

mstdn-maud-io を支えるストレージの話 / tokaidolug-yokohama-201905

横浜で喋ったやつです。
https://tokaidolug.connpass.com/event/128671/

発表内で補われた行間については後日ブログ記事として公開される予定です。
→しました https://diary.akane.blue/2019/06/05/move-media-to-object-storage/

補足: p.17 招待リンク経由のクレジットですが、5/16から30日間50ドルになったようです https://www.digitalocean.com/docs/platform/release-notes/#may-2019

8d165742bfa77804ae2fc8bd3962473b?s=128

hota

May 18, 2019
Tweet

Transcript

  1. mstdn.maud.io を支えるストレージの話 hota 1 1

  2. hota すき: Android, 青髪赤目 職業: 学生 作者: FlokoROM, Koruri 運用:

    mstdn.maud.io 2 2
  3. mstdn.maud.io 3 3

  4. mstdn.maud.io 皆さんご存知 アカネチャンカワイイヤッター サービス開始2周年ありがとう これからもよろしくね 4 4

  5. 2年経った悩み 5 5

  6. 悩み ストレージの空きが心配になった 動画の読み込みが遅い 6 6

  7. ストレージ問題 1年ちょっと前にディスクフルやらかしましたね diary.akane.blue/2018/01/16/server-disk-resized/ 申し訳なかった 500GBに増やしたけど気づけば320GB使用済に この調子だと数年内にはまた使い切るのでは 7 7

  8. ストレージ問題 前回のようなでかいディスクへのフルコピーは? 時間かかるしめんどくさい そろそろ価格が現実的でない 何回繰り返すんだ 8 8

  9. オブジェクトストレージ 9 9

  10. ブロックストレージ ディスクサイズを選択 予め確保したサイズに対して課金 オブジェクトストレージ 総容量の上限がない 概ね従量課金(使った分だけ) ブロックストレージより安価 -> 大容量データの保存に適している 10

    10
  11. 事業者選定 11 11

  12. Amazon S3 aws.amazon.com/jp/s3/ GAFAのA(どっちの?) つよい 東京リージョンあり 転送量やリクエスト単位の課金が分かりにくい 12 12

  13. Wasabi wasabi.com S3互換 とにかく安い ($5.99/TB) 転送量課金無し 日本から遠い(東西アメリカとEuropeだけ?) 13 13

  14. ConoHa オブジェクトストレージ www.conoha.jp/objectstorage/ ご存知GMO OpenStack Swift? もちろん国内 転送量課金なし 微妙なお値段(450円/100GB) 14

    14
  15. Spaces on DigitalOcean www.digitalocean.com/products/spaces/ そこそこ有名な海外VPS屋さん S3互換 最寄りリージョンはシンガポール CDNあり(エッジが東京にもある) $5/250GB, 転送量1TBまで込

    転送量にはCDN利用分を含む 15 15
  16. 選定 Amazon S3 通信料の見通しが立たず Wasabi 遠いのがネック ConoHa オブジェクトストレージ 価格が惜しい Spaces

    on DigitalOcean 比較的安い割にCDN完備(含東京)がえらい 太平洋渡るよりは近い 16 16
  17. 準備をする アカウントを作る 招待リンク経由で 60日間使える$100分のクレジット 実質初月/翌月無料 なんかProjectと呼ばれるなにかを作る サービスを超えて横断的にまとめておけるらしい 17 17

  18. バケットみたいなのを作成 リージョンを選ぶ 近いのはシンガポール( SGP1 )でしょう CDNの要不要を選ぶ わたしはありで 自前のドメインをここで設定できる 名前を決めておわり 18

    18
  19. メディアファイルを転送する ...その前に! 19 19

  20. アップロード量を可能な限り減らす 基本: tootctl media remove リモートメディアのキャッシュを消す --days=N も有効活用 docker: $

    docker-compose run --rm web bundle exec bin/tootctl media remove non-docker: $ RAILS_ENV=production bundle exec bin/tootctl media remove 20 20
  21. $ docker-compose run --rm web bundle exec bin/tootctl media remove

    --days=1 >Removed 321752 media attachments (approx. 87.6GB) >Removed 321752 media attachments (approx. 87.6GB) (X-Files Theme BGM) 21 21
  22. 応用: find コマンドを活用する リンクのプレビューカード用の画像のうち、指定した 日数より更新日時が古いものを削除 $ find public/system/preview_cards/ -mtime +7

    -type f -delete 念の為 -delete つけずにテストはしようね うちはこいつも40GBくらいありました todo: 再取得どうなってるのか調べようね… 22 22
  23. メディアの転送準備 rsync っぽくクラウドストレージを扱える rclone を使う rclone config によるセットアップが非常に簡単 最終的にこう [spaces]

    type = s3 provider = DigitalOcean env_auth = false access_key_id = ******************** secret_access_key = ****************************** endpoint = sgp1.digitaloceanspaces.com acl = public-read 23 23
  24. 叩いてみて作ったバケットが一覧に出てくればOK $ rclone lsd spaces: 2019-05-02 08:53:04 media-mstdn-maud-io あとは同期を走らせる $

    rclone sync ~/mastodon/public/system spaces:media-mstdn-maud-io -P (24時間以上) 24 24
  25. 切替作業 25 25

  26. 切替作業こわくないよ だいたい同期できたらやっていきます 当日直前のはしゃーない 早めにやるに越したことはない 遅くなればなるだけローカルにファイルは積まれるの で、後の同期量が増える 切替だけならあまり停止時間はかからない 26 26

  27. 切替作業 .env.production の必要事項を埋めれば終わり # S3 (optional) S3_ENABLED=true S3_BUCKET=media-mstdn-maud-io AWS_ACCESS_KEY_ID=********** AWS_SECRET_ACCESS_KEY=**********

    # S3_REGION= S3_PROTOCOL=https S3_ENDPOINT=https://sgp1.digitaloceanspaces.com S3_ALIAS_HOST=media-mstdn.maud.io 書いたら docker-compose up -d とかでよし 27 27
  28. つまづくとこ(個人的) S3_ENDPOINT は https:// から書くけど S3_ALIAS_HOST はドメインだけ Spacesの場合はendpointにリージョン含むので S3_REGION は不要

    28 28
  29. 切替が完了したら メディアの配信元が切り替わっているかを確認する 自分のアイコンとかが簡単 新規の投稿画像でも同様に 主に切替直前までの、同期が済んでいないメディアが閲 覧できないので注意 APIは移行先の新URLを返すので 他インスタンスからの取得もコケるので気をつけたい インスタンス内外への周知が必要 29

    29
  30. 最後の同期の完了 切替前までのメディアのアップロードを完了させる。 全てのファイルにチェックを行ってるっぽいので、 規模とファイル数で時間がかかる... $ rclone copy ~/mastodon/public/system spaces:media-mstdn-maud-io -P

    (ここで6-7時間) 30 30
  31. おまけ:CDN 31 31

  32. CDNを利用する オリジンサーバが遠い メディアの配信ドメインが変わったので、一律で キャッシュを適用しやすくなった ユーザに最適な経路で取ってこれるほうが速そう 動画の読み込み速度の改善が見込める 転送量課金の軽減 32 32

  33. Cloudflareにした もともと maud.io のDNS管理してるので DNSレコード設定の雲をONにしてCloudflareのHTTP Proxyを通すようにするだけ! 証明書もくれるぞ DigitalOcean側でサブドメインを設定する時に使う 33 33

  34. Page Rules 無料で3つまで作れる .mp4 をデフォルトではキャッシュしないので必要 メディアだけ別のサブドメインになったので、安心して 全部キャッシュできる URLmatch: media-mstdn.maud.io/* Settings:

    Cache Everything CDN導入後は動画の読み込み待ちが激減、快適に視聴で きるようになったとの声多数 34 34
  35. FAQ なぜ media-mstdn.maud.io ? media.mstdn.maud.io でよかったのでは? CloudflareのEdge Certificatesが maud.io と

    *.maud.io だけだったんけど、ここで media.maud.io を使うのはもったいなく感じたから 結局いくらアップロードした? 84GBくらい。 35 35
  36. 他の質問とかどうぞ 36 36