オートスケール(Autoscale)の理解とサンプルを使った構成

オートスケールは、インスタンスの負荷をモニタリングして、特定のイベントに対してインスタンスを追加/削除する機能を提供するサービスです。
例えば、急にサービスのトラフィックが増加したとき、オペレータが介入することなく自動でインスタンスを追加したり、負荷状況が解除されると追加されたインスタンスを削除したりすることが可能です。
このように、弾力的なサービスインフラ運営が可能となり、インフラコストや運用コストの削減に効果があります。

今回は、オートスケールを利用する際に知っておくべき概念や、サンプルを使った動作方法を紹介したいと思います。

インスタンステンプレート(Instance Template)

 

オートスケールによって自動生成されるインスタンスは、ユーザーが作成したインスタンスのテンプレートを基盤に作成され、以下のプロパティを指定することができます。

  • イメージ
  • インスタンスタイプ
  • ディスクサイズ(追加ボリュームを指定可能)
  • キーペア
  • 連結するネットワーク
  • フローティングIP接続可否
  • 起動スクリプト

多くの場合、ユーザーサービスに合わせて設定変更されたイメージが使用されます。(イメージ生成は、コンソールガイドをご参照ください。https://docs.toast.com/ja/Compute/Image/ja/console-guide/
簡単な変更であれば、デフォルトイメージと起動スクリプトを利用して、インスタンス起動時に自動で設定を変更できます。

スケーリンググループ(Scaling Group)

インスタンスの増減はスケーリンググループの中で行われ、ユーザーが指定した条件によって実行されます。基本的に以下のような内容を記述します。

  • 増設時、どのインスタンステンプレートを使用するか
  • どれだけ多くのサーバーが必要か
  • どの値に基づいてモニタリングし、インスタンスを増設または削減するか

さらに増設されたインスタンスがロードバランサのメンバーに接続する必要があれば、ロードバランサを指定することもできます。

サンプルを用いてオートスケールを設定する

実際にどのように動作するか、サンプルを使って設定してみましょう。

ユーザーは、Webサーバーを利用してサービスを提供しており、以下のようなポリシーをサービスに適用していると仮定します。

  • 基本2台でサービス開始
  • CPU使用率が60%を越えた時点で自動スケールアウト
  • CPU使用率が30%より低くなった時点で自動スケールイン
  • スケールアウトされたインスタンスは、ロードバランサに自動追加
  • 新しいインスタンスは、既存のインスタンスと同様に設定

オートスケールの設定の事前準備

ロードバランサにインスタンスが追加され、サービスされていることを確認します。

  • ロードバランサの作成(Exam-LB):Round Robinで構成
  • ロードバランサにフローティングIP接続
  • セキュリティグループの設定:HTTP許容可能に変更

インスタンステンプレートの設定

  • イメージ:CentOS 7.1
  • インスタンスタイプ:m2.small

インスタンステンプレート設定時、このサンプルのように簡単なスクリプトで構成できる場合を除いて、ユーザーイメージを作成して使用することができます。

  • 予約スクリプト:
#!/bin/bash
yum -y install httpd
ifconfig eth0 | grep "inet " | awk -F'[: ]+' '{ print $3 }' > /var/www/html/index.html
systemctl start httpd

スケーリンググループの構成

  • 最小インスタンス2:CPU負荷が低くても2台のインスタンスを維持します。
  • 最大インスタンス5:CPU負荷が高くても5台まで自動でスケールアウトします。
  • 駆動インスタンス2:初期駆動のインスタンスの数を指定します。
  • ポリシーの設定
    • cpu_util> 60の状態が5分続くと、1つのインスタンスを作成する
    • cpu_util <30の状態が5分続くと、1つのインスタンスを削除する

テスト

スケーリンググループの構成まで終了したら、自動で2つのインスタンスが生成された状態でサービスされます。

$ curl http://133.186.153.69/
192.168.0.24
$ curl http://133.186.153.69/
192.168.0.23
$ curl http://133.186.153.69/
192.168.0.24

その後、負荷を十分に与えると、自動でインスタンスが生成されることを確認できます。

負荷を加える方法は様々ですが、今回は強制的にcpuの負荷を高められるstressツールを利用しました。
stress –cpu 1 –timeout 700

また、ロードバランサにより追加されたインスタンスでトラフィックが正常に分配されることを確認できます。

$ curl http://133.186.153.69/
192.168.0.26
$ curl http://133.186.153.69/
192.168.0.25
$ curl http://133.186.153.69/
192.168.0.24
$ curl http://133.186.153.69/
192.168.0.23
$ curl http://133.186.153.69/
192.168.0.26

その後、負荷を止めると、1台ずつインスタンスが削除され、残り2台になるまで継続されます。

まとめ

基本コンセプトとサンプルを使った簡単な構成でオートスケールを紹介しました。
サンプルで言及していないスケーリングポリシー(cron式など)や、手動でインスタンス追加/削除を行う機能は、ユーザーガイド(https://docs.toast.com/ja/Compute/Auto Scale/ja/console-guide/)をご覧ください。
オートスケールを用いた弾力的なインフラ構成を、ぜひお試しいただければと思います。

TOAST Meetup 編集部

TOASTの技術ナレッジやお得なイベント情報を発信していきます
pagetop