Docker+Amazon ECS+ElasticSearchでkibana用のElasticSearchクラスタ
[AWS][ECS][ElasticSearch][Docker] Docker+Amazon ECS+ElasticSearchでkibana用のElasticSearchクラスタを組んだ話
ElasticSearchクラスタをDockerでやろうと思った理由
- chatopsでコンテナのデプロイをできる環境がある
- 外出時に再起動だけならスマホでchatopsが可能
- がっつりECSを利用している環境になっている
- 本番環境もECSを利用
- ElasticSearchはクラスタにジョインしたらデータをうまく分散してくれる
- 手動リストアする必要がない
- dockerhub にElasticSearchのDockerfileがある
- そのまま使えるかも
- 後述するが、少しいじった
- そのまま使えるかも
上記理由からElasticSearchをDocker+ECSでやってみることにした
設計
*** 上記理由から1ECSクラスタ、1オートスケールのパターンは無しにした
*** 分散型データストアなのに1台ホストが死んだら接続できなくなる時点でダメなので無しにした
1ECSクラスタ、1インスタンス、1Dockerコンテナのパターン
- ECSでデプロイしても1コンテナが立ち上げ直されるだけ
- なのでクラスタ内でリシャードは発生するが接続は瞬断がおきるレベルでほぼ影響なし
- デプロイも1台ずつ順番に可能になる
- ホスト障害があっても1コンテナが落ちるだけなのでクラスタ自体は壊れない
- 複数ホストの同時障害は考えないものとする(Dockerとか関係ない部分)
- EBSを利用してコンテナからホストDiskをマウントすればOSが再起動してもデータは残っているのでリシャード時間が短くなる
- AutoRecoveryも使うと尚良
- 手動でconfigはいじれないがconfigを変えたDocker imageを1台ずつ変更して設定できる
- クラスタ分EC2を立てるのでお金はかかる
- linkでのコンテナ間通信はできないのでホストに対して接続するようにしなければいけない
*** メリットも多いのでこの構成で行くことにした
ElasticSearch on Dockerでハマったポイント
- dockerhubのDockerfileだとCLUSTER_NAMEやヒープサイズの指定ができない?
- 調査不足感はあります
- AWS自体でDocker関係なくあるのがMULTICASTは使えないのでUNICASTでクラスタを組む必要がある
- UNICASTでホストを都度増やすなどconfig変更が大変
- elasticsearch-cloud-aws MULTICASTができるができるだけVPC内通信でやりたかった
- コンテナ内にelasticsearchユーザを作らないと起動できず
- DockerからPublishするIPがコンテナのIPになってしまってクラスタが組めなかった
ハマったポイントの解決策
- dockerhubのDockerfileをベースに起動スクリプトを自前で作成した
- config内のUNICAST先を増やす度にconfig再起動等したくないのでUNICAST先をELBにした
- terraformを使っているのでホストを追加する度にELBにも追加して自動でクラスタのホスト追加ができるようにした
- elasticsearchユーザを作ってもよかったがDocker imageを少しでも小さくするためrootで起動できるようにした
- elasticsearchコマンドで起動オプションに-Des.insecure.allow.root=trueを付けた
- publishIPがコンテナになってしまうのはホスト側のIPで出るようにした
以上のハマったポイントを直したことでDocker+ECSのElasticSearchクラスタが構築できました。コンテナの再起動もchatopsでできるようになり簡単な再起動だけならパソコンを開く必要もなくなりました(*´ω`*)
本番のアクセスログをkibanaにぶっこんだら問題が
- 容量が多すぎてElasticSearchでOOMが発生
- Disk容量も数日で7割近く利用している
ヒィィィ((((;゚Д゚))))ガクガクブルブル
やべーよ、ちょっと甘くみてたよ((((;゚Д゚))))ガクガクブルブル
対応
- EC2のスペックアップをする
- ついでにEBSの容量も大容量に・・・
- terraformで1台ずつスペックとEBS容量を増やしてapplyした
- 1台ずつEC2を再作成させ、chatopsでデプロイを行って、Diskのデータはなくなるがリシャードでクラスタがgreenになるのを待つ
- これを繰り返してスペックアップを行えた
高速スケーラブル検索エンジン ElasticSearch Server (アスキー書籍)
- 作者: Rafal Kuc (lにストローク符号、cにアクサン・テギュ付く),Marek Rogozinski (nにアクサン・テギュ付く)
- 出版社/メーカー: 角川アスキー総合研究所
- 発売日: 2014/03/25
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
Amazon Web Services企業導入ガイドブック -企業担当者が知っておくべきAWSサービスの全貌から、セキュリティ概要、システム設計、導入プロセス、運用まで-
- 作者: 荒木靖宏,大谷晋平,小林正人,酒徳知明,高田智己,瀧澤与一,山本教仁,吉羽龍太郎
- 出版社/メーカー: マイナビ出版
- 発売日: 2016/06/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る