Mastodon(Docker環境)でElasticsearchを有効にした時のメモ

この記事は、2018/11/5 00:51にQrunchにて公開したエントリの再公開版となります。

内容は当時のままですので、古くなっているはずです。予めご了承ください。


基本的には以下の記事を参考にして作業した。

  • https://blog.theboss.tech/2018/04/01/elasticsearch-on-mastodon-docker/

作業環境はこんな感じ。

  • EC2 t3.small
  • Amazon Linux 2

Elasticsearchの有効化

  1. docker-compose.yml のesサービスのコメントを解除する。
    • t3.smallくらいだとメモリが足りないので、ES_JAVA_OPTS は -Xms256M -Xmx256M くらいに落としたほうが安全かもしれない。
    • webサービス側に書かれている depends_on も忘れずに。
  2. ボリュームマウントするディレクトリを作成。デフォルトで ./elasticsearch に作成されるが、所有者を 1000:1000 にしておく。

これでいけるわけがなく、一部は上記記事のトラブルシューティングと重なるのだが、がっつりハマってしまった。

vm.max_map_countの変更

このまま docker-compose up -d してもエラーが発生し、コンテナが正常に起動してくれなかった。

エラーログを残し忘れたが、vm.max_map_count の変更によって解決。

# 現在値を確認
$ sysctl -a | grep vm.max_map_count
# ... 略 ...
vm.max_map_count = 65530
# ... 略 ...

# 十分な値を設定
$ sudo sysctl -w vm.max_map_count=262144
$ echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

ファイルディスクリプタ上限の変更

これでいけると思っていたが、まだエラーが発生していた。ファイルディスクリプタの上限が低いとな……?

es_1         | ERROR: [1] bootstrap checks failed
es_1         | [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

ホストの /etc/security/limits.conf の変更を試したが効かず、docker-compose.yml を編集することで意図通りとなった。

   es:
     restart: always
     image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
     environment:
       - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
+    ulimits:
+      nofile:
+        soft: 65536
+        hard: 65536
     networks:
       - internal_network

起動

あとは参考記事と同様に、初回に実行するタスクを走らせてからコンテナを上げるだけ。
かなり重いので、低スペックな環境では一旦Mastodonを落としておくべき。

$ docker-compose run --rm web rails chewy:deploy
$ docker-compose up -d

コメント

このブログの人気の投稿

2019年の振り返り

Macを買ってmikutterを入れたときのメモ

Yukari for Android 1.2