RDS for Oracle DatabaseのMulti-Azについて考える

このエントリは、
JPOUG Advent Calender 2013(http://www.zusaar.com/event/1687004) の16日目
AWS Advent Calendar 2013 (http://www.zusaar.com/event/1117005) の16日目
のクロスエントリで、JAWS FESTA Kansai 2013のアンカンファレンスで
話し合われた内容を元にしています。


RDSといえば、MySQLになりがちですが、Oracleだって使えます。
そんな中で最も興味深い機能がMulti-Azです。

このエントリでは、RDS for Oracle DatabaseのMulti-Azについて考えていきます。

まずは、公開された情報からの推測してみます。
・エディションの縛りがない(SE1でも使える)ことから、Data Guardではない。

  • 以上-

・・・・公開された情報だけだと推測のしようがないので、
実際にMulti-AZ環境でフェールオーバさせて、アラートログを確認します。

検証はケチってdb.t1.microのSE1(licence-included)を使います。

フェールオーバ前後のアラートログを確認します。

<アラートログ抜粋>
Current log# 2 seq# 12 mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_2_8r2sbor6_.log
Tue Dec 03 09:41:13 2013
Archived Log entry 5 added for thread 1 sequence 11 ID 0x4ffec4be dest 1:
Tue Dec 03 09:44:27 2013 <<<<<<<<<<フェールオーバ後の再起動
Starting ORACLE instance (normal)
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 3
Autotune of undo retention is turned on.
IMODE=BR
ILAT =15
LICENSE_MAX_USERS = 0
SYS auditing is disabled
Starting up:
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production.
〜〜〜

Tue Dec 03 09:44:38 2013
alter database open
Beginning crash recovery of 1 threads  <<<<<<<<<<クラッシュリカバリ開始
Started redo scan
Completed redo scan
read 264 KB redo, 45 data blocks need recovery
Started redo application at
Thread 1: logseq 10, block 5
Recovery of Online Redo Log: Thread 1 Group 4 Seq 10 Reading mem 0
Mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_4_8r2sbtx5_.log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 11 Reading mem 0
Mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_1_8r2sbrg1_.log
Recovery of Online Redo Log: Thread 1 Group 2 Seq 12 Reading mem 0
Mem# 0: /rdsdbdata/db/ORCL_A/onlinelog/o1_mf_2_8r2sbor6_.log
Completed redo application of 0.20MB
Completed crash recovery at       <<<<<<<<<<クラッシュリカバリ完了
Thread 1: logseq 12, block 3, scn 243193
45 data blocks read, 45 data blocks written, 264 redo k-bytes read
LGWR: STARTING ARCH PROCESSES
Tue Dec 03 09:44:39 2013
<ここまで>


アラートログを見る限り、フェールオーバ後、
クラッシュリカバリが実行され、Oracleインスタンスが正常起動しています。
こういったアラートログの見え方がするのは、Active-StandbyのHA構成なのですが、この場合疑問が残ります。


データの同期はどうやっている?
クラッシュリカバリが走っている以上、オンラインRedoが同期されていると考えられ、
オンラインRedoを同期するとなると、以下が考えられます。

・共有ディスク
EBSボリュームはAzをまたぐことはできないので、EBSではないと思われます。
また、NFSiSCSIとした場合、IOPSを保障することは難しいと思われますので、
これもまた違うと思われます。

・フェールオーバ直前にEBSボリュームをコピー
フェールオーバ直前はOracleからのI/Oはとまっている(はず)ので、
ここでEBSスナップショット等を取得し、待機側へのEBSへ反映する。
ただ、このやり方だと、容量が大きい場合フェールオーバの時間が増大することが考えられ、
現実的ではないように思われます。



と、いろいろ考えてみたのですが、結論は出ませんでした。
JAWS FESTA Kansai 2013開催後から2ヶ月程考えているんですが、いい案が浮かばず、、、)

データの同期はこうやってるんじゃない?とか、間違いの指摘などありましたら、
コメントいただければと思います。

RDS for Oracle Databaseをとりあえずさわってみよう

今更ですが、EC2上にOracle Clientを入れてRDSに接続して色々試してみることにします。

とりあえず、今回はRDSに接続できるまでを試したいと思います。<今回やること>
1. VPC作成
2. RDSをセットアップ
3. VPC上のOracle Linux 6にOracle Client (12c)をインストール
4. Oracle Linux 上のOracle ClientからRDSへ接続する


1.と2.、3の一部 (Oracle Linux 6のインスタンス作成)までをCloudFormationで用意しました。
今回はケチって、RDSはLicense included(SE1)のt1.micro,
作業用のOracle Linux(オラクル社提供のAMIOL6.4-x86_64-7-21-2013-ebs (ami-d330a7d2)) をt1.microで作成しています。
RDSのユーザ/パスワードは oracle/oracle123 です


以下手抜き手順です。
(画面はRAC on EC2 CloudFormation版からかなり流用しているので、名前がおかしかったりしますがご容赦ください)


<必要なもの>
・OTNのアカウント
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インスタンス/RDSの作成
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.amazonaws.com/s4ragent/rds.json」 を指定します。


4.KeyNameは上記で作成したKey Pairの値を入力し、「I acknowledge that this template may create IAM resources」にチェックを入れ、continueをクリックします。


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


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


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


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


9.10分ほどでVPC/EC2インスタンス/RDSの作成が完了します。



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


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


3.接続したいインスタンスを右クリックし、connectをクリックします。


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


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


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


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


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


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


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


VPC上のOracle Linux 6にOracle Client (12c)をインストール
1-a. swapの追加

dd if=/dev/zero of=/swapfile bs=1MB count=1K
mkswap /swapfile
echo "/swapfile         swap                    swap defaults 0 0" >> /etc/fstab
swapon /swapfile


1-b. 必要モジュールをインストール

yum -y groupinstall "Desktop" "X Window System" "Japanese Support"
yum -y install oracle-rdbms-server-12cR1-preinstall firefox.x86_64 tigervnc-server unzip
easy_install-2.6 awscli


1-c. iptableの停止
/etc/init.d/iptables stop
chkconfig iptables off


1-d. hostsの修正
このままでは、自ホスト名(ip-xxxx-xxxxx)の名前解決ができずに、インストールに失敗してしまいます。
/etc/hostsに自ホスト名とIPを追加します。

echo `ifconfig eth0 |grep 'inet addr' | awk -F '[: ]' '{print $13}' ` `hostname -s` >>/etc/hosts


1-e oracleユーザのパスワード変更
VNC経由で操作時にスクリーンセーバが起動してしまうと、パスワードの入力が必要になります。ここでパスワードの変更をしておきます。
passwd oracle


1-f. Oracleユーザへsu -
su - oracle


1-g. EC2インスタンス側でvncserverを起動
vncserver
:1だったらポートは5901になります。


1-h. 自分のPCからvncviewerで接続


1-i. FireFoxを起動し、OTNからlinuxamd64_12c_client.zip をダウンロード
画面上部にFireFoxのマークがあるのでクリックします。


1-j. ダウンロードしたlinuxamd64_12c_client.zip を解凍
ターミナルは、画面上部 Applications→SystemTools→terminalで起動できます。

cd Downloads
unzip linuxamd64_12c_client.zip


1-k. Oracle Clientのインストーラーを起動し、インストール

cd client
./runInstaller

ここでは、インストールタイプにAdministratorを選択し、LanguageにJapaneseを追加する以外すべてデフォルトでインストールすることにします。
(ORACLE_HOMEは/home/oracle/app/oracle/product/12.1.0/client_1)


1-l RDSのEnd Pointを確認
managmentConsoleからサービス→RDS→Instances→Endpointを確認する。
「:」より前の部分がホスト名、「:」より後ろの部分(通常は1521)の部分がポート番号です。


1-m. tnsname.oraの編集
netcaを起動し、 tnsname.oraを編集します。

/home/oracle/app/oracle/product/12.1.0/client_1/bin/netca

Local Net Services Name Configuration→Add→TNS名を入力(ここではORCL)→TCP→Host NameにRDSのEnd Pointを入力、あとはそのままNextをクリック


1-n bash_profileの編集
ORACLE_HOMEとLD_LIBRARY_PATHの設定をします。

cat >> /home/oracle/.bash_profile <<'EOF'
export ORACLE_HOME=/home/oracle/app/oracle/product/12.1.0/client_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
EOF


1-o
sqlplusから接続確認
環境変数が反映されていないので、環境変数を設定後、接続
source /home/oracle/.bash_profile
sqlplus oracle/oracle123@ORCL



接続できたら、今日はこの辺で。

Oracle Database 12c RAC on Windows Azure(Windows Server 2012 R2)

Oracle Database 12c RAC on Windows AzureWindows Server 2012 R2(プレビュー版)で作ってみました。
Oracle Database 12c RACは、Windows Server 2012 R2での動作はもちろんサポートされてませんので、興味本位です。


<ポイント>
Windows Azureでは、ネットワークが一つ&マルチキャストが非サポート
→仮想ネットワーク(tinc) ×2


・共有ディスクがない
iSCSI(ターゲット/イニシエータ共Windows Server 2012標準で用意されているのでそれを使う)


・インストール中「Windowsのスタート・メニューまたはデスクトップにアイテムを作成できません」
と出るけど、強気に続行する(Windows Server 2012のスタート・メニュー/デスクトップってなくなった??)



そのうち手順を公開しましょうかね。


Oracle Database 12c RAC on Amazon EC2

Oracle Database 12c RAC on Amazon EC2 を早速チャレンジしてみました。


iSCSI/DNS RHEL-6.4_GA-x86_64-7-Hourly2 (ami-e74dc2e6)
DB1/DB2 RHEL-6.4_GA-x86_64-7-Hourly2 (ami-e74dc2e6)


ただし、GRIDインストール/DBインストール/DBCAのタイミングでCVUが


このオペレーティング・システムのディストリビューションの前提条件の検証に参照データを使用できません
(Reference data is not available for verifying prerequisites on this operating system distribution)


で失敗しており、CVUのエラーを無視してのインストールです。(無視して進むのに強い心が要りましたw)
次に時間が取れたら調査ですね。



Google Compute Engineを調べてみた

ついに、 Now available for everyone になりました。
public beta版の時に、試用申し込みしたのですがあっさりrejectされたので、待ちに待った感じです。

Oracle RAC on Amazon EC2と同じように、Google Compute EngineでもRAC組めないかなーと言うかなり偏った観点で
ざっとドキュメントを眺めてみます。
(英語力不足により間違った解釈をしてるかもしれませんので、その際はご指摘いただけるとうれしいです)


以下箇条書きです。

・日本語のドキュメントは多分古いので英語版使ったほうが無難
 ・一時ディスクの名前が日本語版だとエフェメラルディスクになってるけど、英語版は Scratch disks になってる。
 ・日本語のドキュメントではrootディスクはエフェメラルディスクのみになっている。
 (インスタンス停止すると、rootボリュームで更新した内容が消えちゃう)英語版には、root persistent disk の記載あり。

日本語版のドキュメント見て、 root persistent diskが無いんじゃ使い物にならないでしょ?と思って気づいた次第。


・仮想化はKVMを採用
https://developers.google.com/compute/docs/faq

・標準でサポートされるOSイメージははdebian6/7、centos6のみ
https://developers.google.com/compute/docs/faq
 What operating systems can my instances run on?

・上記イメージを元にカスタマイズして保存しておくことは可能。
https://developers.google.com/compute/docs/images#installinganimage

・自分自身のイメージを作成できる?
https://developers.google.com/compute/docs/building_image
ゼロからイメージを作成できるようですが、このURLだけでチャレンジするのは私には厳しいので、
もっと情報が出るのを待ちます。

・カスタムカーネルは使用できない。
https://developers.google.com/compute/docs/kernels
カーネルバージョンは固定のようです。
(asmlib、acfs動かすのは厳しいか、、、、)


・ネットワーク
https://developers.google.com/compute/docs/networking
 ・EC2で言うVPC相当のものはある。1つのインスタンスには1つのネットワークしか属することできない
  (Every instance is a member of a single network)
 ・ブロードキャスト/マルチキャストは未サポート

・共有ディスク
https://developers.google.com/compute/docs/disks#use_multi_instances
 複数インスタンスで同一の仮想ディスクを使用する場合は、read-onlyになる。


というわけで、Oracle RAC on Google Compute Engine をやるには、、、、、

Oracle Linuxをゼロから作る(もしくは、強引にCentOS上にRACインストール?)
NICが一つかつ、ブロードキャスト/マルチキャスト非サポートなので、仮想ネットワーク(OpenVPN/tincなどなど)を作る必要あり
・共有ディスク(iSCSI)を用意する必要がある

さて、どうやってOracle Linux用意しますかね。

Oracle Linux 5 のカスタムAMIを作る(EC2)

検証によく使ってたAMI Oracle Linux 5.6 x86_64 - Amazon Xen (ami-72bf0873)が残念ながら、消されてしまったようです。
それどころか、現在VPCで使えるタイプ(非OVMタイプ)のOracle Linux AMIが見つかりません。
Oracle Linux 5.6/Oracle Linux 6.1を最後に非OVMタイプのAMIの公開が止まっていたので、
なんだか嫌な予感がしつつ使い続けていたのですが、非常に残念です。


Oracle RAC on Amazon EC2自体は、RedHat Linuxインスタンスでもできるので、なんとかなるのですが、
RedHat Linuxインスタンスは残念ながら、spotインスタンスが使えません。
それだと検証用の費用がかさんでしまうので、
Oracle Linux 5 のカスタムAMIを作ってみることにします。


手順自体は、様々な方がCentOSのカスタムAMI作成手順を公開してくださっているので、
Oracle Linuxもほとんど一緒)そこまで大変ではありませんが、適当にやるとハマります。


ポイントは以下の3つです。


rpmデータベースのバージョンに注意
 rpmデータベースはRedhat/CentOS/OracleLinux 5系と6系でバージョンが異なります。
 Amazon Linux(CentOS6と一部互換?)で5系のカスタムAMIを作ろうとするとrpmデータベースのバージョンが異なるため、手間が増えます。


xen用のドライバを組み込んでinitrdを作成する必要がある。
 yumでkernelをインストールするとあまり意識しないのですが、(kernelインストールの延長でinitrdも作られるため)、
 xen用のドライバを組み込まないと、bootできないAMIになってしまいます。



ssh 公開鍵の読み込み
 EC2では基本的にsshは公開鍵/秘密鍵で接続しますので、公開鍵をAMIインスタンスに読み込ませる仕組みが必要です。


前置きが長くなりましたが、以下手順です。

1. 作業用のAMIインスタンスとして、 ami-3d7cc63c(RedHat 5.9 x86_64)を起動。/dev/sdbに12GB割り当てる。
上述のとおり、rpmデータベースのバージョンが絡むのでOracle Linux 5系と同じRedHat 5.xを作業用のAMIインスタンスとします。
t1.microで構いません。


2.以下のようなシェルを作成し、実行
すいません。時間がまた足りなくなったので、細かい解説端折ります。
ポイントだけコメントいれてます。

create_oraclelinux.sh

#!/bin/sh
mkfs.ext3 -F -L / /dev/sdb

mkdir /mnt/ami
mount -t ext3 /dev/sdb /mnt/ami
/sbin/MAKEDEV -d /mnt/ami/dev -x console
/sbin/MAKEDEV -d /mnt/ami/dev -x null
/sbin/MAKEDEV -d /mnt/ami/dev -x zero
mkdir /mnt/ami/etc
cp /etc/fstab /mnt/ami/etc
mkdir /mnt/ami/proc
mount -t proc none /mnt/ami/proc
mkdir /mnt/ami/etc/yum.repos.d/
mv /etc/yum.repos.d /etc/yum.repos.d.bak
curl -L -o /mnt/ami/etc/yum.repos.d/public-yum-el5.repo http://public-yum.oracle.com/public-yum-el5.repo
cp /etc/yum.conf /mnt/ami/etc/
yum -c /mnt/ami/etc/yum.repos.d/public-yum-el5.repo --installroot=/mnt/ami/ -y groupinstall Core Base

#modprobe.confにxen用のドライバを記載しておくと、kernel-xenインストールの延長で作成されるinitrdにもドライバが組み込まれる
cat > /mnt/ami/etc/modprobe.conf <<EOF
alias eth0 xennet
alias scsi_hostadapter xenblk
EOF
yum -c /mnt/ami/etc/yum.repos.d/public-yum-el5.repo --installroot=/mnt/ami/ -y install kernel-xen
yum -c /mnt/ami/etc/yum.repos.d/public-yum-el5.repo --installroot=/mnt/ami/ -y remove kernel

cat /etc/sysconfig/network-scripts/ifcfg-eth0 > /mnt/ami/etc/sysconfig/network-scripts/ifcfg-eth0
cat /etc/hosts > /mnt/ami/etc/hosts
cat /etc/sysconfig/network > /mnt/ami/etc/sysconfig/network
sed -i "s/enforcing/disabled/" /mnt/ami/etc/sysconfig/selinux
sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

#redhat linuxAMIでは、rc.localで/root/.ssh/authorized_keysがなければ、ssh公開鍵の読み込みをする作りになっているが、
#(1度AMIを作成したら、公開鍵は2度と変わらないことを想定)。今回作成のAMIをベースに色々カスタマイズする予定なので、毎回公開鍵を読み込み直すようにする。
cat /etc/rc.local > /mnt/ami/etc/rc.local
sed -i '/# Fetch public key using HTTP$/a rm -rf /root/.ssh/authorized_keys' /mnt/ami/etc/rc.local

cat  > /mnt/ami/boot/grub/menu.lst <<EOF
default=0
timeout=0
hiddenmenu

title oracle linux
root (hd0)
kernel /boot/`ls /mnt/ami/boot | grep vmlinuz` ro root=LABEL=/
initrd /boot/`ls /mnt/ami/boot | grep initrd`
EOF

sync;sync;sync;


3.マネジメントコンソールにて/dev/sdbのvolumeからからスナップショットを作成する。


4.マネジメントコンソールにて作成したスナップショットから、「create image from snapshot」を実行
その際、Architectureはx86_64,Kernel IDはaki-44992845、Root Device Nameは/dev/sda1、Ramdisk IDはdefaultを指定する。


iscsiとの競合のからみもあるので、本当は、Root Device Nameは/dev/sde1あたりにしたかったのですが、
それだと、何故かc1.mediumが起動してこないので、/dev/sda1にしています。


このカスタムAMIをベースにOracle RACの作成は出来たので、
検証に使う分には大丈夫だと思います。(ご利用は計画的に)


参考文献
http://blog.cloudpack.jp/2011/08/aws-news-suz-lab-centos-ami-600.html
http://sandbox4me.org/2012/03/create-ami-for-centos5/
http://gmt-24.net/archives/892
http://d.hatena.ne.jp/zsiarre/20121118/1353247925

お手軽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をします。