fu3ak1's tech days

何事もシンプルに。主にAWS関連の記事を書いています

Oracle CloudでRACデータベースを作成してみる

今回はAWSではなく、Oracle Cloudの記事となります。

f:id:fu3ak1:20201012165629p:plain

ちなみに私はこの記事でOracle Cloudデビューとなります。基礎的な内容かつ、理解が不足している部分があるかもしれませんがご容赦ください。

オンプレミス環境でOracle Real Application Clusters(Oracle RAC)の構築経験があるのですが、 設定内容が複雑であり、インストール時間もかかるので、データセンター内でヒーヒー言いながら構築した思い出があります。

今回はそのRAC構成のデータベースをOracle Cloudではどれだけ簡単に作れるのか?という観点で実際に作っていきたいと思います。 とりあえずRACを作ってみたいという方の参考になれば幸いです。

Oracle Cloud アカウントの作成

本記事ではデータベースを作るところを書きたいのでアカウント作成部分は割愛します。 他のクラウドと同様、メールアドレスやクレジットカード情報を登録することでアカウントの作成ができます。 Oracle Cloud Free Tierという無料枠があるので、今回はその枠を使用して作成していきます。

docs.oracle.com

仮想クラウド・ネットワーク(VCN)の作成

データベースを所属するネットワークを事前に作成します。 VCNと言われ、AWSだとVPC的なやつですね。 左側のメニューから「ネットワーキング>仮想クラウドネットワーク」を選択します。 選択後、VCNの作成をクリックします。

f:id:fu3ak1:20201012102833p:plain

名前に「OracleNetwork」、CIDRに「10.0.0.0/16」を入力して作成します。

f:id:fu3ak1:20201012103143p:plain

VCN内にサブネットを作成していきます。

f:id:fu3ak1:20201012103557p:plain

名前に「OracleSubnet」、CIDRに「10.0.0.0/24」を入力して作成します。 今回はインターネット経由で接続確認を行う予定のため、パブリック・サブネットで作成します。 実際の本番環境ではプライベート状態で作ることが多いと思います。今回は検証用途ということでご認識ください。

f:id:fu3ak1:20201012104359p:plain

インターネットから疎通を行うため、インターネットゲートウェイを作成し、ルートテーブルを変更しておきます。

f:id:fu3ak1:20201012110004p:plain

作成後↓

f:id:fu3ak1:20201012110121p:plain

先ほどのサブネットに指定したルートテーブルで、宛先0.0.0.0/0、ターゲットInternetGatewayを設定しておきます。

f:id:fu3ak1:20201012110344p:plain

以上でVCNの準備は完了です。

SSHキーペアの作成

データベースインスタンスに接続する際に必要なため作成しておきます。 OCI標準のシェル機能であるCloud Shellで作成していきます。 右上のCloud Shellのマークをクリックすることで下部にターミナルが出てきます。

f:id:fu3ak1:20201012112120p:plain

ターミナル上で下記コマンドを実行します。 Oracle公式ドキュメントのとおりです。

$ ssh-keygen

保存先とパスフレーズを聞かれますので任意で入力します。 今回は全てデフォルトでEnterを押下します。(パスフレーズなし)

実行後、.sshフォルダに公開鍵と秘密鍵が作成されていることを確認します。

$ ls -l ~/.ssh/
total 8
-rw-------. 1 xxxx oci 1679 Oct 12 02:23 id_rsa
-rw-r--r--. 1 xxxx oci  401 Oct 12 02:23 id_rsa.pub

データベースの作成

準備ができたのでデータベースを作成していきます。 Oracle CloudにはOracle Autonomous Databaseという良い感じで自動管理してくれるデータベースがあるのですが、 今回はよりオンプレミスに近いRACデータベースを作ってみるという目的で、仮想マシン型のデータベースを作成していきます。

「データベース>ベア・メタル、VMおよびExadata」を選択します。

f:id:fu3ak1:20201009172937p:plain

DBシステムの作成をクリック

f:id:fu3ak1:20201012101355p:plain

必要情報を入れていきます。

  • シェイプ(スペック)はデフォルトから1段階小さいStandard2.2
  • 冗長構成(2ノード)で作成したかったが、無料枠ではコア数に制限があるようなのでここではノード数1とする(残念)。
  • その他デフォルト

f:id:fu3ak1:20201012135045p:plain

  • SSHキーに、先ほどCloudShellで作成した「~/.ssh/id_rsa.pub」の内容を貼り付け。
  • その他デフォルト

f:id:fu3ak1:20201012133500p:plain

  • ネットワークはあらかじめ準備していたVCNとサブネットを指定
  • ホスト名接頭辞には任意の名前を入力。今回は「orcl202010」

f:id:fu3ak1:20201012133820p:plain

  • 管理ユーザーsysのパスワードを入力。複雑要件が高いです。

「パスワードは9文字から30文字とし、大文字、小文字、特殊文字および数字をそれぞれ2つ以上含める必要があります。特殊文字は_、#または-のいずれかです。」

  • その他デフォルト

f:id:fu3ak1:20201012134052p:plain

以上、これで「DBシステムの作成」をクリックします。

作成完了までしばらく時間がかかります。 「プロビジョニング中」になっていることを確認し待機・・

f:id:fu3ak1:20201012140210p:plain

しばらくすると使用可能状態となります。 (私は使用可能になるまで1時間ほどかかりました。普通なのでしょうか)

f:id:fu3ak1:20201012150316p:plain

SSH接続からのSQL接続

Cloud Shell経由で接続してみます。パブリックサブネットに作成したので、ノードにはパブリックIPが付与されています。 先ほどの使用可能状態が見えた画面からDBシステム名をクリックし、左下の「ノード」をクリックしてIPアドレス情報を確認します。

f:id:fu3ak1:20201012152805p:plain

作成したSSHキーとIPアドレス情報を使用して接続します。

$ ssh -i id_rsa opc@168.138.193.64
The authenticity of host '168.138.193.64 (168.138.193.64)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxx
ECDSA key fingerprint is MD5:xxxxxxxxxxxxxxxxxxxxxx
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '168.138.193.64' (ECDSA) to the list of known hosts.
[opc@orcl202010 ~]$

接続できました。ルートユーザーにもなれます。 oracleユーザーに切り替え、sqlplusで接続してみます。

$ sudo su -
Last login: Mon Oct 12 15:20:34 JST 2020
[root@orcl202010 ~]# su - oracle
Last login: Mon Oct 12 15:20:34 JST 2020
[oracle@orcl202010 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 12 15:22:56 2020
Version 19.8.0.0.0

Copyright (c) 1982, 2020, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
Version 19.8.0.0.0

接続できました!

RAC管理で使用するcrsctlコマンドで状況の確認も可能です。

$ /u01/app/19.0.0.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.COMMONSTORE.advm
               ONLINE  ONLINE       orcl202010               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       orcl202010               STABLE
ora.chad
               ONLINE  ONLINE       orcl202010               STABLE
ora.data.commonstore.acfs
               ONLINE  ONLINE       orcl202010               mounted on /opt/orac
                                                             le/dcs/commonstore,S
                                                             TABLE
ora.net1.network
               ONLINE  ONLINE       orcl202010               STABLE
ora.ons
               ONLINE  ONLINE       orcl202010               STABLE
ora.proxy_advm
               ONLINE  ONLINE       orcl202010               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr(ora.asmgroup)
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.DATA.dg(ora.asmgroup)
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.LISTENER_SCAN1.lsnr
      1        OFFLINE OFFLINE                               STABLE
ora.RECO.dg(ora.asmgroup)
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.asm(ora.asmgroup)
      1        ONLINE  ONLINE       orcl202010               Started,STABLE
ora.asmnet1.asmnetwork(ora.asmgroup)
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.cvu
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.db1012_nrt1hk.db
      1        ONLINE  ONLINE       orcl202010               Open,HOME=/u01/app/o
                                                             racle/product/19.0.0
                                                             .0/dbhome_1,STABLE
ora.orcl202010.vip
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.qosmserver
      1        ONLINE  ONLINE       orcl202010               STABLE
ora.scan1.vip
      1        OFFLINE OFFLINE                               STABLE
--------------------------------------------------------------------------------

AWSのRDSとは違い、OSにログイン出来るのはちょっと不思議な感じがしますね。 (私がAWSに慣れているだけですが)

外部からSQL接続

せっかくなのでローカルPCのSQL Developerからも接続してみます。

DBインスタンスの1521ポートへ接続許可するため、作成したサブネットのセキュリティ・リストに以下のルールを追加しておきます。ソースはDBへ接続するクライアントのIPアドレスです。

ネットワーキング>仮想クラウド・ネットワーク>[作成したネットワーク名]>[作成したサブネット名] の順でクリックするとセキュリティ・リストの画面へ遷移できます。

f:id:fu3ak1:20201012161928p:plain

次に接続情報を確認します。データベースの詳細からDB接続をクリックします。

f:id:fu3ak1:20201012164248p:plain

簡易接続の情報をコピーしておきます。

f:id:fu3ak1:20201012164426p:plain

以下のような情報が取れるのでメモしておきます。

orcl202010.oraclesubnet.oraclenetwork.oraclevcn.com:1521/DB1012_nrt1hk.oraclesubnet.oraclenetwork.oraclevcn.com

では接続です。 ローカルPCにインストールしたSQL Developerから接続します。

以下の通り接続情報を入力し、接続します。

  • ユーザー名:system
  • パスワード:作成時に設定したパスワード
  • ホスト名:SSH接続で使用したパブリックIP
  • ポート:1521
  • サービス名:メモしておいた接続情報の「/」の後部分(今回ではDB1012_nrt1hk.oraclesubnet.oraclenetwork.oraclevcn.com)

f:id:fu3ak1:20201012161420p:plain

接続が完了すると、以下のようにデフォルトで存在するテーブルの情報が表示されます。

f:id:fu3ak1:20201012165044p:plain

接続確認は以上です。

まとめ

ネットワーク(VCN)の作成からやったことを考えると、それなりに時間がかかりましたね。「プロビジョニング中」で1時間待たされるのも意外でした。

ただやはりオンプレミスでOracleRACを作成する場合に比べると格段に速く作成できますので、Oracle RACの動きを見たい場合や、開発環境用途としては良いなと思いました。

今回の手順ではパブリック公開であったりセキュリティ・リストの設定が一部緩い部分もあったので、本番利用の際はここらへんもきちんと設計したいですね。

ではでは~