自動でサーバー数を増減できる、「オートスケール機能」

クラウドサービスの特徴の1つに、しきい値を超えた負荷が生じた場合にサーバー性能を高めることで対応するスケールアップや、サーバー数を増加させることで対応するスケールアウトがある。ニフティクラウドにおいては、サーバーの負荷に応じてスケールアウト/スケールインを自動実行する「オートスケール機能」を無料で提供している。急なアクセス増加時などのサーバー追加は、サーバーイメージとロードバランサーを組みわせることで自動化が可能だ。今回は、このニフティクラウドにおけるオートスケール機能の設定方法を紹介する。

オートスケールをどのように実現するかはクラウドサービス事業者ごとにさまざまだ。だが、パフォーマンスを監視し、しきい値を超えた負荷に対し、ロードバランサーを使って、サーバーを拡張、縮退させるという仕組み自体はほぼ共通する。ニフティクラウドでは、以下の手順で設定を行う。

  1. サーバーディスクのイメージを作成する
  2. ロードバランサを作成する
  3. オートスケールを設定する

このようにしてイメージを作成してオートスケールの設定を済ませてしまえば、スケールアウトとスケールインは自動的に行うことができる。さまざまなメリットがある機能ではあるが、現状では設定を行う際に、トリガーの監視にSNMPを設定していること、増設ディスク付きのイメージはオートスケールできないこと、従量プランがないOSから作成されたイメージは利用できないこと、スケールアウトしたサーバーはプライベートLANに組み込むことはできないことと言った留意点もある。

基本的には、Webサーバーなど負荷の増減が激しいフロント部分に適用して、サーバーのリソースを柔軟に取り扱えるようにするとともに、コストの最適化につなげるといった使い方になる。実際に、1~3までを設定してみよう。より詳しい内容については、ニフティクラウドの紹介ページニフティクラウド ユーザーブログ を参考にしてほしい。

サーバーのイメージを作成する

まず、オートスケールを行う際の元になるサーバーをイメージとして作成する。手順としては、コントロールパネルからサーバーを作成し、サーバー内にSNMPのインストールなどを行ったうえで、サーバーの「イメージ化」を行う。

サーバーの作成は、コントロールパネルから、通常のサーバーを作成するのと同様に行えばよい。左の「Service Menu」の「サーバー」から「サーバー作成」を選び、作成していく。ここでは、サーバーOSとして「Ubuntu 12.04」、プランとして「e-mini」を選択した。

通常どおりサーバーを作成する

ここではUbuntu Serverとe-miniプランを選択

次は、サーバーを起動して、SNMPのインストールを行う。SSHまたはコントロールパネルのコンソールからログインして、ニフティのドキュメントを参考に、SNMPをインストールする。

# apt-get install snmpd

ドキュメントに従って、設定ファイル /etc/snmp/snmpd.conf を編集する。

バージョンが5.4.3なので、

agentAddress udp:127.0.0.1:161

をコメントアウトし、以下のコメントアウトを解除する。

#agentAddress udp:161,udp6:[::1]:161

また、最後に以下を追加する。

rocommunity niftycloud 10.100.0.14 .1.3.6.1.
rocommunity niftycloud 10.100.8.15 .1.3.6.1.
rocommunity niftycloud 10.100.16.13 .1.3.6.1.
rocommunity niftycloud 10.100.32.15 .1.3.6.1.
rocommunity niftycloud 202.248.175.141 .1.3.6.1.
rocommunity niftycloud 10.100.48.13 .1.3.6.1.
rocommunity niftycloud 175.184.41.60 .1.3.6.1.
rocommunity niftycloud 10.100.64.11 .1.3.6.1.
rocommunity niftycloud 10.100.64.12 .1.3.6.1.
rocommunity niftycloud 202.248.45.254 .1.3.6.1.
rocommunity niftycloud 10.100.128.14 .1.3.6.1.
rocommunity niftycloud 10.100.144.15 .1.3.6.1.
rocommunity niftycloud 10.102.0.31 .1.3.6.1.
rocommunity niftycloud 175.184.41.114 .1.3.6.1.
rocommunity niftycloud 175.184.41.115 .1.3.6.1.
rocommunity niftycloud 10.104.0.31 .1.3.6.1.
rocommunity niftycloud 103.233.199.104 .1.3.6.1.
rocommunity niftycloud 103.233.199.105 .1.3.6.1.
disk / 10000

設定を済ませたら、SNMPサービスを再起動する。

/etc/init.d/snmpd restart

ここでは省略したが、ドキュメントに従って、Firewallの設定も済ませておく。また、今回は計測用として便宜的に、負荷をかけるアプリケーションとしてWebサーバーのApache(apache2)をインストールし、80ポートにアクセスできるようにしておく。

続いて、このサーバーのイメージ化を行う。サーバーを停止し、コントロールパネルのメニューから「イメージ化(バックアップ)」を実行する。

イメージ化(バックアップ)を選択する

イメージ名を入力してOKする

イメージ化は元になるサーバーの容量によって異なるとのことだが、今回は10分もかかわらずに終わった。作成したイメージは、左メニューの「イメージ」-「プライベート(バックアップ)」で確認できる。

作成したイメージは「プライベート(バックアップ)」で確認できる

ロードバランサーの作成

次に、「2. ロードバランサーを作成する」を行う。左メニューから「ロードバランサー」を選択し、「ロードバランサー作成」ボタンをクリックする。作成画面で、名前、ロードバランス方式、ポート設定などを行っていく。「サーバー設定」のところでは、作成したイメージをまだ割り当てずにおいておく。

ロードバランサーの作成画面

ロードバランサーの作成確認画面

オートスケールを設定する

次に、いよいよ「3. オートスケールを設定する」を行う。オートスケールは、左メニューの「オートスケール」から設定できる。「オートスケールの作成」ボタンをクリックして、設定していく。

「オートスケールの作成」ボタンをクリック

ここでは、次のように設定した。当然のことながら、後から変更することができる。

基本設定

サーバー設定

トリガー設定

スケジュール設定。常にトリガーを監視するか、指定された日時のみ監視するか選択する

スケジュール設定。時間、曜日、月内日、月が指定できる

設定を済ませて、しばらくすると、最小台数で設定したサーバーが起動するので、表示されたロードバランサーのIPアドレスにhttpでアクセスし、Apacheが起動しているか確認しておく。

オートスケール設定後の画面

ロードバランサーの画面

Apacheの動作確認画面

負荷をかけてみる

では、abを使って、Apacheに負荷をみよう。

# ab -n 1000000 -c 100 http://ロードバランサのIPアドレス

サーバーにSSHでログインし、topコマンドを表示させたときの画面は以下。CPU負荷が1%を超えるようにする。

topコマンドの画面でCPU負荷を確認

しばらくすると、オートスケールの画面で、サーバー数が増え、設定した時間とともに、削除されることが確認できる。

オートスケールの「サーバー」確認画面

オートスケールの「ログ」確認画面

以上で、オートスケールが正しく動作することが確認できた。SNMPのインストールなどが必要なこと以外は、ほかのクラウドサービスと比べて簡単にオートスケールの設定ができることが特徴だろう。

トリガーとしては、「サーバーCPU使用率」「サーバーメモリ使用率」「サーバーネットワーク流量」「ロードバランサーネットワーク流量」を条件にすることができる。また、サーバーの起動までの時間や削除までの時間もスケジューリングすることができる。

思わぬコスト高を招くことのないよう、月額固定の料金プランが提供されているという安心感はニフティクラウドの1つの特徴でもある。一方、フロントエンドのWEBサーバーなど急なアクセスの波に対して高い伸縮性を要求されるケースでは、安心感よりもビジネスの機会を逃さないことが最優先となる。そのようなケースでは、オートスケールのようにサーバー数の増減を自動化する機能は不可欠だと言えるだろう。自動化することでリソース管理から開放され、さらにインフラコストを最適化できるなど、クラウドならではのメリットを実感できるはずだ。

ビジネスでクラウドを利用する際には、月額利用の安心感は押さえつつも、機会損失の回避やコストの最適化を意識しながら、2つの側面を上手に組み合わせて運用していきたい。