solrcloud on amazon ecs

42
2017年6⽉5⽇ アマゾンウェブサービスジャパン 篠原 英治 SolrCloud on Amazon ECS 第20回 Lucene/Solr勉強会 #SolrJP [改訂第3版] Apache Solr⼊⾨出版記念勉強会 @Yahoo! JAPAN “LODGE”

Upload: eiji-shinohara

Post on 23-Jan-2018

4.699 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: SolrCloud on Amazon ECS

2017年6⽉5⽇アマゾンウェブサービスジャパン 篠原 英治

SolrCloud on Amazon ECS

第20回 Lucene/Solr勉強会 #SolrJP[改訂第3版] Apache Solr⼊⾨出版記念勉強会 @Yahoo! JAPAN “LODGE”

Page 2: SolrCloud on Amazon ECS

§ Eiji Shinohara (篠原 英治)– Twitter: @shinodogg– Blog: shinodogg.com

§ Amazon Web Services Japan– from August 2013

§ AWS Solutions Architect– Market: Startup & AdTech– Area of Depth: Search Technology

• Amazon CloudSearch• Amazon Elasticsearch Service

§ Part-Time Graduate Student– University of Tsukuba– MBA in International Business w/ @werner : Amazon CTO

Page 3: SolrCloud on Amazon ECS

改訂第3版 Apache Solr⼊⾨§ ブログ書きました!

– https://shinodogg.com/?p=7668

Page 4: SolrCloud on Amazon ECS

Why SolrCloud?§ SolrCloudじゃないとレガシー

Page 5: SolrCloud on Amazon ECS

Why SolrCloud?§ SolrCloud: Availability & Scalability

Page 6: SolrCloud on Amazon ECS

Why SolrCloud?§ 分散環境?Split BrainとかQuorumとか…

https://www.slideshare.net/EPAM_Systems_Bulgaria/session-3-tibor-sulyan-distributed-coordination-with-zookeeper

Page 7: SolrCloud on Amazon ECS

本⽇のAgenda

§ Amazon ECS§ ZooKeeper§ SolrCloud§ SolrCloud on Amazon ECS

Page 8: SolrCloud on Amazon ECS

Amazon ECS

Page 9: SolrCloud on Amazon ECS

Amazon EC2 Container Service (ECS) is a highly scalable, high performance container management service that supports Docker containers and allows you to easily run applications on a managed cluster of Amazon EC2 instances.

Amazon EC2 Container Service (ECS) は、⾮常にスケーラブルかつ⾼性能な、Dockerコンテナをサポートするコンテナ管理サービスで、アプリケーションを簡単にマネージドなEC2クラスター上で実⾏することができます。

https://aws.amazon.com/ecs/

Page 10: SolrCloud on Amazon ECS

Amazon ECS

§ たくさんの企業でAmazon ECSが活⽤されている– ECSの利点に関してはMapboxのブログも是⾮ご覧ください

• We switched to ECS and you won't believe what happened next• https://www.mapbox.com/blog/switch-to-ecs/

https://www.slideshare.net/shinodogg/aws-summit-san-francisco-2017-werner-vogels

Page 11: SolrCloud on Amazon ECS

ClusterContainer Instance

Amazon ECSにおけるコンテナ管理の概要図

§ クラスタ管理– Cluster, Container

Instance, Agent§ グループ化

– Task Definition, Task, Container

§ スケジューラ– Run Task, Service

Agent

Task

Container

Container

Task

Service

Task Definition

Agent

Task

Task Definition

Run Task

Page 12: SolrCloud on Amazon ECS

⾃前でクラスタ管理すると、、、

Masters

State Data Store

WorkersSchedulers

Load Balancers

冗⻑化・チューニング・運⽤

要件対応・冗⻑化・運⽤

安全な付け外し・デプロイ対応

冗⻑化・チューニング・運⽤

Page 13: SolrCloud on Amazon ECS

Amazon EC2 Container Service Scheduler

ManagerCluster

Task Definition

Task

Agent

Page 14: SolrCloud on Amazon ECS

Service: 動的ポートマッピング

Service schedulerElastic Load Balancing

Application Load Balancer

Task Definition = app:1Desired Count = 4

Amazon ECS

32874 32879 32873 32880

Cluster

Page 15: SolrCloud on Amazon ECS

Service: 追加リソース無しの更新

Service scheduler

Task Definition = app:2Desired Count = 4

Minimum Healthy Percent = 50Maximum Percent = 100

Elastic Load BalancingApplication Load Balancer

ClusterAmazon ECS

Page 16: SolrCloud on Amazon ECS

Service: 追加リソース無しの更新

Service schedulerElastic Load Balancing

Application Load Balancer

Task Definition = app:2Desired Count = 4

Minimum Healthy Percent = 50Maximum Percent = 100

ClusterAmazon ECS

Page 17: SolrCloud on Amazon ECS

Service: 追加リソース無しの更新

Service schedulerElastic Load Balancing

Application Load Balancer

Task Definition = app:2Desired Count = 4

Minimum Healthy Percent = 50Maximum Percent = 100

ClusterAmazon ECS

Page 18: SolrCloud on Amazon ECS

Service: 追加リソース無しの更新

Service schedulerElastic Load Balancing

Application Load Balancer

Task Definition = app:2Desired Count = 4

Minimum Healthy Percent = 50Maximum Percent = 100

ClusterAmazon ECS

Page 19: SolrCloud on Amazon ECS

Service: 追加リソース無しの更新

Service schedulerElastic Load Balancing

Application Load Balancer

Task Definition = app:2Desired Count = 4

Minimum Healthy Percent = 50Maximum Percent = 100

ClusterAmazon ECS

Page 20: SolrCloud on Amazon ECS

https://www.slideshare.net/AmazonWebServicesJapan/awsdocker

ECSやDockerに関する資料はコチラもどうぞ

@riywo

Page 21: SolrCloud on Amazon ECS

ECSやDockerに関する資料はコチラもどうぞ

https://twitter.com/shinodogg/status/859321796650180608https://www.youtube.com/watch?v=pPsREQbf3PA

@abbyfuller

Page 22: SolrCloud on Amazon ECS

ZooKeeper

Page 23: SolrCloud on Amazon ECS

§ What is ZooKeeper? https://zookeeper.apache.org/– ZooKeeperは、設定情報 / ネーミング / 分散同期 / グループサービス を集中

管理するサービス– 分散アプリケーションには何かしら上記のような機能が必要– 都度それらを実装すると、バグFIXや競合状態といった問題が不可避– こういったサービスは実装が難しく、初期の段階では妥協されることが多く、

そのような状況は変更容易性を損なわせ、管理を煩雑にする– 正しく実装されたとしても、異なる実装であれば、アプリケーションをデプロ

イして運⽤していく上で、管理が⾯倒になってしまう– そこでZooKeeperですよ!

“Apache ZooKeeper is an effort to develop and maintain an open-

source server which enables highly reliable distributed coordination”

Page 24: SolrCloud on Amazon ECS

§ ZooKeeperの特徴– ZooKeeper is simple– ZooKeeper is ordered– ZooKeeper is replicated– ZooKeeper is fast

ZooKeeper :Because Coordinating Distributed Systems is a Zoo

https://zookeeper.apache.org/doc/trunk/zookeeperOver.html

Page 25: SolrCloud on Amazon ECS

§ API– create

• creates a node at a location in the tree– delete

• deletes a node– exists

• tests if a node exists at a location– get data

• reads the data from a node– set data

• writes data to a node– get children

• retrieves a list of children of a node– sync

• waits for data to be propagated

ZooKeeper

Page 26: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– Docker Hubのイメージを使う

• https://hub.docker.com/_/zookeeper/• ポート周りだけの超シンプルな設定 on ECS

ZooKeeperを試してみる

Page 27: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– コンテナを稼働させるEC2インスタンスの起動やDockerイメージの実⾏な

どはECSにおまかせ

ZooKeeperを試してみる

Page 28: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– Dockerイメージを起動したEC2インスタンスにSSH– ZooKeeperのクライアントからローカルのDockerコンテナで稼働する

ZooKeeperに接続

ZooKeeperを試してみる

$ sudo yum install java$ sudo yum install wget$ wget http://ftp.jaist.ac.jp/pub/apache/〜略〜/zookeeper-3.4.10.tar.gz$ tar xvf zookeeper-3.4.10.tar.gz$ cd zookeeper-3.4.10$ bin/zkCli.sh -server 127.0.0.1:2181

Page 29: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– CreateしてからGetしてみる

ZooKeeperを試してみる

[zk: 127.0.0.1:2181(CONNECTED) 1] ls /[zookeeper][zk: 127.0.0.1:2181(CONNECTED) 2] create /zk_test my_dataCreated /zk_test[zk: 127.0.0.1:2181(CONNECTED) 3] ls /[zookeeper, zk_test][zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_testmy_datacZxid = 0x2〜略〜numChildren = 0

Page 30: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– データをSet後、NodeごとDeleteする– lsで消えたことを確認

ZooKeeperを試してみる

[zk: 127.0.0.1:2181(CONNECTED) 5] set /zk_test junkcZxid = 0x2ctime = Fri Jun 02 00:27:19 UTC 2017mZxid = 0x3mtime = Fri Jun 02 00:27:35 UTC 2017pZxid = 0x2〜略〜numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 6] delete /zk_test[zk: 127.0.0.1:2181(CONNECTED) 7] ls /[zookeeper]

Page 31: SolrCloud on Amazon ECS

§ まずはECSでZooKeeprのDockerイメージをサクッと– ⼀通りの操作をZooKeeperでするのは5分で出来た!

• (ウソです。実際はアレこれやってて30分くらいかかりました…笑)– ブラウザでポチポチやるの⾯倒だよ!という⼈には勿論コマンドラインも

ZooKeeperを試してみる

http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html

Page 32: SolrCloud on Amazon ECS

§ 状態を保持している&頻繁にデプロイしたりしない…?– Dockerの利点: ポータビリティ, 柔軟なスケーリング -> ZooKeeprに必要?– ZooKeeperは3つのAvailability ZoneでEC2インスタンスで稼働

ZooKeeperで実現したいこと

Availability Zone Availability Zone Availability Zone

Page 33: SolrCloud on Amazon ECS

§ 3つのEC2インスタンスをそれぞれ別のAZで起動– ZooKeeperの設定はmyid以外は同じ内容$ cat conf/zoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/home/ec2-user/zookeeper-3.4.10/dataclientPort=2181server.1=ec2-34-209-250-205.us-west-2.〜略〜.com:2888:3888server.2=ec2-54-202-191-88.us-west-2.〜略〜.com:2888:3888server.3=ec2-34-210-87-63.us-west-2.〜略〜.com:2888:3888

$ ls -l data/myid

ZooKeeperを3AZで稼働させてみる

Page 34: SolrCloud on Amazon ECS

§ サーバー1でCreateしたノードがサーバー3で参照できる– EC2は同⼀Security Groupに設定し、該当SGからの2181、2888、3888

のポートの通信は許可しておく[ec2-user@ip-172-31-46-217 zookeeper-3.4.10]$ bin/zkCli.shConnecting to localhost:2181〜略〜[zk: localhost:2181(CONNECTED) 1] create /zk_test2 my_data2Created /zk_test2

[ec2-user@ip-172-31-26-147 zookeeper-3.4.10]$ bin/zkCli.shConnecting to localhost:2181〜略〜[zk: localhost:2181(CONNECTED) 1] ls /[zk_test2, zookeeper, zk_test]

ZooKeeperを3AZで稼働させてみる

Page 35: SolrCloud on Amazon ECS

Apache Solr

Page 36: SolrCloud on Amazon ECS

§ まずはスタンドアロンでSolrのDockerイメージをサクッと– イメージはDocker Hubのもの。設定は8983ポートだけ

Apache Solr on Amazon ECS

Page 37: SolrCloud on Amazon ECS

§ まずはスタンドアロンでSolrのDockerイメージをサクッと– ⾒覚えのある画⾯ J

Apache Solr on Amazon ECS

Page 38: SolrCloud on Amazon ECS

§ SolrCloudモードで起動– -zオプションでZooKeeperを指定

SolrCloud on Amazon ECS

Page 39: SolrCloud on Amazon ECS

§ SolrCloudモードで起動– 管理画⾯上で操作が可能な状態に(とはいえzk以外も諸々設定が必要)

SolrCloud on Amazon ECS

Page 40: SolrCloud on Amazon ECS

§ AWSおよびECSを活⽤して⾼信頼性なSolrCloud環境の実現SolrCloud on Amazon ECS

Availability Zone Availability Zone Availability Zone

AmazonECS

Shard1Leader

Shard2Replica

Shard1Replica

Shard3Replica

Shard2Leader

Shard2Replica

Shard1Replica

Shard3Replica

Shard3Leader

Shard2Replica

Shard1Replica

Shard3Replica

Page 41: SolrCloud on Amazon ECS

§ SolrCloud & ZooKeeperの設定詳細は改訂第3版のSolr本で!SolrCloud on Amazon ECS

https://www.amazon.co.jp/dp/4774189308/

Page 42: SolrCloud on Amazon ECS

検索エンジンもアマゾンで