nkjmkzk.net

powered by Kazuki Nakajima

Archive for the ‘oraclelinux’ tag

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上でカスタム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 , ,