前回は、クラウドにおけるOracle Database 構築のポイントを紹介したが、今回は、各データベース環境における可用性に関して、ポイントを説明していく。
Oracle Databaseの可用性を高めるために検討すべき項目は以下の2点である。
- Oracle instanceの可用性
- Oracle Databaseの可用性
Oracle instanceとは「データベースサーバ上でOracle Databaseを起動した場合、Oracle Databaseによって、システム・グローバル領域(SGA)とよばれるメモリ領域が割り当てられ、複数のOracleプロセスが起動するが、このSGAとOracleプロセスを組み合わせたもの」である。
またここでは、Oracle Databaseを「Oracle instanceとデータを格納するためのファイル群であるOracleデータベース・ファイルから構成されるもの」とする(厳密には、Oracleデータベース・ファイルをOracle Databaseと言うが、ここではOracle instanceとの組み合わせをOracle Databaseとする)。
そこで、これら2つに対して、これまで説明してきた環境においてどのような可用性を検討できるのかを紹介する。
Oracle on オンプレミスサーバ
Oracle instanceの可用性を高める最も有名な方法がOracle Real Application Cluster、通称「Oracle RAC」である。本稿の読者の皆さんが携わっているOracle Databaseでも、この機能を利用している場合は多いのではないだろうか。
Oracle RACの最大の特徴はシェアード・エブリシングと呼ばれるアーキテクチャを搭載したクラスターであることだ。1つのデータベースに対して、複数のOracle instanceを構成でき、そのすべてを読み込み書き込みともに可能なアクティブなマシンとすることができる。Oracle instanceを複数で構成するので、Oracle instanceの可用性はもちろん高くなり、可用性だけでなく、Oracle Databaseの処理能力をスケールアウト的にアップすることが可能である。
第1回でも少し触れたが、AWSを含む多くのパブリッククラウドでは基本的にはこのOracle RACの構成を取れない。これは、Oracle RACはマルチキャストと呼ばれる通信を必要とするが、パブリッククラウドではマルチキャストが利用できないことに起因している(※)。オンプレミスサーバでOracle Database環境を構築する場合はこのような制限がもちろんないので、Oracle RACの構成は可能であり、Oracle instanceにおける可用性はこの機能で高められるのである。
しかし、このOracle RACでも高められないのがOracle Databaseの可用性である。仮にOracle Databaseのファイルが全損してしまった場合は、Oracle RACを利用して何台ものOracle instanceが稼働していようとも、Oracle Databaseは停止してしまうのである。つまり、Oracle instanceに加えOracle Databaseの可用性を検討することも重要であり、このためOracle Enterprise Editionでは、Oracle Data guardという機能が提供されている。
このOracle Data Guardは2セット以上のOracle Databaseから構成されており、1台のプライマリ・データベースと1台以上のスタンバイ・データベースから構成される。プライマリ・データベースでの更新情報は常にスタンバイ・データベースに伝搬される。プライマリ・データベースに不測の事態が起こった場合、スタンバイ・データベースがプライマリ・データベースとして起動する仕組みとなっており、災害対策用として多くの環境で導入されている。
つまり、Oracle Data Guardの構成を取れば、Oracle instanceとOracle Databaseの両方の可用性を高めることができるのだ。
※ 第1回でも記載したように、トンネリングの機能などを使えば、AWS上でもOracle RACの構成は理論上可能である。Oracle RACに関しては、開発やテスト向けのOracle RAC用のAMIがあるので、興味がある方はAWSの下記ページを参照いただきたい。
http://aws.typepad.com/sajp/2015/11/support-for-self-managed-oracle-rac-on-ec2.html
Oracle on EC2
前述した通り、AWSではOracle RACを構成することは基本的には不可能である。このため、EC2上にOracle Databaseをインストールして利用する場合はOracle RAC構成を取ることはできない。ただし、EC2上であってもOracle Data Guardの構成は可能となる。Oracle on オンプレミスサーバの項でも説明をしたように、Oracle Data Guard構成を取れば、Oracle instanceとOracle Databaseの両方の可用性を高めることができる。
Oracle on EC2サーバでOracle Data Guard構成を取る場合は、同一のVirtual Private Network(VPC)上の異なるアベイラビリティ・ゾーン(AZ)に、プライマリ・データベースとスタンバイ・データベースをそれぞれ配置するMulti-AZ構成と呼ばれる構成をとることが基本となる。
AZとはいわゆるデータセンターを表しており、AZが異なるということは、物理的に数十キロ以上離れたデータセンターにプライマリ・データベース、スタンバイ・データベースを配置することになる。これにより、AWSで万が一AZ障害(AZ全体が停止してしまう障害)が発生したとしても、別のAZで稼働しているスタンバイ・データベースがプライマリ・データベースに昇格するため、データベースが停止することはない。
RDS for Oracle
Oracle on EC2ではOracle Data Guardの機能を利用してデータベースの可用性を高めることは可能だったが、RDS for Oracleではどうだろうか?
RDS for Oracleには先ほど紹介したOracle Data Guardの機能は実装されていない。ただし、RDS for OracleにはMulti-AZと呼ばれる機能が実装されており、Oracle Data Guardに似たような構成をわずか数クリックで構築できる。構成が簡単に行えるRDS for Oracleは可用性の面でも非常にお勧めである。
また、RDS for OracleのMulti-AZで非常に便利な点が、計画的なメンテナンスや、計画外の障害が発生し、プライマリ・データベースが停止してしまった場合、自動で待機系のスタンバイ・データベースへフェールオーバーを行う点である。
そのほか、アプリケーションは通常エンドポイントと呼ばれる、CNAMEレコードを利用してRDS for Oracleに接続を行うが、フェールオーバーが発生した場合は、自動でCNAMEレコードが新しくスタンバイ・データベースからプライマリ・データベースに昇格したインスタンスを指すように変更される。このため、フェールオーバーが発生したとしても、アプリケーションは接続という点では意識することなく稼働させることができるのである。
Oracle on オンプレミスサーバ、Oracle on EC2、RDS for Oracleのそれぞれの可用性の高め方を紹介してきたが、各環境のポイントをよく理解し、システム要件と照らし合わせて、選定を行っていくことが重要である。
山口 正寛
1984年大阪府生まれ。データベースエンジニア、コンサルタントなどの活動経験が豊富。現在は株式会社システムサポートの東京支社 クラウドコンサルティング事業部 シニアマネージャーとして、主にDatabase(特にOracle、Redshift)領域を担当。Amazonの提供するリレーショナルデータベースのAuroraにも詳しい。クラウド工房 ブログでときどき関連情報を発信している。職場ではオフィスグリコを絶賛消費中。