nkjmkzk.net

powered by Kazuki Nakajima

Archive for 3月, 2011

Oracle ORIONでAmazon EBSの性能を測る

ストレージパフォーマンスを計測するには単純なddコマンドからiozoneといった複雑なベンチマークツールまで数多のツールが存在します。そん中、もしあなたが「DBのI/Oパターンに似た負荷で、猫でも扱えるような性能テストツールはないものだろうか?」と思い悩んでいたなら、Oracle ORIONをお勧めします。

Oracle ORIONは無償で使えるI/O性能測定ツールで、主要なOSで使用することができます。そしてOracle Databaseが行うようなI/Oパターンを簡単に発生させることができるのが特徴です。要はDatabaseをインストールしなくてもDatabase的なI/O負荷で性能測定ができるというツールです。ダウンロードはこちらから。

http://www.oracle.com/technetwork/jp/topics/index-096484-ja.html

今回はLinux x86_64上で使用することとします。

まず性能測定するホストにOracle ORIONをダウンロードし、解凍します。解凍するとorion_linux_x86-64という実行ファイルが一つだけ現れます。ソイツに実行権限を付与します。

[root@ec2-nkjm]# gunzip orion_linux_x86_64.gz
[root@ec2-nkjm]# chmod 755 orion_linux_x86_64

これでインストールは終わりです。

早速性能を測定していきます。Oracle ORIONはファイルシステム上のファイル、ブロックデバイス、RAWデバイスに対して負荷をかけることができます。今回はEC2インスタンスにattachしたAmazon EBS (Elastic Block Store) の性能を測るのが目的ですのでインスタンスにEBSボリュームを/dev/sdfとしてattachし、その/dev/sdf(ブロックデバイス)に対して負荷をかけていきます。

まずxxxx.lunというファイルをorion_linux_x86_64と同じディレクトリ配下に作成し、そのファイルにテスト対象のボリュームを記載します。今回は/dev/sdfですね。

[root@ec2-nkjm]# vi ebs.lun
/dev/sdf

[root@ec2-nkjm]#

これで準備完了です。まずは手始めに下記のコマンドを実行してみます。

[root@ec2-nkjm]# ./orion_linux_x86-64 -run simple -testname ebs -num_disks 1
ORION: ORacle IO Numbers -- Version 11.1.0.7.0
ebs_20110323_1225
Test will take approximately 8 minutes
Larger caches may take longer

オプションを見てきましょう。

-run simple : 必要最低限のオプション設定で性能を測定。実際には8Kbyte単位のsmall ramdom readと1Mbyte単位のlarge random readを発行します。書き込みは行わないのでボリュームの情報は破壊されません。

-testname ebs : テスト対象ボリュームが記載されたファイルを指定。ebsとした場合はebs.lunというファイルからテスト対象ボリュームを読み取ります。

-num_disks 1 : テスト対象ボリュームを構成しているディスクが実際に何個のHDDから構成されているかを指定。EBSは1ボリュームにつき物理HDDが何本で構成しているといった情報は公開していませんが、1EBSボリュームを1HDDとみたてて1としてる。

テストが終わるとカレントディレクトリにいくつかのレポートが作成されます。一例としてsummaryをみてみます。

[root@ec2-nkjm]# less ebs_20110323_1225_summary.txt
ORION VERSION 11.1.0.7.0

Commandline:
-run simple -testname ebs -num_disks 1 

This maps to this test:
Test: ebs
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large Random IOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:,      0
Large Columns:,      0,      1,      2
Total Data Points: 8

Name: /dev/sdf      Size: 1610612736
1 FILEs found.

Maximum Large MBPS=110.71 @ Small=0 and Large=2
Maximum Small IOPS=7423 @ Small=5 and Large=0
Minimum Small Latency=0.62 @ Small=1 and Large=0

テスト内容と、最後にスループット(MBPS)、IOPSの最大値、Latencyの最小値が出力されています。スループットは恐らく1Gbpsで接続されているであろうストレージへのネットワーク帯域幅で頭打ちになっているようです。IOPSに関しては相当良い値がでていますね。15000RPMのHDD12本分くらいありそうな値です。他にもより詳細ないくつかのレポートが作成されます。
レポートの詳細とコマンドのその他オプションについては./orion_linux_x86_64 -helpで参照できる他、弊社の”いわもっちゃん”がわかりやすい資料を作成してくれていましたのでそちらを見てみてください。

Oracle ORION version 11.1 for Linux x86_64 とりあえずORIONでテストしたい人向け(PDF)

with 2 comments

Written by 中嶋 一樹

3月 23rd, 2011 at 5:02 pm

Posted in Uncategorized

EC2上のLinuxでOracleをインストールする時の注意:DHCP対応

EC2は現在固定IPをサポートしていません。

Elastic IPを割り当てればGlobal IPは固定にできますが、そのアドレスはOSに割り当てられてはおらず、NATされてOSにルーティングされてきます。そしてOSに直接割り当てられているのは常にPrivateアドレスであり、DHCPによって動的に割り当てられます。このPrivateアドレスを固定化することは現在できないようです。

ここで注意しなければいけないのはOracle(Grid InfrastructureまたはDatabase)をインストールするときのホスト名です。デフォルトではホスト名は割り当てられたPrivateアドレスを元に生成されます。つまり一旦停止して再度起動した場合にはホスト名が変わってしまいます。Oracleはホスト名をアプリケーションの設定に静的に組み込み、そのホスト名を解決して通信用ソケットを作成します。なのでこれが変わってしまうとそのままでは起動できなくなります。そしてホスト名だけ固定しても一旦インスタンスを停止してしまうと、次回起動時には十中八九同じPrivateアドレスは割り当てられません。したがってホスト名は固定にしながらも、動的に割り当てられるPrivateアドレスに都度正しく解決できるようしてやる必要があります。

僕は下記のような仕組みを作ってみました。

まず/etc/sysconfig/networkにてホスト名を静的に設定。

[root@ec2-nkjm]# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=ec2-nkjm

/etc/hostsの元となるファイルを作成。

[root@ec2-nkjm]# vi /etc/sysconfig/hosts.template
127.0.0.1       localhost.localdomain   localhost
::1     localhost6.localdomain6 localhost6

起動時に割り当てられたPrivateアドレスを元に/etc/hostsを都度生成するスクリプトを/etc/rc.localに挿入。

[root@ec2-nkjm]# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

PRIV_IP=`curl curl http://169.254.169.254/latest/meta-data/local-ipv4`
cp -f /etc/sysconfig/hosts.template /etc/hosts
echo "$PRIV_IP    $(hostname)" >> /etc/hosts

これでうまく動いています。もっといい方法もありそうですがとりあえずこれでやり過ごせそうです。

*ちなみに一度インスタンスを停止するとElastic IPも割り当てがはずれてしまいますので再度Assosicateする必要があります。

without comments

Written by 中嶋 一樹

3月 22nd, 2011 at 11:56 pm

Posted in Uncategorized

Tagged with , ,

EC2でEBSベースのAMIをRegion間移行する方法

EC2をしばらく使っていると、クラウドといえどRegionというのはかなりハードなパーティションであることがわかります。あるRegionで作成したSnapshot, Volume, AMI, InstanceはそのRegionでしか利用することができませんし、Region間通信にPrivateセグメントは利用できません。

S3ベースのAMIに関してはRegion間移行するためのAPIが用意されているのですが、EBSベースのAMIについてはRegion間移行を行う手段は提供されていません。つまり、例えばUS Eastで作成したAMIをAP North Eastでも使えるようにしたい場合にそれを簡単に実現するためのツールがないということです。Amazonさんの勢いからするとその内ec2-migrate-imageがEBSもサポートしそうな気もしないでもないのですが、まさに今時点でこのEBSベースのAMIをRegion間移行を手動で行う方法を見ていきたいと思います。

*AWS Management Consoleで行える作業でについては詳細な画面操作は割愛します。

移行先Regionでの作業

  • まず移行元AMIのEBSボリュームと同じサイズでボリュームを作成します。
  • なんでもいいのでLinuxインスタンスをLaunchします。ここではAmazon Linux AMI 64bitを使うこととします。
  • 先ほど作成した空のEBSボリュームをインスタンスにattachします。ここでは/dev/sdfとしてattachすることとします。
  • インスタンスにログインし、ec2-userのパスワードを設定します。
  • あと、セキュリティグループでこのインスタンスに対してSSH接続ができるように設定しておきます。

 

移行元Regionでの作業

  • 移行したいAMIのEBSボリュームのSnapshotを作成します。
  • このSnapshotからボリュームを作成します。
  • なんでもいいのでLinuxインスタンスをLaunchします。ここではAmazon Linux AMI 64bitを使うこととします。
  • このインスタンスに先程作成したボリュームをattachします。ここでは/dev/sdfとしてattachすることとします。
  • インスタンスにログインし、下記のddコマンドで/dev/sdfの情報を吸い上げながらそれをSSH経由で移行先インスタンスに送信して同じくddで書き出します。EBSボリュームのサイズにもよりますがそれなりに時間がかかります。僕が実施したときの実績では転送スピードは1.4MB/sくらいでしたのでそれを目安に計算してください。なお、screenで作業する等して、もしセッションが切れても泣かないようにしてのぞみましょう。
[ec2-user@sender]$ sudo dd if=/dev/sdf | ssh [移行先RegionのインスタンスのIP] sudo dd of=/dev/sdf

 

再び移行先Regionでの作業

  • インスタンスを停止します。
  • EBSボリュームをインスタンスからdetachします。
  • EBSボリュームのSnapshotを作成します。
  • ec2-registerコマンドで、作成したSnapshotからAMIを登録・作成します。このとき、–kernelパラメータや–ramdiskパラメータに注意してください。これらのオプションに渡す値はRegionで異なります。これはkernelイメージやramdiskイメージもRegion毎に管理されているため、別Regionのイメージを指定することはできないからです。僕はUser Provided Kernelを使用するため、今回の移行先Region (AP North East)でそれに応じたAKIとなるaki-d409a2d5を指定しました。
[nkjm@mac]$ ec2-register -n 'Oracle Linux 5.6 64bit customized by nkjm' -d 'Oracle Linux optimized for Grid Infrastructure and Oracle Database' --root-device-name /dev/sda1 -b /dev/sda1=snap-215ef049 -a x86_64 --kernel aki-d409a2d5

これでAMIの移行は完了です。

without comments

Written by 中嶋 一樹

3月 20th, 2011 at 10:18 pm

Posted in Uncategorized

Tagged with , ,

EC2のTokyo RegionでOracle Linux AMIを公開しました

先日US East (Virginia)で作成・公開したカスタムOracle Linux AMIですが、AP North East (Tokyo)でも公開しました。モノは全く同じで、Grid InfrastructureやOracle Databaseの検証を行うのに適したミニマムOSです。*2011.04.06 updated

AMI ID: ami-6ac2686b
Name: Oracle Linux 5.6 64bit customized by nkjm
Region: AP North East (Tokyo)

やはり検証作業時、特にターミナルでの作業時にはレイテンシーの影響が大きいので日本で使っていただく際にはTokyo Regionが望ましいでしょう。はっきりと体感速度が違います。また、Tokyo RegionではまだOracleから公式なAMIを提供できていません(今日現在、Communitiy AMIsで「oracle」と検索いただければ今回僕が公開したものしか出てきません)。

なのでご入用の際にはこちらをご利用あそばせ。

with one comment

Written by 中嶋 一樹

3月 20th, 2011 at 12:45 pm

Posted in Uncategorized

Tagged with ,

EC2: Tokyo Region (AP North East)でのUser Provided Kernel用のAKI

先日ポストしたこちらのエントリで紹介しているPDFにはTokyo RegionでUser Provided Kernelを使用するためのAKIがまだ記載されていませんので下記にリストしておきます。

IMAGE aki-d609a2d7 ec2-public-images-ap-northeast-1/pv-grub-hd00-V1.01-i386.gz.manifest.xml
IMAGE aki-d809a2d9 ec2-public-images-ap-northeast-1/pv-grub-hd00-V1.01-x86_64.gz.manifest.xml
IMAGE aki-d209a2d3 ec2-public-images-ap-northeast-1/pv-grub-hd0-V1.01-i386.gz.manifest.xml
IMAGE aki-d409a2d5 ec2-public-images-ap-northeast-1/pv-grub-hd0-V1.01-x86_64.gz.manifest.xml

ちなみにこのリストは下記のコマンドで取得できます。

[nkjm@mac]$ export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
[nkjm@mac]$ ec2-describe-images -o amazon --filter "image-type=kernel"

without comments

Written by 中嶋 一樹

3月 20th, 2011 at 12:08 pm

Posted in Uncategorized

Tagged with ,

EC2上でカスタムOracle Linux AMIを作成する・その全工程

Oracleが提供しているOracle Linux 5.5 64bit AMIにいくつかカスタマイズを行ってオリジナルAMIを作成しました。このオリジナルAMIは僕が普段から検証でよく使っている構成で、Storage GRIDを構成するためのGrid InfrastructureやOracle Databaseをスポーンとインストールすることができるミニマムな環境になります。今回はその全行程を紹介します。

ベースとなるAMI: ami-09d43a60から新しいインスタンスを作成します。また、同時にボリュームサイズをデフォルトの10Gbyteから26Gbyteに拡張しておきます。

[nkjm@mac]$ ec2-run-instances ami-09d43a60 -t t1.micro -b /dev/sda1=snap-bedb19d6:26 -k nkjmkey --ramdisk ari-25d43a4c --kernel aki-23d43a4a

インスタンスにログインします。

[nkjm@mac]$ ssh -l root -i nkjmkey.pem ec2-50-17-122-234.compute-1.amazonaws.com

ボリュームサイズ(このインスタンスではブロックデバイスのパーティションに相当)に合わせてファイルシステムを拡張します。

[root@rc1]# resize2fs /dev/sda1

タイムゾーンをJSTに合わせます。

[root@rc1]# rm /etc/localtime
[root@rc1]# cp /usr/share/zoneinfo/Japan /etc/localtime

不要なサービスを停止します。

[root@rc1]# for i in ip6tables iptables mcstrans isdn auditd restorecond portmap nfslock mdmonitor rpcidmapd rpcgssd setroubleshoot o2cb bluetooth netfs ocfs2 pcscd acpid hidd autofs oracleasm hplip cups xinetd sendmail gpm xfs rhnsd
do
    chkconfig $i off
done

不要なパッケージグループを削除してミニマム化を図ります。

[root@rc1]# yum groupremove 'Games and Entertainment' 'Graphics' 'Graphical Internet' 'Mail Server' 'Office/Productivity' 'Printing Support' 'Sound and Video'

最新のYumレポジトリ情報をインストールし、OS全体をアップデートします。また、その後恐らく何らかの依存関係でうっかり入ってしまったパッケージグループを削除します。

[root@rc1]# rm /etc/yum.repos.d/public-yum-el5.repo
[root@rc1]# wget http://public-yum.oracle.com/public-yum-el5.repo
[root@rc1]# yum update
[root@rc1]# yum groupremove 'MySQL Database' 'Mail Server'

アップデートしたカーネルを利用するためにGRUBのメニューリストを作成しておきます。

[root@rc1]# vi /boot/grub/menu.lst
default=0
timeout=3
hiddenmenu

title Oracle Linux 5.6 64bit
    root (hd0)
    kernel /boot/vmlinuz-2.6.18-238.el5xen root=/dev/sda1 console=hvc0
    initrd /boot/initrd-2.6.18-238.el5xen.img

スワップ領域用のファイルを作成し、スワップに割り当てます。これは後々Grid InfrastructureやOracle Databaseのインストール時にスワップがないと怒られるためです。(どっちみに容量が足りないといって怒られるのですがもうそれは無視します)

[root@rc1]# dd if=/dev/zero of=/var/tmp/swap.img bs=1M count=2048
[root@rc1]# mkswap /var/tmp/swap.img
[root@rc1]# swapon /var/tmp/swap.img
[root@rc1]# vi /etc/fstab
/dev/sda1                  /                       ext3    defaults        1 1
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/var/tmp/swap.img     swap     swap     defaults     0     0

udevのルールを作成します。これは後々ASM(Automatic Storage Management)に追加のEBSボリュームを認識させるためです。

[root@rc1]# vi /etc/udev/rules.d/80-oracle.rules
KERNEL=="sd*",OWNER="oracle",GROUP="oinstall",MODE="660"
KERNEL=="xvd*",OWNER="oracle",GROUP="oinstall",MODE="660"

Grid Infrastructure、Databaseをインストールするにあたり必要なパッケージをまとめてインストールしてくれるoracle-validatedをインストールします。

[root@rc1]# yum install oracle-validated

あった方が便利なソフトウェアをいくつかインストールしていきます。
まずscreen。

[root@rc1]# yum install screen

高速に圧縮/解凍を行うためのpbzip2。

[root@rc1]# yum install bzip2-devel
[root@rc1]# wget http://compression.ca/pbzip2/pbzip2-1.1.2.tar.gz
[root@rc1]# tar xvfz pbzip2-1.1.2.tar.gz
[root@rc1]# cd pbzip2-1.1.2
[root@rc1]# make && make install

sqlplusを便利にするrlwrap。

[root@rc1]# yum install readline-devel
[root@rc1]# wget http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz
[root@rc1]# tar xvfz rlwrap-0.37.tar.gz
[root@rc1]# cd rlwrap-0.37
[root@rc1]# ./configure
[root@rc1]# make && make install

viでvimを起動するためのalias設定を行います。

[root@rc1]# vi /root/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'

# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

ログやキャッシュ、SSH鍵情報をクリーンアップしてAMIとしてリパックするための前処理を行います。

[root@rc1]# oraclevm-template --cleanup
[root@rc1]# oraclevm-template --enable
[root@rc1]# history -c

インスタンスを停止します。

[nkjm@mac]$ ec2-stop-instances i-5409fe3b

インスタンスのボリュームのスナップショットを作成します。

[nkjm@mac]$ ec2-create-snapshot -d 'Oracle Linux 5.6 64bit customized by nkjm' vol-193e7874

スナップショットからAMIを登録します。

[nkjm@mac]$ ec2-register -n 'Oracle Linux 5.6 64bit customized by nkjm' -d 'Oracle Linux optimized for Grid Infrastructure and Oracle Database' --root-device-name /dev/sda1 -b /dev/sda1=snap-cb0e4aa7 -a x86_64 --kernel aki-427d952b

AMIを公開します。(デフォルトでは非公開になっています)

[nkjm@mac]$ ec2-modify-image-attribute ami-dc07f5b5 --launch-permission -a all

そして実際にこのAMIを公開しています。

AMI ID: ami-dc07f5b5
Name:
Oracle Linux 5.6 64bit customized by nkjm
Region:
US East

特に最新のASMやDatabase等のOracleソフトウェアをこれから検証してみたいけどなかなかそういった機材がないという方、AWSのアカウントを作成してこのAMIを試してみたりしてはいかがでしょうか。AMIについてのフィードバックもいただけるとhappyです。

with one comment

Written by 中嶋 一樹

3月 18th, 2011 at 1:03 pm

Posted in Uncategorized

Tagged with , ,

EC2でOracle Linux AMIを使ってカスタムAMIを作る方法

OracleはEC2用のAMIを数多く提供しています。そうしたAMIをそのまま使ってももちろんOKなのですが、やはり自分の環境用にカスタマイズしたくなります。実際EC2ではAMIをカスタマイズして再度それを新しいAMIとして登録することができます。こうして自分だけのAMI作っておけば後々おなじようなセットアップ作業を繰り返しおこなう必要がなくなって便利ですよね。

ときにOracle VMではOracle VM Templateというものを提供していますが、EC2上のOracle AMIはこのVM Templateの実装を取り込んでいます。Oracle VM Templateにはoraclevm-templateというツールがインストールされており、このツールを使うとテンプレートのカスタマイズがちょっぴり楽チンになります。そしてこのoraclervm-templateがOracle Linux AMIにもインストールされているのです。

どういう風に楽チンなのか。

EC2上で新規にAMIを作る際には既存のAMIをベースにカスタマイズを行いそれを新AMIとして再登録する形が最も簡単だと思いますが、その際には一度AMIからホスト固有の情報をはぎとってニュートラルな状態にするためにSSH用の鍵を消したり、ログを消したり、キャッシュを消したり、という面倒な作業が必要になります。

ここでoraclevm-templateの出番です。AMIのカスタマイズが一通り完了して、これからAMI登録するよ、という時点で、下記のコマンドを発行します。

[root@~]# oraclevm-template --cleanup
[root@~]# oraclevm-template --enable

するとAMIから現在のログ等がクリーアップされ、次回起動時には新しい鍵ファイルが生成されるといった具合で最後の一手間をまとめてやってくれます。そしてこのクリーンアップ処理はきちんとEC2対応しており、通常だとoraclevm-template –cleanupしてしまうとネットワーク情報がリセットされるためSSH接続がきれてしまうのですが、EC2ではSSHがライフラインなのでここが切れては困ります。そこでoraclevm-templateはEC2上ではネットワークのリセットは行わないような配慮が加えられています。なので安心してcleranupしてください。

クリーンアップをおこなったらインスタンスを停止し、EBSボリュームのSnapshotを作成します。

[nkjm@mac]$ ec2-create-snapshot -d 'cleaned image' vol-42aaf52a
* -d: 作成されるスナップショットの説明
* vol-42aaf52a: EBSのVolume ID(ec2-describe-instancesで確認)

そしてSnapshotからAMI登録する、とすればオリジナルのAMIが出来上がりです。

ec2-register -n my-new-ami -d 'nakajima template' --root-device-name /dev/sda1 -b /dev/sda1=snap-be86f0d2 -a x86_64 --kernel aki-23d43a4a --ramdisk ari-25d43a4c
* -n: 作成されるAMIの名前
* -d: 作成されるAMIの説明
* --root-device-name: インスタンスからみたルートデバイス
* -b: ルートデバイスとそれに対応するSnapshotのID(ec2-describe-snapshotsで確認)
* -a: アーキテクチャ
* --ramdisk: ramdiskのID(元のインスタンスで確認)
* --kernel: kernelのID(元のインスタンスで確認)

このAMIはMy AMIsとして登録されますので、Lauch Instanceする際にこのAMIをMy AMIsから選択してインスタンスを作成できます。

ちなみに僕はami-09d43a60をベースに自分のAMIを上記手順で作成しています。

without comments

Written by 中嶋 一樹

3月 17th, 2011 at 5:07 pm

Posted in Uncategorized

Tagged with , ,

EC2でLinux Kernelを普通にアップデートする方法

EC2では従来のAMIから作成したインスタンスでyum updateなどをおこなってkernelをアップデートしOSを再起動してもkernelはアップデートされませんでした。これは従来のAMIがkernelをマシンイメージ内で管理していないためです。kernelは外部にあるものをaki-ホゲホゲというKernel IDをインスタンス属性で指定することによって管理されており、マシンイメージ内にあるkernelは無視されることになります。

とはいえユーザがkernelをマシンイメージ内で普通に管理したい、というような要望に応えるため(だと思う)にUser Provided Kernelという構成がいつからサポートされるようになったようです。名前は難しいですが、要は他の一般的な環境と同じようにマシンイメージ内のkernelを使えるようになったよ、ということです。

今回は先日から採用しているOracle Linux 5.5 64bitのAMI(ami-09d43a60)をベースにUser Provided Kernelを利用する方法をみていきます。

ami-09d43a60からインスタンスを作成すると、2.6.18-194.0.0.0.3.el5xenというkernelで起動しますが、これはマシンイメージの外にあるkernelです。現時点では/bootは空の状態です。

[root@~]# uname -r
2.6.18-194.0.0.0.3.el5xen
[root@~]# ls /boot/
[root@~]#

まずはこのインスタンス内に新しいkernelをインストールします。Oracle Linux 5の最新のYum Repository情報をダウンロードし、現時点で最新のOracle Linux 5.6のkernelをインストールします。

[root@~]# cd /etc/yum.repos.d/
[root@~]# rm public-yum-el5.repo
[root@~]# wget http://public-yum.oracle.com/public-yum-el5.repo
[root@~]# vi public-yum-el5.repo
[ol5_u6_base]
name=Oracle Linux $releasever - U6 - $basearch - base
baseurl=http://public-yum.oracle.com/repo/OracleLinux/OL5/6/base/$basearch/
gpgkey=http://public-yum.oracle.com/RPM-GPG-KEY-oracle-el5
gpgcheck=1
enabled=1

[root@~]# yum update kernel -y
[root@~]# ll /boot
total 7384
-rw-r--r-- 1 root root   66896 Jan  4 16:30 config-2.6.18-238.el5xen
drwxr-xr-x 2 root root    4096 Mar 16 04:48 grub
-rw------- 1 root root 2493259 Mar 16 04:43 initrd-2.6.18-238.el5xen.img
-rw-r--r-- 1 root root  113855 Jan  4 16:34 symvers-2.6.18-238.el5xen.gz
-rw-r--r-- 1 root root 1224968 Jan  4 16:30 System.map-2.6.18-238.el5xen
-rw-r--r-- 1 root root 2185523 Jan  4 16:30 vmlinuz-2.6.18-238.el5xen
-rw-r--r-- 1 root root  421549 Jan  4 15:38 xen.gz-2.6.18-238.el5
-rwxr-xr-x 1 root root  978000 Jan  4 18:22 xen-syms-2.6.18-238.el5

ちなみに本来はイケイケなUEK(Unbreakable Enterprise Kernel)を使いたいところですが、僕が試した限りではUEKでは起動させることができませんでした。UEKは従来のParavirtual Kernelではなく、pvopsという非仮想化環境/仮想化環境兼用のkernelになっているのでそのあたりのビルドオプションがうまく合ってないのかな、と推測しています。一方、Amazon Linux AMIもkernel 2.6.34ベースのものなのでpvops kernelのはずですが、こちらはUser Provided Kernelとして起動できています。なのでpvops自体がNGということはないと思いますが、どうすればEC2 Compatibleなpvops kernelとしてビルドできるのかはわかっていません。

次にgrubのメニューファイルを作成します。

[root@~]# cd /boot
[root@~]# mkdir grub
[root@~]# vi grub/menu.lst
default=0
timeout=3
hiddenmenu

title Oracle Linux 5.6 64bit
    root (hd0)
    kernel /boot/vmlinuz-2.6.18-238.el5xen root=/dev/sda1
    initrd /boot/initrd-2.6.18-238.el5xen.img

ここで一度インスタンスを停止し、インスタンスのkenel属性を変更してAKIをUser Provided Kernelに準じたもの変更します。

[nkjm@mac]$ ec2-modify-instance-attribute i-f6668e99 --kernel aki-427d952b
* i-f6668e99: インスタンスID 適宜変更が必要
* --kernel: AKI(Kernel ID) 今回のAMIであればaki-427d952bでOK

ちなみにUser Provided Kernelに準じたAKI一覧はこちらの資料をご参考に。

Enabling User Provided Kernels in Amazon EC2 (PDFファイル)

本来はここでインスタンスのramdisk属性をNoneにしておくべきなのですが、kernelの方はec2-modify-instance-attributeで修正できるものの、ramdiskの値を消すということができなかったので(なんでやねん)、特に弊害がないようなのでそのままにしています。誰か消し方教えてください。

あとはインスタンスを再度起動してkernelを確認してみます。

[root@~]# uname -r
2.6.18-238.el5xen

ちゃんと新しいkernelで起動してます。

with one comment

Written by 中嶋 一樹

3月 16th, 2011 at 6:13 pm

Posted in Uncategorized

Tagged with ,

EC2においてEBS Snapshotでバックアップを取得しそれをリカバリする方法

EC2のインスタンスにはS3(Simple Storage Service)をルートデバイスにするタイプと、EBS(Elastic Block Storage)をルートデバイスにする2種類が存在します。S3の方はインスタンスを止めると消滅してしまい、EBSの方はインスタンスを止めても維持されます。

今回はEBSをルートデバイスとするインスタンスで、EBS Snapshotを使ってインスタンスをごっそりバックアップし、それをリカバリする手順をみていきます。AWS Management Console (Web UI) から実施できる作業もあるのですが、今回はすべてコマンドラインで攻めてみます。

*コマンドライン環境をセットアップしていない方はこちらを。
AWS EC2のコマンドラインインターフェースを使う準備

まずはSnapshotの作成からです。インスタンスに割り当てられているEBSのSnapshotを作成します。Snapshotはインスタンス起動中でも作成できますが、クリーンな状態でとりたい場合はインスタンスを停止してから作成するのが確実です。

[nkjm@mac]$ ec2-create-snapshot -d '2011_03_15 of nkjmkzk.net' vol-42aaf52a
* -d: 作成されるスナップショットの説明
* vol-42aaf52a: EBSのVolume ID(ec2-describe-instancesで確認)

次に今作成したSnapshotからAMIを作成します。AMI自体はインスタンスではなく、インスタンスを作るためのテンプレートのようなものです。

[nkjm@mac]$ ec2-register -n nkjmkzk.net-template -d 'template of nkjmkzk.net' --root-device-name /dev/sda1 -b /dev/sda1=snap-be86f0d2 -a x86_64 --kernel aki-23d43a4a --ramdisk ari-25d43a4c
* -n: 作成されるAMIの名前
* -d: 作成されるAMIの説明
* --root-device-name: インスタンスからみたルートデバイス
* -b: ルートデバイスとそれに対応するSnapshotのID(ec2-describe-snapshotsで確認)
* -a: アーキテクチャ
* --ramdisk: ramdiskのID(元のインスタンスで確認)
* --kernel: kernelのID(元のインスタンスで確認)

次に今作成したAMIからインスタンスを作成&起動します。

[nkjm@mac]$ ec2-run-instances ami-fe39cb97 -t t1.micro -k nkjmkey --ramdisk ari-24d43a4c --kernel aki-23d43a4a
* ami-fe39cb97: AMIのID(ec2-describe-imagesで確認)
* -t: インスタンスタイプ
* -k: keypair

そしてElastic IPを今作成したインスタンスに紐付けます。

[nkjm@mac]$ ec2-associate-address 50.17.222.51 -i i-f0ce229f
* 50.17.222.51: 発行済みのElastic IP
* -i: 紐づけるインスタンスのID(ec2-describe-instancesで確認)

これでリカバリ完了です。

参考

with one comment

Written by 中嶋 一樹

3月 15th, 2011 at 5:21 pm

Posted in Uncategorized

Tagged with , ,

AWS EC2のコマンドラインインターフェースを使う準備

EC2(Elastic Computing Cloud)はAWS Management Consoleと呼ばれるナイスなWeb UIで操作が可能ですが、いくつかの操作はAmazon EC2 API Toolsと呼ばれるコマンドラインからしかサポートされていなかったりします。なのでEC2を自在に操るにはコマンドライン環境も整備しておく必要があるでしょう。

Mac OS X 10.6 Snow Leopardにてこのコマンドラインツールをセットアップしたときの作業手順を記録しておきます。

まずはこちらから最新のAmazon EC2 API Toolsをダウンロードします。

http://aws.amazon.com/developertools/351

ダウンロードしたzipファイルをローカルマシン(Mac OS X)上で解凍します。僕は/opt以下に解凍してついでにバージョンに依存しないシンボリックリンクを貼っておきました。

[nkjm@mac]$ cd /opt
[nkjm@mac]$ sudo unzip ~/Downloads/ec2-api-tools.zip
[nkjm@mac]$ sudo ln -s ec2-api-tools-1.4.1.2 ec2-api-tools

次に必要な環境変数をセットします。

[nkjm@mac]$ sudo vi ~/.bash_profile
JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
EC2_HOME=/opt/ec2-api-tools
EC2_CERT=/Users/nkjm/Dropbox/AWS/cert-5AR47DHHK3YULOREZJXFV7HMJJZGLH7J.pem
EC2_PRIVATE_KEY=/Users/nkjm/Dropbox/AWS/pk-5AR47DHHK3YULOREZJXFV7HMJJZGLH7J.pem
PATH=$PATH:$EC2_HOME/bin
export JAVA_HOME EC2_HOME EC2_CERT EC2_PRIVATE_KEY PATH

[nkjm@mac]$ . ~/.bash_profile

これでOKです。試しにRegionの一覧を表示するコマンドを叩いてみます。

[nkjm@mac]$ ec2-describe-regions
REGION	eu-west-1	ec2.eu-west-1.amazonaws.com
REGION	us-east-1	ec2.us-east-1.amazonaws.com
REGION	ap-northeast-1	ec2.ap-northeast-1.amazonaws.com
REGION	us-west-1	ec2.us-west-1.amazonaws.com
REGION	ap-southeast-1	ec2.ap-southeast-1.amazonaws.com

よさそうです。
あと、デフォルトのRegionはeu-east-1になっているので、例えばこれをTokyoに変更したい場合は、先ほど作成&編集した.bash_profileに次の一行を追加しておきます。

EC2_URL=https://ec2.ap-northeast-1.amazonaws.com

.bash_profileを編集したら.(ドット)コマンドで.bash_profileをリロードするのを忘れずに。

参考

with 2 comments

Written by 中嶋 一樹

3月 15th, 2011 at 5:17 pm

Posted in Uncategorized

Tagged with ,