こんにちは、ソリューションアーキテクトの藤城(@tafujish)です。
私がお客さま先でIDCFクラウドのデモをやるとき、好評いただく機能の一つにダイナミックスケールがあります。聞き慣れないワードだと思いますがダイナミックスケールとは、サーバーが起動している状態で(すなわち無停止で)、VMのCPU/メモリをスペックアップできる機能です。
このダイナミックスケール、好評いただく一方で知らなかったという声もしばしばいただくので、 ここではダイナミックスケールを紹介します。
ダイナミックスケールは、新しい仮想化ハイパーバイザーと新しいOSを利用することにより安定して利用できるようになりました。また簡単に利用でき即時反映されますので、スケールアウトよりも素早くシステム性能を上げることができます。一時しのぎに使うのも便利ですね。
ダイナミックスケールを試してみよう
では実際に試してみましょう。
1) CentOS 6.6のVMをStandard.S4で作成します Standard.S4なので、1コアの4GBメモリとなります。 以下のコマンドで現在のCPUとメモリのサイズを確認します。
●メモリサイズ確認 # free -m total used free shared buffers cached Mem: 3825 137 3687 0 7 42 -/+ buffers/cache: 87 3737 Swap: 0 0 0 ●CPUコア数確認 # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 ~以下略~
リサイズ前の値が、Memのtotalが4GB、CPU(s)が1コアなのがわかります。
2) ポータル上で対象のVMをリサイズします
参考)【FAQ】仮想マシンのリサイズ手順
ここでは、一つ上のStandard.M8を選択します。
グレーアウトされているVMタイプはスペックダウンが伴うので選択できません。 数秒で完了の表示が出ます。どうです、速いでしょう!
3) スペックアップされたか確認します
先と同じくアップ後のCPUとメモリのサイズを確認します。
●メモリサイズ確認 # free -m total used free shared buffers cached Mem: 7921 210 7710 0 7 42 -/+ buffers/cache: 160 7760 Swap: 0 0 0 ●CPUコア数確認 # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 ~以下略~
以上、簡単にスペックアップできることがわかりました。 topコマンドで見ても反映されてるのがわかると思います
実際本番環境で使えるの?負荷試験してみる
先述のダイナミックスケールの際に、HTTPで負荷をかけながら実施して、サービス影響がどこまででるか、本当に性能がスケールするか確認してみましょう。お客さまと話ていても、ここが一番気になるようです。
1) Standard.S4でWEBサーバーを作成
2) WEBサーバーにApacheとPHPをインストール
3) コンテンツとしてphpinfoを返すだけのページを用意
4) このWEBサーバーに対して別のサーバーからHTTPリクエスト
5) WEBサーバーのCPUがボトルネックになるので、負荷かけながらStandard.M8へリサイズ
上図は毎秒の秒間リクエスト数とレスポンスタイムのグラフです。リサイズ実施後に、処理数が向上しているのが確認できました。また、リサイズ実施のタイミングで処理数が低下していますが、レスポンスタイムに遅延は発生してないので、ユーザーからするとほぼ影響がないと思われます。リクエストタイムアウトやバッドリクエストも発生しませんでした(ずっと0だったのでグラフ描きませんでした)。確かに性能向上し、HTTPサービスへの影響もないことが確認できました。
上図はMackerelで見たCPUリソース状況です。リサイズ前にCPU100%で輻輳している様子と、リサイズ後はCPUリソースに若干の余裕ができました。Mackerelもダイナミックスケールに対応して、正常にグラフが更新されることが確認できました。
以上のとおり、リソースも実際の性能もスケールすることが確認できましたが、ミドルウェアやアプリケーションとそれらの設定によっては追加したCPU/メモリを活用できないかもしれません。例えば、メモリを増やしたらMySQLのinnodb_buffer_pool_sizeを増やす必要があります。ダイナミックスケールの後の設定チューニングでよりリソースを活用してもらえればと思います。
リサイズしたのにCPU・メモリが増えていない件
先述の例では、CentOS6.6で実施したため、リサイズしただけでOS上でCPUもメモリも増えていることが確認できたと思います。他のOSでは自動で有効化(オンライン化)されないケースもあります。
具体的には、CentOS7.1だとメモリが自動でオンライン化されません。Ubuntu14.04だとCPUもメモリもオンライン化されません。
では、Ubuntu14.04を例にオンライン化してみましょう。
Ubuntu14.04のVMをStandard.S4で作成し、その後Standard.L16へリサイズする例です。
●メモリをオンラインに # free -m total used free shared buffers cached Mem: 3946 553 3392 0 11 255 -/+ buffers/cache: 286 3659 Swap: 0 0 0 # grep offline /sys/devices/system/memory/*/state ~以上略~ /sys/devices/system/memory/memory131/state:offline /sys/devices/system/memory/memory132/state:offline /sys/devices/system/memory/memory133/state:offline /sys/devices/system/memory/memory134/state:offline /sys/devices/system/memory/memory135/state:offline /sys/devices/system/memory/memory40/state:offline /sys/devices/system/memory/memory41/state:offline /sys/devices/system/memory/memory42/state:offline /sys/devices/system/memory/memory43/state:offline ~以下略~ # for i in {40..135}; do echo online > \ /sys/devices/system/memory/memory${i}/state; done # free -m total used free shared buffers cached Mem: 16234 609 15625 0 12 255 -/+ buffers/cache: 341 15892 Swap: 0 0 0
オフラインのメモリを/sys/devices/system/memory/*/stateから確認します。後はonlineに変更するのみです。
●CPUをオンラインに # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0 Off-line CPU(s) list: 1-3 ~以下略~ # for i in {1..3}; do echo 1 > /sys/devices/system/cpu/cpu${i}/online; done # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 ~以下略~
オフラインのCPUをlscpuを実行しOff-line CPU(s) listから確認します。後はonlineを有効にするのみです。
以上、CPUもメモリも簡単にオンラインにできることが確認できました。 なお、CPUやメモリのオンライン化はudevで管理されているので、自動反映させることも可能です。具体的には以下の設定となります。
# vi /etc/udev/rules.d/40-hotadd.rules SUBSYSTEM=="cpu", ACTION=="add", ATTR{online}="1" SUBSYSTEM=="memory", ACTION=="add", ATTR{state}="online"
Ubuntuの場合はデフォルトで設定入っていませんので上記2行とも書いてください。 CentOS7.1はmemoryの行だけでよいです。CPUの方はデフォルトで /lib/udev/rules.d/40-redhat.rules に設定されていますので記述不要です。 この設定ファイルを作成後は、リサイズすると自動でオンライン化されます。(OS再起動は不要です)
まとめ
ダイナミックスケールは、2014年10月にIDCFクラウドをリリースしてときから利用できる機能ですが、あまり浸透していなかったので取り上げました。
OSが起動している状態で、簡単にかつサービス影響なくスペックアップできることがわかりました。また、CentOS7.xやUbuntuの場合は、リサイズ後にオンライン化が必要です。一方で、スペックダウンを伴うリサイズは、無停止ではできません。その他、lightタイプから他のタイプに変更できない等ありますのでFAQも併せてご覧ください。
今回はCPUとメモリでしたが、次回はディスクの追加をオンラインでやりましょう。これもよく聞かれるので。