Help us understand the problem. What is going on with this article?

無料鯖(Ubuntu)でDocker使用のMastodonを1.4.1に上げようとしたら死んだ話

More than 3 years have passed since last update.

読むのが手間な方への結論

  • storage driverがoverlay2の場合、permission変更に時間がかかって死ぬ

前提

こんにちはこんにちは!

Google Compute Engineの無料枠( vCPU 0.2 / 0.6GB / SWAP 2GB / Ubuntu 16.10 )を使って、Mastodonの(ほぼ)お一人鯖を運用しています。

先日、1.4rcが先行リリースされ、1.4rc3あたりが出たときにアップデートをかけようとしました。

アップデート自体はこちらのスクリプトを利用して、特にコマンドに困ることもなく、多少時間がかかりつつも完了したのですが・・・

問題

アップデート完了後、自鯖にアクセスしようとすると出るわ出るわ・・

\def\textlarge#1{%
  {\rm\Large #1}
}

$\textlarge{500}$
$\textlarge{502}$
$\textlarge{504}$

sidekiqの画面すら見れず、たまに見れたと思えば再試行が200以上・・・(無料枠では致命傷です。)

でも、再試行が完了すれば安定するかな、と思っていましたが、翌日も翌々日も何度アップデートを行っても不安定なまま。
どうやら内部処理が溜まっているのはわかったんですが、解消法がわからず土日を潰しました。

解決への道

そんな中、助けを求めてGitHubのIssueの読めない英語を追っかけていました。
そして見つけたこのIssue...

Permission update on docker entrypoint takes a long time
(実際のところ、かなり前から読んでいたのですがイマイチ解消法がわからず待っていました)

冒頭にも書いたとおり、原因はどうやらstorage driverというもののようです。
v1.4以降では、docker内のファイル操作について、rootではなく別ユーザーが操作するようになっています。

docker内での操作では全てpermission変更が必要になり、 chown の処理に時間がかかってしまうのです。

さらに! OSが Ubuntu(14以降) の場合には overlay2 というstorage driver がデフォルトなのですが、こいつが他のものよりも格段に遅いのです。

そのため、いつまでたっても処理が終わらず、不安定になってしまっていました。

解決策

これから1.4.1にアップデートされる方もいるかと思いますが、自鯖がdockerで動いている場合には、まずstorage driver を確認しましょう。

確認方法は下記コマンドです。

$ docker info

すると、下記のように出てくると思います。

$ docker info
Containers: 5
 Running: 5
 Paused: 0
 Stopped: 0
Images: 15
Server Version: 17.03.1-ce
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 46
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
()

この Storage Driveroverlay2 になっている場合には、注意が必要です。(もしかしたら一般的なスペックの場合には問題にならないかもしれません。)

Ubuntu の場合には、下記コマンドを叩いて、aufsに変更するか、別の storage driver に変更することをおすすめします。

まず、aufsが利用可能かどうか確認します。

$ cat /proc/filesystems | grep aufs

このとき、 nodev aufs と出てきたら、下記操作は必要ありません。
もし出てこなかった場合、次のコマンドを叩いて aufsを有効にします。

$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
$ sudo modprobe aufs
$ cat /proc/filesystems | grep aufs

nodev aufs と出てきたら、/etc/docker/daemon.json を変更します。

/etc/docker/daemon.json
{
  "storage-driver": "aufs"
}

そして、dockerを再起動します。

$ service docker restart

確認します。

$ docker info

無事に Storage Driveraufs になっていることを確認できたら、必ず$\textlarge{リブート}$しましょう。

リブート後にMastodonが安定して動作していることが確認できたら、僕は報われます。

gc373
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした