Oracle RAC on IBM Cloud 

#IBM CloudのBMS(ベアメタルサーバ)に Oracle DBサーバーを導入し、RAC構成を構築してみた。

##### RAC構成によるHigh Availability構成 
##### データ格納用の外部StorageはASM管理

###▼  必要な資源の調達 

 * ベアメタル RHEL v7.4 x 2  -- Oracle RAC用 
 * Endurance Storage 4IOPS/GB 100GB x 5  -- Oracle DBのASMで利用 
 * Portable Private Subnet 8IP (Routed to VLAN)  -- Oracle RAC用 
 * 仮想サーバー CentOS v7.3 x 1  -- DNSサーバー用 


###▼ DB構成（ASM使用）

ベアメタル+RHEL v7.4でOracle RAC環境を構築 

    OS : RHEL 7.4 
    DBMS : Oracle E.E. 11.2.0.4 
      ( 2ノード RAC構成 )
    サーバ : racdb01.test.local と racdb02.test.local
    
    データベース)
    SID接頭辞   :  orcl
    インスタンス : orcl1 と orcl2
    グローバルデータベース名 : orcl.test.local 
    管理者管理型

      racdb01      racdb02    (host名)
      +---------+  +---------+
      |  orcl1  |  |  orcl2  |  (インスタンス名)
      +---------+  +---------+   
           |           |
           +-----+-----+
                 |
           +----------+
           |   orcl   |       (DB名)
           +----------+       (ASMを使用) 


###▼ サーバーネットワーク

~~~
サーバー		NIC			host name					備考
------------	--------	-------------------------	-------------------------------
ベアメタル 1	  Private	  racdb01.test.local		  Portable IPを設定
				Private		bms01.test.local			Primary IPをAlias追加
				Public		(racdb01-priv.test.local)	HW FWでInbound遮断
														Securityを考慮して変更
														Oracle RACのInterconnectに利用
------------	--------	-------------------------	-------------------------------
ベアメタル 2	  Private	  racdb02.test.local		  Portable IPを設定	
				Private		bms02.test.local			Primary IPをAlias追加
				Public		(racdb01-priv.test.local)	HW FWでInbound遮断
														Securityを考慮して変更
														Oracle RACのInterconnectに利用
------------	--------	-------------------------	-------------------------------
Oracle VIP		Private		(racdb01-vip.test.local)	dnsには登録しない
				Private		(racdb02-vip.test.local)	dnsには登録しない
------------	--------	-------------------------	-------------------------------
Oracle RAC 		Private		cluster0-scan.test.local	dnsでroud robin応答する
 (SCAN)			Private		cluster0-scan.test.local	dnsでroud robin応答する
				Private		cluster0-scan.test.local	dnsでroud robin応答する
------------	--------	-------------------------	-------------------------------
仮想サーバー	   Private		test01.test.local		   dnsの問合せ受けのNIC
				Public		 N/A					    HW FWでInbound遮断
~~~

###▼ ネットワーク構成

                       パブリックVLAN側（遮断）

                     ------+-------------+------ RACプライベートIP（インターコネクト）※1
                           |             |  
                       +---------+  +---------+
                       | racdb01 |  | racdb02 | 
                       +---------+  +---------+   
                           |             |  
                    -------+-------------+------  RACパブリックIP ※2

                      ユーザ毎のプライベートVLAN側

  ※1 IBM Cloudは物理的に個別のSwitchを採用する事は出来ないため、VLANを利用して構築し、
      アドレスはPublicNICのIPアドレスを付け替えて利用している。
      IPアドレスを付け替えているので、インターネット側からの接続はされない。
      
  ※2 RACの仮想ネットワーク(VIP)で利用するIPアドレスについては、
      IBM Cloudで提供されるPortable Private IPを採用し、
      それらの名前解決の為には、別の仮想サーバーにDNSを作って対応している。
      よって、SCAN(SCANリスナー、SCAN VIP)も利用している。



###▼ ストレージ構成

~~~
                         racdb01      racdb02    (ホスト)
                       +---------+  +---------+
                       |  orcl1  |  |  orcl2  |  (インスタンス)
                       +---------+  +---------+   
 +-------------------+   |   |           |   |    +-------------------+
 |  Oracleモジュール  |---+   +-----+-----+   +----|  Oracleモジュール | 
 +-------------------+             |              +-------------------+ 
  (ローカルストレージ)         +----------+          (ローカルストレージ)  
                              |   orcl   | 
                              +----------+      
                          (クラスターデータベース)
                        (共有ストレージ：ASMを使用) 
                          → ASMによる多重化が可能
~~~

   ホストは、ベアメタルを採用
   共有ストレージは、ブロックストレージをオーダーしiSCSIでASMを構成。Endurance Storage(4IOPS/GB 100GB x 10)を採用。
   ローカルストレージは、ベアメタルにHDDを追加して、そこにファイルシステムを作成。
   共有ストレージのiSCSIネットワークは、RACパブリックIPネットワークと共有している。



###▼ IBM Cloud環境での考慮事項 

 * Oracle RACに必要なInterconnectには、ベアメタルのPublic NICを利用し、Public Primary IPアドレスを変更する 
 * Oracle RACに必要なサービスIPアドレスには、Portable Private Subnetを利用し、Private Primary IPアドレスを変更する
 * Oracle製品(GIソフトウエアとDBソフトウエア共に)は、共有できる外部ストレージには導入しない 


###▼ 実施内容

####- 設定、導入 
 * ベアメタルのRHEL v7.4の設定 
 * ベアメタルにOracle DB 11.2.0.4を導入
	* RAC環境導入のためのシステム調整 
	* Grid Infrastructure のインストール 
	* データベースソフトウエア のインストール 
	* RACデータベースの作成

####- Oracle RACの稼動確認

  db、vip、scanリソース等の状況

 ~~~
[grid@racdb01 ~]$ crsctl status resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       racdb01
               ONLINE  ONLINE       racdb02
ora.LISTENER.lsnr
               ONLINE  ONLINE       racdb01
               ONLINE  ONLINE       racdb02
ora.asm
               ONLINE  ONLINE       racdb01                  Started
               ONLINE  ONLINE       racdb02                  Started
ora.gsd
               OFFLINE OFFLINE      racdb01
               OFFLINE OFFLINE      racdb02
ora.net1.network
               ONLINE  ONLINE       racdb01
               ONLINE  ONLINE       racdb02
ora.ons
               ONLINE  ONLINE       racdb01
               ONLINE  ONLINE       racdb02
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       racdb02
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       racdb01
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       racdb01
ora.cvu
      1        ONLINE  ONLINE       racdb01
ora.mrcl.db
      1        OFFLINE OFFLINE                               Instance Shutdown
      2        OFFLINE OFFLINE                               Instance Shutdown
ora.oc4j
      1        ONLINE  ONLINE       racdb01
ora.orcl.db
      1        ONLINE  ONLINE       racdb01                  Open
      2        ONLINE  ONLINE       racdb02                  Open
ora.racdb01.vip
      1        ONLINE  ONLINE       racdb01
ora.racdb02.vip
      1        ONLINE  ONLINE       racdb02
ora.scan1.vip
      1        ONLINE  ONLINE       racdb02
ora.scan2.vip
      1        ONLINE  ONLINE       racdb01
ora.scan3.vip
      1        ONLINE  ONLINE       racdb01
[grid@racdb01 ~]$
~~~

####- Oracle RACのパフォーマンステスト

*TBL2表にPL/SQLを使用して100万行をINSERTする時間を測定

~~~
データサイズは、16,384blocks x 8KB/block = 131MB

SEGMENT_NA SEGMENT_TYPE       TABLESPACE_NAME       EXTENTS       BLOCKS
---------- ------------------ ------------------ ---------- ------------
TBL2       TABLE              TBS_BIG                    87       16,384

-- 約21秒で完了

SQL> begin
  2  for i in 1..1000000 loop
  3       insert into TBL2 values(i, rpad(to_char(i),100,'A'));
  4     end loop;
  5     commit;
  6  end;
  7  /

PL/SQLプロシージャが正常に完了しました。

経過: 00:00:21.35
~~~
Endurance Storage 4IOPS/GB という最速ではないストレージを使用したが十分な速度が出たので、
機会があれば、Endurance Storage 10IOPS/GB などのより速いストレージを使用してテストしてみたくなった。

2020/10追記）
IBM Cloudデータセンターでは、Oracle DB及びOracleアプリケーションの全世界共通の標準運⽤サービス(ベストプラクティス）を提供するManaged Oracleサービスも提供しています。
Oracle DB及びOracleアプリケーションの専⽤ “運⽤付きPaaSサービス”です。

特徴としては、
 * 仮想化ソフトウェア（ハイパーバイザー）に Oracle VM が利⽤可能
   - VM上で稼働するOracle製品のライセンス費⽤を最適化
 * Oracle RACをサポート(最大4ノードまでサポート)
 * 仮想サーバーとベアメタルサーバーを提供。
 * Oracleサーバーと⾮Oracleサーバーを全てManaged Oracleの契約で⼀括提供可能



以上