nkjmkzk.net

powered by Kazuki Nakajima

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 , ,

Leave a Reply