openvswitch on EC2 その2

まずは、宣伝から

まだ席に余裕がありますので、興味ある方は是非
JPOUG> SET EVNETS 20140907


詳細は、こちら
JPOUG> SET EVNETS 20140907


前回公開したエントリでは、以下の問題がありました
・通信が不安定になることがある
→ブリッジインターフェースを二つに分ける必要がある
・EC2メタデータ(169.254.169.254)にアクセスできない
→br0から169.254.169.254にアクセスするrouteを低メトリックで登録
・インターネットにアクセスできない
デフォルトゲートウェイの指定が必要



前回分も含めて設定をやってくれるスクリプトを作成しましたので、公開します。
https://gist.github.com/s4ragent/c73655fbf6b75096c250


CentOS/RHEL限定です。(Oracle LinuxはUEKだと動かないと思います)
使い方

OVSのダウンロード/インストール
sh ec2openvswitch ovsinstall


ブリッジインターフェイスの作成/初期化
sh ec2openvswitch ovsinit


トンネルの作成
sh ec2openvswitch ovssetgre リモートIP1 リモートIP2 ・・・・


内部インターフェースの作成
sh ec2openvswitch ovscreateint 作成するデバイス名 IPアドレス NETMASK
*デバイス名は 英字+数字(0以外) 数字は vlan-idになります
例 sh ec2openvswitch ovscreateint vlan10 192.168.0.11 255.255.255.0

openvswitch on EC2

タイトルと話がズレますが、まずは、宣伝から


JPOUG> SET EVNETS 20140907


IIJさんの新しいオフィスが会場となります。みなさま奮ってご参加ください。

詳細は、こちら
JPOUG> SET EVNETS 20140907



さて、本題に入ります。


openvswtich をEC2で使う方法がどこ探しても見つからなかったので、真面目に調べてみました。
一応使えるところ(パフォーマンスは別として)までいったので軽くメモします。

ポイントは
・ブリッジのMACをeh0と同じにする
・ブリッジを固定IPにする。
です。


なお、Amazon Linuxでは動きません。
また、eth0にブリッジしているので、手順を誤ると接続不能になりますので、試す際には十分注意してください


環境
AMI ami-4c85ee7c(CentOS 6.5 HVM SRIOV) ・・・・ @understeer さんの公開しているCent OS 6.5(HVM) oregonリージョン(東京だったら ami-7fa6fe7e)
openvswtich 1.10(RDOから入るもの)
openvswtich間はgreで接続
tap0/tap1はvlanで分離

構成

ホスト名 実IP tap0 tap1
ホストA 172.31.10.220 192.168.0.11 192.168.1.11
ホストB 172.31.10.221 192.168.0.12 192.168.1.12
ホストC 172.31.10.222 192.168.0.13 192.168.1.13


インストール(各ホスト共通)

yum -y install https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm
yum -y install openvswitch
service openvswitch start
chkconfig openvswitch on

ブリッジの設定(各ホスト共通)

LANG=C
#NETMASKの取得
MyMASK=`ifconfig eth0 | grep 'inet addr' | awk -F '[: ]' '{print $19}'`
#eth0 IPの取得
MyIP=`ifconfig eth0 | grep 'inet addr' | awk -F '[: ]' '{print $13}'`
#eth0のMACアドレスの取得
MyHWADDR=`ifconfig eth0 | grep 'Link encap' | awk '{print $5}'`
ovs-vsctl add-br br0

cat > /etc/sysconfig/network-scripts/ifcfg-br0 <<EOF
DEVICE=br0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=$MyIP
NETMASK=$MyMASK
EOF

sed -i 's/BOOTPROTO/#BOOTPROTO/'  /etc/sysconfig/network-scripts/ifcfg-eth0
echo "MTU=1546" >> /etc/sysconfig/network-scripts/ifcfg-eth0

ovs-vsctl set bridge br0 other-config:hwaddr=$MyHWADDR
ovs-vsctl add-port br0 eth0 && service network restart

最後のnetwork restartで一瞬接続が切れます。

openvswtich間接続(ホストA)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.221
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.222
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

openvswtich間接続(ホストB)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.220
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.222
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

openvswtich間接続(ホストC)

ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.10.220
ovs-vsctl add-port br0 gre1 -- set interface gre1 type=gre options:remote_ip=172.31.10.221
ovs-vsctl set bridge br0 stp_enable=true

最後のovs-vsctl set bridge br0 stp_enable=trueで応答が10秒ほど途絶えます。

tap設定(ホストA)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.11
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.11
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.11
ifconfig tap1 192.168.1.11

tap設定(ホストB)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.12
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.12
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.12
ifconfig tap1 192.168.1.12

tap設定(ホストC)

cat > /etc/sysconfig/network-scripts/ifcfg-tap0 <<EOF
DEVICE=tap0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.13
NETMASK=255.255.255.0
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-tap1 <<EOF
DEVICE=tap1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.13
NETMASK=255.255.255.0
EOF

ovs-vsctl add-port br0 tap0 tag=1 -- set Interface tap0 type=internal
ovs-vsctl add-port br0 tap1 tag=2 -- set Interface tap1 type=internal
ifconfig tap0 192.168.0.13
ifconfig tap1 192.168.1.13


参考サイト
http://trickycloud.wordpress.com/2014/05/02/multiple-private-networks-with-open-vswitch-gre-tunnels-and-libvirt/

EC2で仮想IPにチャレンジ(現時点では諦め)

http://d.hatena.ne.jp/KNOPP/20140728/1406562348

の続き。

プログラムが異常終了するのは、ARPに対応していなかったようです。
(ARPパケットだとframe.ip_headerがNILになるので、異常終了してた)

そこで、ARPパケットでも対応したのが以下スクリプトになります。

#!/usr/bin/ruby
require 'rubygems'
require 'packetfu'
 
dev = ARGV[0]
mac=`ip link show #{dev} | awk '/ether/ {print $2}'`.chomp
ARGV.shift
dests = ARGV
 
cap = PacketFu::Capture.new(
          :timeout => 4000,
          :iface => dev, :start => true,
          :filter => "ether src #{mac} and ether[0] & 1 = 1")
loop do
  cap.stream.each do |pkt|
    frame = PacketFu::IPPacket.parse(pkt)
    i = 0   

    dests.each do |dest|
        frame.eth_daddr = dest
        if frame.proto[1].to_s == "IP" then     
                frame.ip_header.ip_id = frame.ip_header.ip_id + i
                frame.ip_header.ip_sum = frame.ip_header.ip_calc_sum()
                i = i + 1       
        end     
        frame.to_w(dev)
    end
  end
end


これで大丈夫。。。。。

と思いきや。残念なことにVPC側ではブロードキャストだけでなく、ARPパケットもいじっているようで、
multi-unicastしたARPパケットは、VPC側でmanageしているIPアドレスの解決要求以外は届きません。
tcpdumpで確認した結果)

なので、現時点では、multi-unicastを使ってもVIPを使うのは難しいということになります。


諦めてtincで頑張るしかないか。。。。

EC2で仮想IPにチャレンジ(未完)

twitterでは、度々呟いていますが、tincで30ノードRACを越えるべく頑張りつつ、
限界を感じる今日この頃です。
(30ノードを越えると、仮想L2ネットワークが不安定になり、config.shやroot.shが失敗したり、
node evictionが頻発する。。。。。)

そんな中、非常に面白いエントリがあったので、
RAC on EC2に応用できないかと少し検証してみました。

EC2-VPCでIPマルチキャスト/ブロードキャストを実現する(後編)
http://moomindani.wordpress.com/2014/07/22/ec2-vpc_multicast_broadcast_2/

→これで仮想IP扱うことができれば、tincに比べてオーバーヘッドが少ない(はず)なので、
なんとか、ノード数を増やせるかも。。。


環境
ホストA IP 172.31.1.159 (MAC 0a:30:35:58:2e:4d)
ホストB IP 172.31.1.160 (MAC 0a:96:80:90:16:ee)

※ともにAmazon Linux(amzn-ami-hvm-2014.03.2.x86_64-ebs) t2.micro使用


○セットアップ
ほぼそのまま以下のURLの手順で実行しています。
http://moomindani.wordpress.com/2014/07/22/ec2-vpc_multicast_broadcast_2/


○検証内容
・ホストB に仮想IPを割り当てて、使用できるか確認
具体的には、ホストBで  ifconfig eth0:0 172.31.1.161 を実行し、
ホストAから ping 172.31.1.161 を実行するだけです。

ホストB
#ruby mcast.rb eth0 0a:30:35:58:2e:4d 0a:96:80:90:16:ee &
#ifconfig eth0:0 172.31.1.161

ホストA
#ruby mcast.rb eth0 0a:30:35:58:2e:4d 0a:96:80:90:16:ee &
#ping 172.31.1.161

○結果

PING 172.31.1.161 (172.31.1.161) 56(84) bytes of data.
/usr/local/rvm/gems/ruby-1.9.3-p484/gems/packetfu-1.1.10/lib/packetfu/packet.rb:508:in `method_missing': undefined method `ip_header' for nil:NilClass (NoMethodError)
        from mcast.rb:21:in `block (3 levels) in <main>'
        from mcast.rb:19:in `each'
        from mcast.rb:19:in `block (2 levels) in <main>'
        from mcast.rb:15:in `each'
        from mcast.rb:15:in `block in <main>'
        from mcast.rb:14:in `loop'
        from mcast.rb:14:in `<main>'
From 172.31.1.160 icmp_seq=1 Destination Host Unreachable
From 172.31.1.160 icmp_seq=2 Destination Host Unreachable

プログラムが異常終了してしまいました。
なんとなくarpっぽい気がするので、
ホストBからホストAのarpエントリを削除後、ホストBへのpingで再現しました。

ホストB
#arp -a

ip-172-31-1-161.us-west-2.compute.internal (172.31.1.161) at <incomplete> on eth0
ip-172-31-0-2.us-west-2.compute.internal (172.31.0.2) at 0a:99:3b:60:39:13 [ether] on eth0
ip-172-31-0-1.us-west-2.compute.internal (172.31.0.1) at 0a:99:3b:60:39:13 [ether] on eth0
ip-172-31-1-159.us-west-2.compute.internal (172.31.1.159) at 0a:30:35:58:2e:4d [ether] on eth0
ip-172-31-1-255.us-west-2.compute.internal (172.31.1.255) at <incomplete> on eth0
instance-data.us-west-2.compute.internal (169.254.169.254) at 0a:99:3b:60:39:13 [ether] on eth0
ip-172-31-0-255.us-west-2.compute.internal (172.31.0.255) at <incomplete> on eth0

#arp -d ip-172-31-1-159.us-west-2.compute.internal

#ruby mcast.rb eth0 0a:30:35:58:2e:4d 0a:96:80:90:16:ee &

# ping 172.31.1.159

PING 172.31.1.159 (172.31.1.159) 56(84) bytes of data.
64 bytes from 172.31.1.159: icmp_seq=1 ttl=64 time=0.615 ms
/usr/local/rvm/gems/ruby-1.9.3-p484/gems/packetfu-1.1.10/lib/packetfu/packet.rb:508:in `method_missing': undefined method `ip_header' for nil:NilClass (NoMethodError)
        from mcast.rb:21:in `block (3 levels) in <main>'
        from mcast.rb:19:in `each'
        from mcast.rb:19:in `block (2 levels) in <main>'
        from mcast.rb:15:in `each'
        from mcast.rb:15:in `block in <main>'
        from mcast.rb:14:in `loop'
        from mcast.rb:14:in `<main>'
64 bytes from 172.31.1.159: icmp_seq=2 ttl=64 time=0.599 ms
64 bytes from 172.31.1.159: icmp_seq=3 ttl=64 time=0.523 ms

arpエントリがある状態で再度プログラムを実行しても異常終了しません。
#ruby mcast.rb eth0 0a:30:35:58:2e:4d 0a:96:80:90:16:ee &
#ping 172.31.1.159

PING 172.31.1.159 (172.31.1.159) 56(84) bytes of data.
64 bytes from 172.31.1.159: icmp_seq=1 ttl=64 time=0.632 ms
64 bytes from 172.31.1.159: icmp_seq=2 ttl=64 time=0.589 ms
64 bytes from 172.31.1.159: icmp_seq=3 ttl=64 time=0.631 ms
64 bytes from 172.31.1.159: icmp_seq=4 ttl=64 time=0.597 ms
64 bytes from 172.31.1.159: icmp_seq=5 ttl=64 time=0.476 ms
64 bytes from 172.31.1.159: icmp_seq=6 ttl=64 time=0.621 ms
64 bytes from 172.31.1.159: icmp_seq=7 ttl=64 time=0.522 ms
64 bytes from 172.31.1.159: icmp_seq=8 ttl=64 time=0.544 ms
64 bytes from 172.31.1.159: icmp_seq=9 ttl=64 time=0.584 ms

なんとなく発生条件は分かりましたが、どうしたものか。。。。
ネットワークの知識は薄く、packetfuも初めて使ったくらいなので、
これ以上頑張るのはしんどいかも。


P.S.
今回、初めてt2.micro使ってみましたが、パフォーマンスの良さに感激です。
rvm/ruby-1.9.3のコンパイルがt1.microに比べ、体感で3倍以上早く感じました。

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のスタート・メニュー/デスクトップってなくなった??)



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