※この記事は翻訳されたものです。本記事の原文はこちら
Oracleの高可用性(HA)インスタンスを必要とするビジネスクリティカルなアプリケーションのPOC作成を担当する開発者として、私はAWS EC2にOracle EC2 HAクラスターをセットアップする必要があります。何から始めればいいでしょうか?もしあなたが多くの人たちと同じなら、次のタスクをネットで検索したり、記事、インストールガイド、ドキュメント、スタックオーバーフローに関する質問を読んだりして、延々と時間を費やすことになると思います。正解に近い答えはたくさん見つかりますが、それが自分のバージョンや環境にぴったり当てはまることはありません。最悪の場合は、沼にはまってうまくいかない環境を構築し、何日も無駄にすることになってしまいます。
この記事では、DataKeeper、LifeKeeper、SIOS Protection SuiteなどのさまざまなSIOSのHAソリューションを使用して概念実証を開発するためのHA環境のセットアップについて説明します。以下にタスクのリストを示しますので、これらのタスクの実行方法をすでに理解している場合は、そのまま実行してください。各タスクを実行するためのステップバイステップのガイドです。
- セットアップ手順
- 1. Linux上でOracle の2つのインスタンスを起動する
- 2. Xwindowsを動かす
- 3. インスタンスに接続して追加のディスクをマウントする
- 4. AWS CLIキットをインストールする
- 5. セキュリティ/アクセスを設定する
- 6. 仮想IPのルートエントリーを作成する
- 7. ENIの送信元/送信先チェックを無効にする
- 8. /etc/hostsを編集する
- 9. VIPホスト名でリスナーを設定する
- 10. SELinuxを無効にする
- 11. SIOS Protection Suite for Linuxをインストールする
- 12. LifeKeeperを起動する
- 13. 2番目のサーバーに接続する
- 14. コミュニケーションパスを作成する
- 15. DataKeeperリソースを作成する
- 16. 仮想IPリソースを使用して階層を作成する
- 17. Oracleリスナーリソースを作成する
- 18. Oracle Databaseで階層を作成する
- 19. EC2で階層を作成する
- 20. シャットダウンの動作を変更する
- 21. フェールオーバーをテストする
- お問合せ
- 関連記事
セットアップ手順
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で課題を解決💡~