AmazonEC2を何倍もお得に使う方法

このエントリーをはてなブックマークに追加
どうもインフラ担当のfujya.shです。
今回はシャノンでAmazonEC2を使う機会がありましたので、そのお得な使い方を紹介したいと思います。
AmazonEC2は便利だけど、以外と料金が高くなる事で頭を悩ませている人は、この方法を試せば課題が解決するかも?



■ 今では当たり前のサーバ仮想化

「サーバの仮想化」今では当たり前になってきました。1台のサーバで複数台動かす事で、一人一開発環境を実現したり、アプリケーションをバージョン毎に保管できたりと至れり尽くせりです。
シャノンでも100台以上のサーバを仮想化して使っています。仮想化することで、開発環境を5分で用意できるようになりましたし、サービスを提供している、いわゆる本番環境のサーバ増設も1時間以内でできるようになりました。
アプリケーションサーバ、キャッシュサーバ、データベースサーバ、ロードバランササーバ、メールサーバ、開発環境、テスト環境用サーバ等々と数十種類のサーバイメージを管理しています。

本当に便利な時代になりました。



■ シャノンではOpenVZを使っています

シャノンではOpenVZという仮想化ソフトを使っています。OpenVZはOSレベルのサーバ仮想化を実現し、同一カーネル(OpenVZカーネル)内で複数OSが稼動します。
OpenVZはとても高速・軽量で、同時に複数のコンテナを立ち上げる際に便利です。
(メモリを4GBを積んだサーバなら10開発環境はそれなりに安定して稼動させることができます)

今までは物理的なサーバにOpenVZをインストールして利用していたのですが、昨年末頃から物理的な限界を感じAmazonEC2の利用を検討し始めました。AmazonEC2ならばラック内の消費電力を心配しなくて済みますし、HDDが壊れたから同じ型番を探して入替をする必要もありません。色々な雑務から開放されそうな予感満載です。
ただ、AmazonEC2を利用するにあたって大きな懸念としてあったのは、数十種類用意したOpenVZ用のイメージをどうするか?という事です。既存の資産を有効活用できるのが一番良い方法だと考えました。



■ AmazonEC2にOpenVZをインストールできるのか?

AmazonEC2はXenによって仮想化されたサーバを提供していますが、仮想サーバ(Xen)上で仮想サーバ(OpenVZ)を動かす事がそもそも出来るのだろうか?という疑問が発生します。
そこで、色々と調べてみたのですが、昨年の7月15日にAWSの公式記事に
Enabling User Provided Kernels in Amazon EC2
という記事がポストされました。ここにはユーザが作ったカーネルを使うことができるという事が書いてあります。つまりOpenVZカーネルも使える可能性はありそうです。



■ とりあえずインストールしてみよう

理論上は動くはずですし、兎にも角にもAmazonEC2にOpenVZのセットアップをしてみましょう。
セットアップ方法は、OpenVZwiki(日本語サイト)のクイックインストールが参考になります。

参考:OpenVZwiki クイックインストール

1.OpenVZ用のyumリポジトリの設定

$ cd /etc/yum.repos.d/
$ sudo /usr/bin/wget http://download.openvz.org/openvz.repo
$ sudo /bin/rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ
2.OpenVZkernelをインストール

$ sudo yum -y install ovzkernel-xen.x86_64
※ xenカーネルをインストールしてください。理由は後ほど書きます

3.OpenVZ必要なツール周りをインストール

$ sudo yum -y install vzctl.x86_64 vzctl-lib.x86_64 vzquota.x86_64
4.OpenVZに必要kernel設定を施す( /etc/sysctl.conf ファイルの該当する箇所を以下のように変更)

# On Hardware Node we generally need
# packet forwarding enabled and proxy arp disabled
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0

# Enables source route verification
net.ipv4.conf.all.rp_filter = 1

# Enables the magic-sysrq key
kernel.sysrq = 1

# We do not want all our interfaces to send redirects
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0


5.最後にgrub.confの修正し再起動(OpenVZカーネルで起動するようにする)

再起動後はちゃんとOpenVZカーネルで起動している事が確認できました。










AmazoneEC2ではXenを用いて仮想サーバ環境を提供しているので、Xenカーネルを選択しない場合は起動しなくなります。Xenカーネルに含まれるハイパーバイザコールを呼び出す必要があるためです。詳細に関してはここでは記述しませんがXenの準仮想化が高速稼動しているのはハイパーバイザコールのおかげです。
試しに普通のovzkernelをインストールしたところ、インスタンスのStatusがrunningにも関わらずSSH接続できない状態になりました。たぶんカーネルパニックでも起こしているのでしょう。



OpenVZがインストールされているAMIをpublicにしておきました
[ami-028af450]で検索すると利用可能です
ご自由にお使いください。
※ サーバイメージは入ってないので、各自でダウンロードしてご利用下さい。
OpenVZ Wiki template Download











■ AmazonEC2の1インスタンス中に4種類サーバが絶賛稼働中!

AmazonEC2にOpenVZを動かすごとができたので、まずはテスト用サーバ環境を再現してみました。仮想サーバのネットワークに関してはブリッジ接続させ、内部のサーバはNAT(iptables)して外部と通信できるようにしてあります。






この図ではプロキシサーバ、アプリケーションサーバ、キャッシュサーバ、データベースサーバを論理的に別サーバとして稼動させた際の構成図になります。












これで1インスタンスで4台分の役目を果たしてくれるようになりました。極端なことを言えば、
4倍はお得に利用が可能と言えるでしょう。
実際にいまこの環境をQAチームの人に渡してテストしてもらってます。このインスタンスを丸ごとAmazonEc2の機能のsnapshotでAMIイメージ化し(社内的にはオールインワンイメージとか呼ばれてます)それを復元するだけでテスト環境が提供できる体制が構築できました。
これでテストケースがいきなり10倍に増えたとしても環境が足りないからテストできない!!環境構築するのにサーバ買わないと・・・なんて心配は要らなくなりました。

AmazonEC2にOpenVZをインストールすることで、何倍もお得で便利な環境を構築することができました。
これからの展望としては開発環境の移行、ファイルサーバ(EC2+S3の利用)の移行などを計画・検討しています。またAmazonEC2上での成功事例ができたら、紹介したいと思いますので乞うご期待を。
次の記事
« Prev Post
前の記事
Next Post »

2 コメント

Write コメント
yukoba
AUTHOR
2011年3月19日 22:08 delete

この記事大変ありがとうございます!

おそらく、amzn-ami-2010.11.1 を使われて、
OpenVZのカーネルをインストールされたと思うんですが、
僕も、2010.11.1 と rhel5/028stab085.2 の組み合わせは
うまくいったのですが、最新の amzn-ami-2011.02.1 と
組み合わせるとカーネルパニックを起こすのですが、
何か理由とかご存じでしょうか?

Reply
avatar
fujya.sh
AUTHOR
2011年3月22日 12:44 delete

はじめましてyukobaさん。

>amzn-ami-2010.11.1 を使われて、OpenVZのカーネルをインストールされたと思うんですが
こちはその通りです。amzn-ami-2010.11.1をベースにOpenVZカーネルをインストールして利用しています。

>amzn-ami-2011.02.1 と組み合わせるとカーネルパニックを起こすのですが
こちらですが、私も試したことが無かったのでインストールしてみたのですが、起動に失敗していました。
ログをザッと見てみたのですが、カーネルパニックする前に起動途中に以下のログが出力されていました。
[/dev/fd/10: line 1: /sbin/plymouthd: No such file or directory initctl: Event failed]
上記が原因で、起動に失敗しその後リカバリモードに移り変わり、最終的にカーネルパニックとなっている模様です。

今回のAMIの更新内容を見てみたのですがRHEL5->RHEL6の更新と似ていました。
起動方法が大幅に変更されている事やRHEL6がXenカーネルをサポートしていない事などから起因していると思われます。

まだ詳細は調べていないのですが、OpenVZがRHEL6ベースのXenカーネルをサポートすれば解決する問題だと思いますが、
まだまだ先になりそうな予感がしています。


また別途詳細など調べてブログで報告したいと思います。

Reply
avatar
Related Posts Plugin for WordPress, Blogger...