お手軽RAC検証 (Oracle RAC on Amazon EC2 CloudFormation版)

Oracle RAC On Amazon EC2は以下のURLでも紹介していますが、
http://d.hatena.ne.jp/KNOPP/20120706/1341591598
EC2やVPCの扱いになれてないとやり辛いという部分がありました。


現在、Amazon Web Servicesでは、EC2やVPC等のリソースをまとめてテンプレート化する機能がCloudFormationとして提供されています。
そこで、CloudFormationと自作のスクリプトを組み合わせて、
お手軽にOracle RACのインストールを試してみたいと思います。


*何回も試していて、実績はある手順ですが、
たまに、http://public-yum.oracle.com/の調子が悪かったりして、
パッケージのダウンロードに失敗することがあります。
その場合のエラーハンドリングとかまったくやっていないので、最初からやり直しになります。
そのため、あくまで「人柱になってもいいぜ」って方がお試しください。


<環境構成>

インスタンス OS,インスタンスタイプ Private address ホスト名 VIPホスト名 Public IP VIP プライベートアドレス 役割
Controller Amazon Linux,t1.micro 10.0.0.200 ip-10-0-0-200 - - - - 自動設定&アクセス用
- Amazon Linux,m3.xlarge 10.0.0.100 ip-10-0-0-100 - - - - OpenVPN/NFS/Squidサーバ
- Oracle Linux 5.6,m1.medium 10.0.0.11 nodea.public nodea-vip.public 192.168.0.101 192.168.0.201 192.168.100.101 DBノード1
- Oracle Linux 5.6,m1.medium 10.0.0.12 nodeb.public nodeb-vip.public 192.168.0.102 192.168.0.202 192.168.100.102 DBノード2
- Oracle Linux 5.6,m1.medium 10.0.0.13 nodec.public nodec-vip.public 192.168.0.103 192.168.0.203 192.168.100.103 DBノード3
- Oracle Linux 5.6,m1.medium 10.0.0.14 noded.public noded-vip.public 192.168.0.104 192.168.0.204 192.168.100.104 DBノード4
- - - scan.public - 192.168.0.30 - -
- - - scan.public - 192.168.0.31 - -
- - - scan.public - 192.168.0.32 - -

*Controller以外は費用ケチって(費用が1/5程度)Spotインスタンスにしてます。
OSの停止はできません(rebootは可)。

<必要なもの>
SSHクライアント(Linux/Macは標準のものでOK、WindowsTeraTerm推奨)
・RDPクライアント
Amazon EC2へのサインアップ *1
・EC2 Key Pairの作成

*1 Amazon EC2へのサインアップは以下のURLを参考にしてください。
http://aws.amazon.com/jp/register-flow/


*2 Key Pairの作成は以下のURLを参考にしてください(Key Pair P23〜P29)
http://www.slideshare.net/AmazonWebServicesJapan/aws-basic-20120629


●CloudFormationにてVPC/EC2インスタンスの作成
1.AWS Management Console(https://console.aws.amazon.com/console/home)からCloudFormationへ移動します。

2.Create New Stackをクリックします。

3.Stack Nameは任意の値
Provide a Template URLに「https://s3-ap-northeast-1.amazonaws.com/oracle-on-ec2/rac_on_ec2_4node_nfs_spot.template」 を指定します。

4.KeyNameは上記で作成したKey Pairの値を入力してください

5.そのままcontinueをクリックします。

6.サマリが表示されますので問題なければ、continueをクリックします。

7.CloudFormationによる、VPC/インスタンスの作成が開始されます。

8.途中経過はResourcesから確認できます。

9. 5分ほどでVPC/Controllerインスタンスの作成が完了します。

10. Controllerインスタンス作成後、
Controllerインスタンスの自動スクリプト(Cloud-init)経由で
OpenVPNNFS/DBノードが作成され、
必要なパッケージやインストール前の設定が行われます。
パッケージのインストールに時間がかかるので大体30〜40分ほどかかります。

どの程度処理がすすんでいるかは、Controllerインスタンスに接続して確認します。

*Controllerインスタンスへの接続方法
1.画面上部のServices⇒EC2をクリックします。

2. Running Instances をクリックします。

3.Controllerを右クリックし、connectをクリックします。

4.Connect with a standalone SSH Clientをクリックすると接続情報が表示されます。

5. Teratermを起動し、4で表示されたIPを入力してOKをクリックします。

6.初めて該当のインスタンスに接続する場合は、このような表示がでますが気にせず、続行をクリックします。

6.ユーザ名にec2-userと入力し、RSA/DSA鍵を使うにチェックを入れ、秘密鍵をクリックします。

7.ファイルの種類は「すべてのファイル」を選択し、*2 Key Pairの作成 で作成した秘密鍵を選択します。

8.OKをクリックします。

10.インスタンスに接続できました。


処理が終わっているかどうかは、Controllerインスタンス上でps -elfを実行し、 sshNFS(10.0.0.100)やDB(10.0.0.11〜14)に操作をしていないかで判断します。

[ec2-user@ip-10-0-0-200 ~]$ ps -elf | grep ssh
5 S root      1135     1  0  80   0 - 15511 poll_s 09:29 ?        00:00:00 /usr/sbin/sshd
4 S root      1365  1317  0  80   0 - 14429 poll_s 09:34 ?        00:00:00 ssh -t ec2-user@10.0.0.100 sudo /home/ec2-user/01_server.sh
4 S root      1366  1135  0  80   0 - 23947 unix_s 09:35 ?        00:00:00 sshd: ec2-user [priv]
5 S ec2-user  1368  1366  0  80   0 - 23947 poll_s 09:35 ?        00:00:00 sshd: ec2-user@pts/0
0 S ec2-user  1415  1369  0  80   0 - 26918 pipe_w 09:40 pts/0    00:00:00 grep ssh

[ec2-user@ip-10-0-0-200 ~]$ ps -elf | grep ssh
5 S root      1135     1  0  80   0 - 15511 poll_s 09:29 ?        00:00:00 /usr/sbin/sshd
4 S root      1366  1135  0  80   0 - 23947 unix_s 09:35 ?        00:00:00 sshd: ec2-user [priv]
5 S ec2-user  1368  1366  0  80   0 - 23947 poll_s 09:35 ?        00:00:00 sshd: ec2-user@pts/0
1 S root      1436     1  0  80   0 - 14981 poll_s 09:40 ?        00:00:00 ssh -f -n root@10.0.0.11 /root/01_node.sh
1 S root      1441     1  0  80   0 - 14981 poll_s 09:40 ?        00:00:00 ssh -f -n root@10.0.0.12 /root/01_node.sh
1 S root      1446     1  0  80   0 - 14981 poll_s 09:40 ?        00:00:00 ssh -f -n root@10.0.0.13 /root/01_node.sh
1 S root      1451     1  0  80   0 - 14981 poll_s 09:40 ?        00:00:00 ssh -f -n root@10.0.0.14 /root/01_node.sh
0 S ec2-user  1470  1369  0  80   0 - 26918 pipe_w 09:47 pts/0    00:00:00 grep ssh

●インストールメディアのダウンロード&インストール
メディアのダウンロードはGUIで行う必要があるため、GUIで接続します。
今回は、リモートデスクトップが使える、XRDPに接続します。
なお、今回はセキュリティを考慮し、EC2側は22番ポートしか空けておらず、
また、DB各ノードはインターネットに直接接続されていません。
yumはStorageインスタンスsquid経由で行ってます)
そこで、Controller経由でSSHでトンネル(SSH ポートフォワーディング)します。


SSH ポートフォワーディングのやりかた(Teratermの場合)
1.ControllerへSSHで接続しておきます。
2.設定→SSH転送をクリックします。

3.追加をクリックします。

4.ローカルのポートは任意(例:1234) 、リモート側のホストは10.0.0.11、ポートに3389を入力し、OKをクリックします。

5.OKをクリックします。


SSHポートフォワーディングのやりかた(Linux/macの場合/RDPのポートにフォワードする場合)
ssh -i <キー名> <ControllerのIP> -L ローカルのポート:10.0.0.11:3389


リモートデスクトップでの接続方法
1.スタート→ファイルを指定して実行→mstscでリモートデスクトップを起動し、
コンピュータに localhost:<上記で指定したポート(例:1234)> と入力 し接続をクリックする。

2.XRDPのログイン画面が現れるので、ユーザ名にgrid パスワードにP@ssw0rdと入力します。

3.GUI画面が開きます。


・プロキシの設定
DB1インスタンスは直接インターネットにつながっていませんので、
Squidサーバ経由でインターネット接続を行う必要があります。
wgetcurlであれば、環境変数でプロキシの設定ができますが、firefoxはできない様なので、
GUIから設定をします。
1.システム→設定→ネットワークのプロキシを選択します。

2.HTTPプロキシとSSLプロキシには、10.0.0.100 ポート 3128と入力し、閉じるをクリックします。


*ちょっと時間がたりなかったので、以下手抜きします。。。(時間がとれれば、詳しく書きます。)
・OTNからlinux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_database_2of2.zip,linux.x64_11gR2_grid.zipのダウンロード


・Grid Infrastructureインストール時の指定
拡張インストールを選択

クラスタ名 任意
SCAN名 scan.public
SCANポート 1521
GNSの構成はしない


ホスト名、仮想IP名
nodea.public nodea-vip.public
nodeb.public nodeb-vip.public
nodec.public nodec-vip.public
noded.public noded-vip.public
SSHの設定は何もしないでOKです。(SSH接続の設定は済んでいます)


インターフェイス名、インターフェイスタイプ
eth0 使用しない
tap0 パブリック
tap1 プライベート


記憶域オプション
自動ストレージ管理


ディスクグループ名
任意
冗長性
外部
検出パスの変更
/oracleasm/*
候補ディスク
/oracleasm/crs



なぜか、ASMパスワードの設定画面では高い確率で文字が入力できなくなるので、
回避方法として、前の画面に戻って何か文字を入力する。



IPMI使用しない


*orainstRoot.sh/root.shはController経由で行います。
[ec2-user@ip-10-0-0-200 ~]$ sudo ssh root@10.0.0.11 /u01/app/oraInventory/orainstRoot.sh
[ec2-user@ip-10-0-0-200 ~]$ sudo ssh root@10.0.0.11 /u01/app/11.2.0/grid/root.sh


Grid Infrastructureインストール後、/u01/app/11.2.0/grid/bin/asmca で/oracleasm/dataをASMディスク(冗長性外部)として構成しておく。
→Database fileの格納先にする。



後は、Oracle Databaseをインストールして、Databaseを構成するだけです。(通常の手順と変わりません)
oracleユーザのOSパスワードはP@ssw0rdです。
先ほどのgridユーザのGUI画面からsu - するなり、XRDPからログインするなり、好みでどうぞ。



<検証が終わったら>
課金されつづけるのはもったいないので、各インスタンスのterminateと
CloudFormationからDelete Stackをします。