Upload
eiji-shinohara
View
4.699
Download
2
Embed Size (px)
Citation preview
2017年6⽉5⽇アマゾンウェブサービスジャパン 篠原 英治
SolrCloud on Amazon ECS
第20回 Lucene/Solr勉強会 #SolrJP[改訂第3版] Apache Solr⼊⾨出版記念勉強会 @Yahoo! JAPAN “LODGE”
§ 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
改訂第3版 Apache Solr⼊⾨§ ブログ書きました!
– https://shinodogg.com/?p=7668
Why SolrCloud?§ SolrCloudじゃないとレガシー
Why SolrCloud?§ SolrCloud: Availability & Scalability
Why SolrCloud?§ 分散環境?Split BrainとかQuorumとか…
https://www.slideshare.net/EPAM_Systems_Bulgaria/session-3-tibor-sulyan-distributed-coordination-with-zookeeper
本⽇のAgenda
§ Amazon ECS§ ZooKeeper§ SolrCloud§ SolrCloud on Amazon ECS
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/
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
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
⾃前でクラスタ管理すると、、、
Masters
State Data Store
WorkersSchedulers
Load Balancers
冗⻑化・チューニング・運⽤
要件対応・冗⻑化・運⽤
安全な付け外し・デプロイ対応
冗⻑化・チューニング・運⽤
Amazon EC2 Container Service Scheduler
ManagerCluster
Task Definition
Task
Agent
Service: 動的ポートマッピング
Service schedulerElastic Load Balancing
Application Load Balancer
Task Definition = app:1Desired Count = 4
Amazon ECS
32874 32879 32873 32880
Cluster
Service: 追加リソース無しの更新
Service scheduler
Task Definition = app:2Desired Count = 4
Minimum Healthy Percent = 50Maximum Percent = 100
Elastic Load BalancingApplication Load Balancer
ClusterAmazon ECS
Service: 追加リソース無しの更新
Service schedulerElastic Load Balancing
Application Load Balancer
Task Definition = app:2Desired Count = 4
Minimum Healthy Percent = 50Maximum Percent = 100
ClusterAmazon ECS
Service: 追加リソース無しの更新
Service schedulerElastic Load Balancing
Application Load Balancer
Task Definition = app:2Desired Count = 4
Minimum Healthy Percent = 50Maximum Percent = 100
ClusterAmazon ECS
Service: 追加リソース無しの更新
Service schedulerElastic Load Balancing
Application Load Balancer
Task Definition = app:2Desired Count = 4
Minimum Healthy Percent = 50Maximum Percent = 100
ClusterAmazon ECS
Service: 追加リソース無しの更新
Service schedulerElastic Load Balancing
Application Load Balancer
Task Definition = app:2Desired Count = 4
Minimum Healthy Percent = 50Maximum Percent = 100
ClusterAmazon ECS
https://www.slideshare.net/AmazonWebServicesJapan/awsdocker
ECSやDockerに関する資料はコチラもどうぞ
@riywo
ECSやDockerに関する資料はコチラもどうぞ
https://twitter.com/shinodogg/status/859321796650180608https://www.youtube.com/watch?v=pPsREQbf3PA
@abbyfuller
ZooKeeper
§ 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”
§ 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
§ 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
§ まずはECSでZooKeeprのDockerイメージをサクッと– Docker Hubのイメージを使う
• https://hub.docker.com/_/zookeeper/• ポート周りだけの超シンプルな設定 on ECS
ZooKeeperを試してみる
§ まずはECSでZooKeeprのDockerイメージをサクッと– コンテナを稼働させるEC2インスタンスの起動やDockerイメージの実⾏な
どはECSにおまかせ
ZooKeeperを試してみる
§ まずは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
§ まずは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
§ まずは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]
§ まずはECSでZooKeeprのDockerイメージをサクッと– ⼀通りの操作をZooKeeperでするのは5分で出来た!
• (ウソです。実際はアレこれやってて30分くらいかかりました…笑)– ブラウザでポチポチやるの⾯倒だよ!という⼈には勿論コマンドラインも
ZooKeeperを試してみる
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html
§ 状態を保持している&頻繁にデプロイしたりしない…?– Dockerの利点: ポータビリティ, 柔軟なスケーリング -> ZooKeeprに必要?– ZooKeeperは3つのAvailability ZoneでEC2インスタンスで稼働
ZooKeeperで実現したいこと
Availability Zone Availability Zone Availability Zone
§ 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で稼働させてみる
§ サーバー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で稼働させてみる
Apache Solr
§ まずはスタンドアロンでSolrのDockerイメージをサクッと– イメージはDocker Hubのもの。設定は8983ポートだけ
Apache Solr on Amazon ECS
§ まずはスタンドアロンでSolrのDockerイメージをサクッと– ⾒覚えのある画⾯ J
Apache Solr on Amazon ECS
§ SolrCloudモードで起動– -zオプションでZooKeeperを指定
SolrCloud on Amazon ECS
§ SolrCloudモードで起動– 管理画⾯上で操作が可能な状態に(とはいえzk以外も諸々設定が必要)
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
§ SolrCloud & ZooKeeperの設定詳細は改訂第3版のSolr本で!SolrCloud on Amazon ECS
https://www.amazon.co.jp/dp/4774189308/
検索エンジンもアマゾンで