お手軽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、WindowsはTeraTerm推奨)
・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)経由で
OpenVPN・NFS/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を実行し、 sshでNFS(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サーバ経由でインターネット接続を行う必要があります。
wgetやcurlであれば、環境変数でプロキシの設定ができますが、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をします。