AWSでのHA Oracle DBサーバークラスターの作成手順

    ※この記事は翻訳されたものです。本記事の原文はこちら

    Oracleの高可用性(HA)インスタンスを必要とするビジネスクリティカルなアプリケーションのPOC作成を担当する開発者として、私はAWS EC2にOracle EC2 HAクラスターをセットアップする必要があります。何から始めればいいでしょうか?もしあなたが多くの人たちと同じなら、次のタスクをネットで検索したり、記事、インストールガイド、ドキュメント、スタックオーバーフローに関する質問を読んだりして、延々と時間を費やすことになると思います。正解に近い答えはたくさん見つかりますが、それが自分のバージョンや環境にぴったり当てはまることはありません。最悪の場合は、沼にはまってうまくいかない環境を構築し、何日も無駄にすることになってしまいます。

    この記事では、DataKeeper、LifeKeeper、SIOS Protection SuiteなどのさまざまなSIOSのHAソリューションを使用して概念実証を開発するためのHA環境のセットアップについて説明します。以下にタスクのリストを示しますので、これらのタスクの実行方法をすでに理解している場合は、そのまま実行してください。各タスクを実行するためのステップバイステップのガイドです。

    セットアップ手順

    1.  Linux上でOracle の2つのインスタンスを起動する


    この記事では、SIOS LifeKeeper for Linuxを使ってOracle ClusterのHA環境をAWSに構築します。これは、前提条件をすべて取り除くことを意味します。今回はaws-marketplace/Oracle Database 19.8.0 Enterprise Edition on Oracle Linux 8 AMIを使用します。これらは頻繁に変更されるので、自分のニーズに合ったものを見つけるのは難しいかもしれません。クラウドに、特にOracleのようなものをインストールするのは、リポジトリー、ライセンス、登録、セキュリティの問題で非常に難しいため、今回のAMIは私にとって3回目です。イメージにOracleがすでにインストールされているため、このAMIは動作します。OSのバージョンとOracle DBのバージョンがSIOSでサポートされているかどうか、こちらで確認してください。

    私のインスタンスの詳細は以下のとおりです。

    •  単一VPC
    •  単一リージョン
    •  サーバーごとに異なるアベイラビリティーゾーン
    •  データベースストレージ用の追加ドライブ
    •  異なるサブネット内の各インスタンスについて2つのネットワークインターフェース
    •  2つのElastic IPアドレスを作成し、各サーバーに1つずつアタッチ


    データベースのためにインスタンスに追加のディスクをアタッチし、コミュニケーションパスのために追加のNICをアタッチしています。2つのNICが異なるサブネット上にあることを確認してください。これは、インスタンスに接続するためにElastic IPアドレスを手動で作成して割り当てる必要があるためです。

    インスタンスを起動した後、新しいディスクにパーティションを作成する必要があります。[ ls /dev/disk/by-path ]で見つけるのが最も簡単です。

    次に、fdiskを使用してディスクをパーティション分割する必要があります。

    次に、mkfs.xfsを使用して新しいパーティションにファイル システムを作成します。

    ここで、mountでファイル システムをマウントします。

    最後に、fstabにディスクを自動的にマウントするためのエントリーを追加します。

    Oracle のインストールを実行する必要がないことに注意してください。AMIがインストールを行い、データベースを作成します。このAMIで事前構成されたデータベースを削除し、DBCAを使って/dataディスクに新しいデータベースを作成します。データベースを起動し、SQLPLUSを使用してスキーマを作成し、データを追加します。これらの操作では、Xwindowsが実行されている必要があります。

    2. Xwindowsを動かす

     
    Puttyを使用するXdisplayは、Xming for Windowsを使用してセットアップできます。まずXmingをインストールし、 次にX11 forwardingを有効にし、x displayの場所にlocalhost:0.0を入力し、ローカルディスプレイ用のx authorityファイルにパスとxming.exe実行ファイルを入力します。

    これでWindows側は解決しましたが、Linux側を修正する必要があります。まず/etc/ssh/sshd_configを編集し、”X11Forwarding yes”をアンコメントします。

    次に、正しいキーを見つけてXauthorityに追加します。ユーザーの切り替えを行った場合は、新しいセッションを開始する必要がある場合があります。ec2-userとしてログインした後xauth listを実行すると、Xauthorityファイルに追加する必要のある16進数のキーが表示されます。su – oracleでOracleユーザに切り替え、xauth add $DISPLAY . <表示されたキー>を実行します。これにより、/home/oracle/.Xauthorityファイルに情報が格納されます。終了してec2-userに戻ります。

    3. インスタンスに接続して追加のディスクをマウントする

    私はPuttyとXmingを使用してインスタンスに接続しています。Xmingを使用している場合は、接続を試みる前に必ずXlaunchを実行してください。

    インスタンスを起動した後、新しいディスクにパーティションを作成する必要があります。[ ls /dev/disk/by-path ]で見つけるのが最も簡単です。

    diskを使用してディスクをパーティション分割する必要があります。

    mkfs.xfsを使用して新しいパーティションにファイルシステムを作成します。

    この時点で、AMIで構築されたサーバー上でOracleが存在する/u01に新しいファイルシステムをマウントできるように、/u01の名前を/oracleディレクトリに変更します。

    mkdir /u01でマウントポイントを作成し、mountでボリュームをマウントします。mv /oracle /u01を使用して、ファイルを新しいディスクに移動します。約11GBのデータなので、少し時間がかかります。

    最後に、fstabにディスクを自動でマウントするためのエントリーを追加します。

    Oracleのインストールを実行する必要がないことに注意してください。AMIがインストールを実行し、データベースを作成します。私はSQLPLUSを使用してデータベースを起動し、スキーマを作成し、データを追加しました。

    4. AWS CLIキットをインストールする

    awscliキットが必要なので、rootでcurl “https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip” -o “awscriv2.zip”を使用してファイルをダウンロードします。

    unzip awscriv2.zip でファイルを解凍します。

    sudo ./aws/installでアプリケーションをインストールします。

    —————————————————————

    原文ではアクセスキーを利用する方法が記載されていますが、現在AWSおよび当社で推奨している方法はIAMを利用する方法となります。設定方法は、こちらのマニュアルをご参照ください。

    これより先は原文記載の通りです。

    —————————————————————

    aws –no-paginate –no-cli-pager ec2 description-instancesなどで、動作していることを確認します。

    5. セキュリティ/アクセスを設定する


    まず、Oracleユーザーをrootとwheelグループに追加し、擬似的な権限を与えます(Usermod -aG wheel oracle)。これにより、Oracleアカウントをlkadminアカウントにすることで作業が楽になります。LifeKeeper for linuxのイメージファイル(sps.img)とライセンスファイルを両方のサーバーにダウンロードしました。

    ソフトウェアをインストールする前に、さらにいくつかの前提を実行する必要があります。まず、サーバーのセキュリティグループを設定し、TCPポート5900-59010を開放して通信できるようにします。TCPポート81と82も開けてください。また、仮想IP用のポートが開いていることも確認してください。


    6. 仮想IPのルートエントリーを作成する


    クラスターの仮想IPを動作させるには、ルートテーブルを更新する必要があります。このマルチサブネットのクラスター構成では、仮想IPはVPCに割り当てられたCIDRの範囲外に存在する必要があります。クラスターの仮想IP(172.30.0.101)へのトラフィックをプライマリークラスターノード(Oracle1)に送信する新しいルートを定義します。

    VPCダッシュボードから[Route Tables]を選択し、[Edit]をクリックします。プライマリーサーバーのプライマリーENI(Elastic Network Interface)を宛先とする「172.30.0.101/32」のルートを追加します。

    7. ENIの送信元/送信先チェックを無効にする


    [Network Interfaces]で各インターフェイスを1つずつ選択し、[Action]で[change source/dest]を選択します。
    認証エラーが発生しない限り、インストールおよび構成は正しく行われています。

    [Enable]ボックスのチェックを外します。

    すべてのインターフェイスに対してこの手順を繰り返します。

    8. /etc/hostsを編集する

    すでにDNSサーバーをセットアップしているのでなければ、両方のサーバーにホストファイルのエントリーを作成し、相互に名前解決を適切に行えるようにする必要があります。

     

    9. VIPホスト名でリスナーを設定する


    oracle-vipを指すように$ORACLE_HOME/network/admin/listener.oraファイルを編集または作成します。

    10.  SELinuxを無効にする


    /etc/sysconfig/selinuxファイルを編集し、“SELINUX=disabled” を設定します。

    サーバーを再起動します。この時点でサーバーが復旧しない場合は、SELINUXの設定をpermissiveのままにし、SELINUXTYPEをdisabledに設定している可能性があり、これによりインスタンスがブリックされます。AWS のボリュームとインスタンスの関連付けを解除し、mount -o rw, nouuid {device} {mount directory}コマンドを使用して、新規または既存のインスタンスにマウントします。 /{mount directory]/etc/sysconfig/selinuxファイルを編集して、エラーを修正します。ファイルを保存し、ボリュームをアンマウントしてこのインスタンスとの関連付けを解除し、古いインスタンスに再アタッチします。

    11.  SIOS Protection Suite for Linuxをインストールする

    次に、rootとして、mount /home/ec2-user/sps.img /mnt/ -t iso9660 -o loopでイメージファイルをマウントし、SIOS Protection Suiteをインストールします。mnt/setupでセットアップを実行します。

    LifeKeeper Authenticationでlkadminグループまでスクロールダウンし、Enterキーを押してoracleを’lkadmin’グループに追加します。

    [OK]を選択し、Tabキーを押して[Done]まで移動し、Enterキーを押します。 次に、[Install License Key File]までスクロールし、Enterキーを押します。

    ここで、ライセンスファイルの場所と名前を入力します。

    次に、[Recovery Kit Selection Menu]を選択し、Enterキーを押します。

    ここでは[Networking]を選択します。

    スペースキーを押して、LifeKeeper Recovery Kit for EC2を選択します。Tabキーを押して[Done]まで移動し、Enterキーを押します。次に、[Database]メニューを選択し、下にスクロールして、LifeKeeper Oracle RDBMS Recovery Kitでスペースキーを押します。

    Tabキーを押して[Done]まで移動するか、Dキーを押して[Storage]まで下にスクロールしてEnterキーを押します。 次に、スペースキーを押して、DataKeeper for Linuxを選択します。

    Tabキーを押して[Done]に移動し、Enterキーを押すか、dキーを押してRecovery Kit Selectionに戻り、Tabキーを押して[Done]に移動するか、dキーを押してMain Configurationメニューに戻ります。

    [LifeKeeper Startup After Install]が選択されていることを確認し、もう一度Tabを押して[Done]を選択するかdを押すと、インストール確認画面が表示されます。

    ここでEnterまたはyを押すと、インストールが開始されます。

    12.  LifeKeeperを起動する


    /opt/LifeKeeper/bin/lkGUIappでLifeKeeperのGUIを起動します。失敗する場合は、.Xauthorityファイルにログインしたアカウントのマジックナンバーがない可能性が高いです。私はoracleとしてログインし、sudo -iを実行してrootに切り替えました。GUI が読み込まれない場合は、/home/oracle/.Xauthorityファイルを/rootにコピーします。

    oracleとしてログインします。

    13.  2番目のサーバーに接続する


    次に、[Cluster Connect]ボタンをクリックします。

    oracleとしてログインします。

    14.  コミュニケーションパスを作成する

    [Create Comm Path]ボタンをクリックします。

    問題が発生した場合は、ファイアウォールとiptablesが無効になっていることを確認してください。 [Next]をクリックします。

     [Next]をクリックします。

    最初のIPアドレスを選択して、 [Next]をクリックします。

    リモートIPを選択します。

     [Next]をクリックします。

     [Create]をクリックします。

     [Next]をクリックします。

    [Done]をクリックします。

    次に、セカンダリーアドレスを使用してステップ14を繰り返し、2 番目のコミュニケーションパスを作成する必要があります。

    2つのパスが正常に確立されると、サーバーは緑色になります。

    15.  DataKeeperリソースを作成する


    [Create Resource Hierarchies]ボタンをクリックします。

    [Data Replication]を選択し、[Next]をクリックします。

     [Next]をクリックします。(インテリジェントとは、フェイルオーバー後に手動でフェイルバックする必要があることを意味します)

     [Next]をクリックします。

    プライマリーサーバーを選択し、 [Next]をクリックします。

    [Replicate Existing Filesystem]を選択し、[Next]をクリックします。

    [Existing mount point]を選択し、[Next]をクリックします。

    データレプリケーションリソースタグを作成し、 [Next]をクリックします。

    [File System Resource Tag]を選択し、[Next]をクリックします。 

    最適なパフォーマンスを得るには、ビットマップファイルを一時ボリュームに配置する必要があります。テスト目的で、上図のようにビットマップをOSディスクに置くことができます。ビットマップファイルの場所を選択し、[Next]をクリックします。

    [Enable Asynchronous Replication]で[No]を選択し、[Next]をクリックします。

    [Target Server]を選択し、[Next]をクリックします。

    [Switchback Type]を選択し、[Next]をクリックします。

    [Template Priority]を選択し、[Next]をクリックします。

    [Target Priority]を選択し、[Next]をクリックします。

     [Next]をクリックします。

    [Target Disk]を選択し、[Next]をクリックします。

     [Next]をクリックします。

     [Next]をクリックします。

    レプリケーションに使用するネットワーク エンドポイントを選択し、[Next]をクリックします。

    マウントポイントを選択し、[Next]をクリックします。

    リソースタグを選択し、[Next]をクリックします。

    [Finish]をクリックします。

    [Done]をクリックします。

    /u01をクリックすると、ボリュームが同期していることがわかります。

    16.  仮想IPリソースを使用して階層を作成する

    [Create resource]ボタンをクリックします。

    IPを選択し、[Next]をクリックします。

    [Switchback Type]を選択し、[Next]をクリックします。

    プライマリーサーバーを選択し、[Next]をクリックします。

    ステップ6の仮想IPアドレスを入力し、[Next]をクリックします。

    VIPのサブネットマスクを入力し、[Next]をクリックします。

    ネットワークインターフェースを入力し、[Next]をクリックします。

    リソースタグを入力し、[Next]をクリックします。

    作成できたら、[Next]をクリックします。

    ターゲットサーバーを選択し、[Next]をクリックします。

    スイッチバックタイプを選択し、[Next]をクリックします。

    優先順位を選択し、[Next]をクリックします。

    優先順位を選択し、Next]をクリックします。

    完了したら、[Next]をクリックします。

     [Next]をクリックします。

    適切なネットマスクを選択し、[Next]をクリックします。

    インターフェースを選択し、[Next]をクリックします。

    リソースタグを選択し、[Extend]をクリックします。

    完了したら、[Finish]をクリックします。

    確認後、[Done]をクリックします。

     

    17.  Oracleリスナーリソースを作成する

    LifeKeeper でリソースを設定する前に、データベースとリスナーが起動していることを確認してください。 [Create resource]ボタンをクリックします。

    Oracle Database Listenerを選択し、[Next]をクリックします。

    プライマリーサーバーを選択し、[Next]をクリックします。

    リスナー構成ファイルのパスとファイル名を入力し、[Next]をクリックします。

     [Next]をクリックします。

    リスナー実行ファイルのパスを入力し、[Next]をクリックします。

    保護レベルを選択し、[Next]をクリックします。

    リカバリーレベルを選択し、[Next]をクリックします。

    必要に応じて、リスナーに関連付けられたIPアドレスを選択し、[Next]をクリックします。

    リスナーのタグ名を入力し、[Create]をクリックします。

     [Next]をクリックします。

    [Accept defaults]をクリックして、2番目のサーバーにリソースを作成します。

    [Finish]をクリックします。

    [Done]をクリックして、LSNRと/u01を展開します。

     

    18.  Oracle Databaseで階層を作成する

    [Create Resource Hierarchy]ボタンをクリックします。

    Oracle Databaseを選択し、[Next]をクリックします。

    スイッチバックタイプを選択し、[Next]をクリックします。

    サーバーを選択し、[Next]をクリックします。

    データベース名を選択し、[Next]をクリックします。(ホーム ディレクトリが見つからないというエラーが発生した場合は、データベースが実行されていることを確認してください。)

    sysdbaのユーザー名を入力し、[Next]をクリックします。

    アカウントのパスワードを入力し、[Next]をクリックします。

    Oracle Listenerを選択し、[Next]をクリックします。

    [Create]をクリックします。

    作成が成功したら、[Next]を選択します。

    [Accept Defaults]を選択します。

    [Finish]を選択します。

    [Done]をクリックします。

    ツリーを展開してすべてのリソースを表示します。

     

    19.  EC2で階層を作成する

    [Create Resource Hierarchie]ボタンをクリックします。

    Amazon EC2を選択し、[Next]をクリックします。

    Intelligentを選択し、 [Next]をクリックします。

    プライマリーサーバーを選択し、[Next]をクリックします。

    EC2リソース タイプを選択し(この例ではバックエンドクラスターを使用しています)、[Next]をクリックします。

    IPリソースを選択し、[Next>]を選択します。

    EC2リソースタグ名を選択し、[Create]をクリックします。

    リソースの作成に成功したら、[Next>]をクリックします。数秒後に、Pre-extend wizardがポップアップ表示されます。[Accept defaults]をクリックします。

    チェックが正常に完了したら、もう一度[Accept defaults]をクリックします。

    [Finish]をクリックし、確認後[Done]をクリックします。

    設定が完了しました。これでフェイルオーバーをテストできます。

    20.   シャットダウンの動作を変更する 


    デフォルトでは、単にサーバーをシャットダウンまたは再起動した場合、LifeKeeperはリソースをフェイルオーバーしません。サーバーをシャットダウンする前にワークロードを移動したい場合は、アクティブノードをシャットダウンする前にリソースをスタンバイサーバーに手動で移動する必要があります。ただし、テストを容易にするためにデフォルトの動作を変更したい場合、以下に示すようにシャットダウンストラテジーを変更することで制御できます。

    プライマリーサーバーを右クリックし、[Properties]を選択します。

    [General]タブで[Shutdown Strategy]を[Switchover Resources]に変更し、[Apply]をクリックします。

    次に、サーバーのプルダウンからセカンダリーサーバーを選択し、設定の変更を確認します。

    [OK]をクリックします。

     

    21.  フェールオーバーをテストする

    この例では、セカンダリーサーバーからlkGUIappを実行しています。プライマリーサーバを使用している場合は、LifeKeeper GUIを終了し、セカンダリーサーバから実行します。

    すべてのリソース階層を展開し、プライマリーサーバーへのSSHセッションを開きます。

    oracle-vipに対してping -i 5も実行しています。

    プライマリーサーバーをシャットダウンします。

    この例では、IPが25秒未満で応答を停止したことがわかります。5秒間隔で20~23の4回のpingに失敗しました。これで、バックアップサーバー上ですべてがアクティブになります。プライマリーがまだダウンしているため、階層で警告が表示されます。

    スイッチバックをインテリジェントにしておいた場合は、プライマリーサーバーを起動したら、プライマリーサーバーでサービスを手動で起動する必要があります。プライマリーサーバーをIn-Serviceにする前に、プライマリーサーバーがInSyncであることを確認してください。

    cdb1の[StandBy]ボタンを右クリックし、[In Service…]を選択します。

    [In Service]をクリックします。

    [Done]をクリックします。

    ディスクが再同期するまでに数分かかりますが、最終的には再同期されます。

    すべてをリストアすると、AWSにHA Oracleデータベースが作成され、開発の準備が整いました。

    お疲れ様でした!

    お問合せ

    SIOSの高可用性ソリューションの詳細については、サイオステクノロジーの担当者までお問い合わせください。

    関連記事

    Oracleの冗長化をAnsibleで自動化してみた~AWS編~

    【Webinarレポート】OracleDBユーザーがAWSを利用する際の高可用性セミナー~Oracle on AWS × LifeKeeperで課題を解決💡~