AmazonESのスケールアウト・スケールインを検証した
About
🎄「Amazon Web Services Advent Calendar 2017」8日目の記事です 🎄
よくわかってなかったので試しました。
スケールイン・アウトの検証
- Amazon ES 2.3
- master 3
- datanode 2
初期設定
primary shardを指定
$ curl -XPUT $ES/bank -d '{"settings":{ "number_of_shards": 1,"number_of_replicas":1}}' $ curl -XPUT $ES/ldgourmet -d '{"settings":{ "number_of_shards": 1,"number_of_replicas":1}}'
sampleデータの登録
- https://qiita.com/wapa5pow/items/31e966b9d251e7fd76ec
- https://www.elastic.co/guide/en/elasticsearch/reference/2.3/_exploring_your_data.html
$ curl $ES/bank/account/_bulk --data-binary "@accounts.json" $ cat restaurants.simple.json | ./stream2es stdin --target $ES/ldgourmet/restaurant
$ curl $ES/_cat/indices green open ldgourmet 1 1 214236 0 420.4mb 189.6mb green open bank 1 1 1000 0 748.5kb 374.2kb
スケールアウト
data nodeをコンソールから 2 -> 6にします。blue greenのような動きをするので、台数が一時的に14台になります(旧node 5台 + 新node 9台)
$ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "green", "timed_out": false, "number_of_nodes": 14, "number_of_data_nodes": 8, "active_primary_shards": 2, "active_shards": 4, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100 } # shardの移行が起きている(起こるタイミングは不明) $ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "green", "timed_out": false, "number_of_nodes": 14, "number_of_data_nodes": 8, "active_primary_shards": 2, "active_shards": 4, "relocating_shards": 1, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100 }
relocationg_shardsが終わったら、replica shard の数を変更をします。
$ curl -XPUT $ES/ldgourmet,bank/_settings -d '{"number_of_replicas": 5}' $ curl $ES/_cat/indices green open ldgourmet 1 5 214236 0 1gb 183.2mb green open bank 1 5 1000 0 2.1mb 374.2kb
スケールイン
次にスケールインを試します。気になったので2パターンで実行します。
1. data node数を先に変更する
data node 6 -> 4にコンソールから変更します。
$ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "green", "timed_out": false, "number_of_nodes": 16, "number_of_data_nodes": 10, "active_primary_shards": 2, "active_shards": 12, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100 } $ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "yellow", "timed_out": false, "number_of_nodes": 7, "number_of_data_nodes": 4, "active_primary_shards": 2, "active_shards": 8, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 4, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 66.66666666666666 }
割当できないreplica shardがある状態になってしまっているので、replica shard数を変更します。
$ curl -XPUT $ES/ldgourmet,bank/_settings -d '{"number_of_replicas": 3}' $ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "green", "timed_out": false, "number_of_nodes": 7, "number_of_data_nodes": 4, "active_primary_shards": 2, "active_shards": 8, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100 }
statusもgreenになってますね。
$ curl -s $ES/_cat/indices green open ldgourmet 1 3 214236 0 733mb 183.2mb green open bank 1 3 1000 0 1.4mb 374.2kb
2. replica shard数を先に減らす
$ curl -XPUT $ES/ldgourmet,bank/_settings -d '{"number_of_replicas": 1}' $ curl -s $ES/_cat/indices green open ldgourmet 1 1 214236 0 366.5mb 183.2mb green open bank 1 1 1000 0 748.5kb 374.2kb $ curl -s $ES/_cluster/health | jq . { "cluster_name": "hogehoge:tjinjin-test", "status": "green", "timed_out": false, "number_of_nodes": 12, "number_of_data_nodes": 6, "active_primary_shards": 2, "active_shards": 4, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100 }
$ curl -s $ES/_cat/indices green open ldgourmet 1 1 214236 0 366.5mb 183.2mb green open bank 1 1 1000 0 748.5kb 374.2kb
特に問題なくスケールインできました。
まとめ
スケールアウトとスケールインを試しました。Amazon ESの変更はBlue−greenでおこなれているため、10分前後はかかる印象です。データ量とかによると思うので長めに見積もったほうがいいかもしれないです。