この章では、Oracle Traffic Directorの高可用性機能について説明します。ここの内容は、次のとおりです。
Oracle Traffic Directorインスタンスにおいて高可用性には、次の機能が含まれます。
ハードウェア障害、カーネル・クラッシュおよびネットワーク障害によるダウンタイムなしで、クライアント・リクエストを受信し処理します。
2つのOracle Traffic Directorインスタンスを構成し、アクティブ-アクティブまたはアクティブ-パッシブ・フェイルオーバーを提供することで、エンタープライズ・アプリケーションおよびサービスに対して、可用性の高いルーティングおよびロード・バランシング・サービスを設定できます。
Oracle Traffic Directorプロセスがクラッシュした場合、自動的に再起動します。
Oracle Traffic Directorにはアプリケーション・レベルとノード・レベルの2つのレベルの可用性があります。アプリケーション・レベルの可用性はデフォルトの機能で、新たな構成を加える必要がありません。アプリケーション・レベルの可用性では、Oracle Traffic DirectorのWatchdogデーモンによりロード・バランシング・サービスが監視されるため、プロセス・クラッシュのようなアプリケーション・レベルの障害が発生した場合でも可用性が維持されます。この機能により、ロード・バランシング・サービスにソフトウェア関連の問題が発生しても、Oracle Traffic Directorがソフトウェア・ロード・バランサとしてバックエンド・アプリケーションにリクエストをフロンドエンドし続けます。ノード・レベルの可用性では、CPU障害やメモリー破損などの問題でシステム/vServerがクラッシュした場合でも、Oracle Traffic Directorがバックエンド・アプリケーションにリクエストをフロントエンドし続けます。ノード・レベルの可用性を実現するには、Oracle Traffic Directorを2台の計算ノードまたはvServerにインストールし、それらの間にフェイルオーバー・グループを構成する必要があります。
Oracle Traffic Directorインスタンス自体に高可用性を与えるには、各ロード・バランサ・サーバー・インスタンスに少なくとも3つのプロセス(watchdogプロセス、primordialプロセスおよび1つ以上のロード・バランサ・プロセス)が含まれている必要があります。watchdogプロセスがprimordialを生成し、primordialがロード・バランサ・プロセスを生成します。watchdogプロセスとprimordialプロセスはOracle Traffic Directorプロセス内における限られたレベルの高可用性を実現します。ロード・バランサ・プロセスまたはprimordialプロセスが何かしらの理由で異常終了した場合、Oracle Traffic Directorのwatchdogがそれらのサービスを再起動するため、Oracle Traffic Directorをソフトウェア・ロード・バランス・サービスとして使用し続けることができます。Oracle Traffic Directorインスタンスにはwatchdogプロセスとprimordialプロセスが1つずつと、1つ以上のロード・バランサ・プロセスが存在することになります。
Oracle Traffic Directorへのほとんどの構成変更は、インスタンスを再起動したり、処理中のリクエストに影響を及ぼしたりすることなく動的にデプロイできます。インスタンスの再起動を必要とする構成変更の場合、Fusion Middleware Controlはインスタンスを再起動するためのプロンプトを表示します。ただし、このプロンプトはWLSTコマンドでは表示されず、エラーがサーバー・ログに記録されます。
クライアント・リクエストをバック・エンドのオリジン・サーバーに確実に分散します。
バック・エンドのサーバーが使用不可であるか、完全にロードされている場合、Oracle Traffic Directorは、定期的なヘルス・チェックにより自動的にこの状況を検出し、そのサーバーへのクライアント・リクエストの送信を停止します。障害の発生したサーバーが再び使用可能になった場合、Oracle Traffic Directorは自動的にこれを検出し、このサーバーへのリクエストの送信を再開します。詳細は、5.7項「オリジン・サーバー・プールのヘルス・チェック設定の構成」を参照してください。
各オリジン・サーバー・プールで、いくつかのサーバーをバックアップ・サーバーとして指定できます。Oracle Traffic Directorは、使用可能なプライマリ・サーバーがプールにない場合にのみ、バックアップ・サーバーにリクエストを送信します。詳細は、5.3項「オリジン・サーバー・プールの変更」を参照してください。
各オリジン・サーバーが処理できる最大同時接続数を指定することで、接続が過負荷状態になりオリジン・サーバーからリクエストが拒否される可能性を減らすことができます。
各オリジン・サーバーについて、サーバーへのリクエストの送信レートを上げる期間を指定することもできます。この機能により、オフラインのサーバーが再起動中の場合に、リクエストが拒否される可能性を最小限にすることができます。
詳細は、6.3項「オリジン・サーバーの変更」を参照してください。
2つ以上のOracle Traffic Directorインスタンスを1つまたは2つの仮想IP(VIP)アドレスで表されるフェイルオーバー・グループに組み合わせることで、Oracle Traffic Directorインスタンスの高可用性を確保することができます。フェイルオーバー・グループ内の両方のホストでは、同じオペレーティング・システム・バージョンを実行し、同一のパッチおよびサービス・パックを使用し、同じ構成のOracle Traffic Directorインスタンスを実行する必要があります。
注意:
|
図14-1はOracle Traffic Directorネットワーク・トポロジを示しています。
図14-1に示されたトポロジは、2つのOracle Traffic Directorインスタンス(otd_1
およびotd_2
)で構成され、フェイルオーバー・ペアを形成し、クライアント・リクエストに対し単一の仮想IPアドレスを提供します。構成されたフェイルオーバー・モードに基づいて、プライマリ・ノードはリクエストの転送方法と転送先を判断します。フェイルオーバー・モードの詳細は、14.1.2項「構成モードのフェイルオーバー」を参照してください。
図14-1では、バック・エンドに2つのサーバー・プールのみが示されていますが、複数のサーバー・プール内のサーバーにリクエストをルーティングするようにOracle Traffic Directorを構成できます。
フェイルオーバー・グループでは、次のモードで動作するOracle Traffic Directorインスタンスを構成できます:
アクティブ-パッシブ: 1つのVIPアドレスが使用されます。フェイルオーバー・グループ内の1つのインスタンスがプライマリ・ノードとして指定されます。プライマリ・ノードに障害が発生すると、各リクエストが、同じVIPを通じてもう一方のインスタンスにルーティングされます。
アクティブ-アクティブ: 1つのVIPアドレスが使用されます。ノードのうちの1つはマスター・ノードであり、その他のノードはバックアップ・ノードです。VIPへの受信リクエストはOTDインスタンス間で分散されます。マスター・ノードでエラーが発生すると、最も優先度が高いバックアップ・ノードが次のマスター・ノードとして選択されます。
ここで説明したアクティブ-パッシブ設定では、フェイルオーバー・グループ内の1つのノードが、どの時点でも冗長となります。リソースの使用率を向上するには、アクティブ-アクティブ・モードの2つのOracle Traffic Directorインスタンスを2つの仮想IPアドレスを使用して構成できます。各インスタンスは1つの仮想IPアドレスで受信したリクエストに応じ、もう1つのインスタンスをバックアップします。
Oracle Traffic Directorでは、LinuxのkeepalivedやSolarisのvrrpd (ネイティブ)のような、Virtual Routing Redundancy Protocol (VRRP)実装を使用することによって、フェイルオーバー・グループ内のインスタンス間におけるフェイルオーバーをサポートしています。
Keepalivedには、オリジン・サーバーのロード・バランシングやヘルス・チェックなど、他の機能も備わっていますが、Oracle Traffic DirectorではVRRPサブシステムのみを使用します。Keepalivedの詳細は、http://www.keepalived.org
を参照してください。
注意: 必ずKeepalived v1.2.12(必要な最小バージョン)をインストールしてください。 |
VRRPでは、なんらかの理由で最初のノードが使用できなくなったときにルーターによってあるノードから別のノードにVIPアドレスをフェイルオーバーする方法を指定します。このIPフェイルオーバーは、各ノード上で実行されているルーター・プロセスによって実装されます。2つのノードからなるフェイルオーバー・グループでは、現在VIPが割り当てられているノード上のルーター・プロセスがマスターと呼ばれます。マスターは、その存在を継続的に2つ目のノード上のルーター・プロセスに通知します。
注意: フェイルオーバー・グループのメンバーとして構成されたOracle Traffic Directorインスタンスが存在するホスト上では、Oracle Traffic DirectorがKeepalivedの唯一のコンシューマである必要があります。そうでない場合、インスタンスの停止時間中にフェイルオーバーを有効にするためにOracle Traffic Directorでkeepalived デーモンを起動および停止したときに、同じホスト上でkeepalived を使用している他のサービスが中断される可能性があります。 |
マスター・ルーター・プロセスが実行されているノードに障害が発生した場合、2つ目のノード上のルーター・プロセスは約3秒の待機後マスターがダウンしていると判断し、VIPをそのノードに割り当てることによってマスターのロールを引き継ぎます。最初のノードがもう一度オンラインになった場合は、そのノード上のルーター・プロセスがマスター・ロールを引き継ぎます。VRRPの詳細は、http://datatracker.ietf.org/doc/rfc5798
のRFC 5798を参照してください。
Oracle Traffic Directorは、同じサブネットに属しているノード上に2つ以上のOTDインスタンスをデプロイすることで、インスタンス間でのフェイルオーバーをサポートします。ノードの1つはアクティブ・ルーター・ノードとして選択され、残りのノードはバックアップ・ルーター・ノードです。すべてのOTDインスタンス間のトラフィックが管理されます。
このソリューションでも、ロード・バランシングおよびフェイルオーバー・タスクを実行するためにKeepalived v 1.2.13とLinux Virtual Server(LVS)を使用します。さらに、次のパッケージが必要です。
ipvsadm (1.26以降)
iptables (1.4.7以降)
最初はすべてのノードがバックアップ・ノードとして構成され、それらのノードには異なる優先度が割り当てられます。最も優先度が高いノードがマスターとして選択され、その他のノードはバックアップ・ノードになります。マスター・ノードでエラーが発生すると、最も優先度が高いバックアップ・ノードが次のマスター・ノードとして選択されます。Keepalivedマスター・ノードはLVSのマスター・ノードでもあります。
Keepalivedは次のことを実行します。
マスター上の仮想IPを調査する
VIPのGratuitous ARPメッセージを送信する
LVSを構成する(ipvsadm)
他のノード上のKeepalivedのヘルス・チェックを行う
LVSは次のことを実行します。
OTDインスタンス間でロード・バランシングを行う
マルチキャストを介してバックアップ・ノードへの既存の接続情報を共有する。
各OTDインスタンス上のサービスの整合性を確認する。任意のOTDでエラーが発生した場合、そのOTDインスタンスはLVS構成から削除され、オンラインに戻ると再度追加されます。
この項では、次の項目について説明します。
この項では、フェイルオーバー・グループを作成してOracle Traffic Directorインスタンスの高可用性ペアを実装する方法を説明します。
始める前に
フェイルオーバー・グループに割り当てる一意のVIPアドレスを決定します。
VIPアドレスは、フェイルオーバー・グループ内のノードと同じサブネットに属している必要があります。
クライアントはこれらのVIPアドレスにアクセスできる必要があります。
フェイルオーバー・グループ内のプライマリ・ノードおよびバックアップ・ノードとして構成するOracle Traffic Directorノードを識別します。これらのノードは同じサブネットに属している必要があります。
ここで選択する管理ノードに、指定した構成に使用するOracle Traffic Directorインスタンスが存在している必要があります。
各ノードのネットワーク・インタフェースを識別します。
現在ホスト上で稼働しているネットワーク・インタフェースごとに、管理サーバーによって、インタフェースのIPアドレスのネットワーク部が、指定したVIPのネットワーク部と比較されます。結果が一致した最初のネットワーク・インタフェースが、VIPのネットワーク・インタフェースとして使用されます。
この管理サーバーによる比較では、フェイルオーバー・グループ用に指定されたVIPがIPv4アドレスであるかIPv6アドレスであるかに応じて、それぞれIPv4アドレスまたはIPv6アドレスで構成されたホスト上のネットワーク・インタフェースのみが検証されます。
存在しないアドレスにバインドできるようにする(転送バインディングのような)システム構成を実行することで、HTTPリスナーのVIP IPアドレスにバインドできます。次のシステム構成のどちらかを実行します。
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
または
sysctl net.ipv4.ip_nonlocal_bind=1
(リブート後に保持する/etc/sysctl.conf
の変更)
フェイルオーバー・グループを作成する構成では、リスナーのIPアドレスがアスタリスク(*
)またはVIPと同じアドレスであることを確認してください。それ以外の場合、VIPに送信されたリクエストが仮想サーバーにルーティングされません。
各フェイルオーバー・グループのルーターIDは一意である必要があります。後続のフェイルオーバー・グループを作成するたびに、デフォルトのルーターIDは、254、253のように1つずつ減ります。
Fusion Middleware Controlを使用してフェイルオーバー・グループを作成するには、次を実行します。
1.7.2項「Fusion Middleware Controlの表示」の説明に従ってFusion Middleware Controlにログインします。
ページの左上隅にある「WebLogicドメイン」ボタンをクリックします。
「管理」→「OTD構成」を選択します。
使用可能な構成のリストが表示されます。
フェイルオーバー・グループを作成する構成を選択します。
「共通タスク」ペインの「Traffic Director構成」をクリックします。
「管理」→「フェイルオーバー・グループ」を選択します。
フェイルオーバー・グループ・ページが表示されます。これには、構成に定義されているフェールオーバー・グループのリストが表示されます。
「作成」をクリックします。
新規フェイルオーバー・グループ・ウィザードが表示されます。
画面上のプロンプトに従って、仮想IPアドレス、ネットワーク・インタフェース、管理ノードのホスト名など、前に決定した詳細を使用してフェイルオーバー・グループの作成を完了します。
フェイルオーバー・グループが作成されたら、新規フェイルオーバー・グループ・ウィザードの結果画面に、フェイルオーバー・グループの作成が成功したことを示すメッセージが表示されます。
結果画面で、「閉じる」をクリックします。
フェイルオーバー・グループ・ページに、作成したフェイルオーバー・グループの詳細が表示されます。
注意: この時点では、2つのノードはアクティブ-パッシブ・ペアになっています。これらをアクティブ-アクティブ・ペアに変更するには、同じ2つのノードを含む別のフェイルオーバー・グループを作成しますが、その際、異なるVIPを割り当て、プライマリおよびバックアップ・ロールを逆にします。 |
フェイルオーバー・グループを作成するには、otd_createFailoverGroup
コマンドを実行します。
たとえば、次のコマンドでは、次の詳細でアクティブ-パッシブ・フェイルオーバー・グループが作成されます。
構成: ha
プライマリ・インスタンス: 1.example.com
バックアップ・インスタンス: 2.example.com
仮想IPアドレス: 192.0.2.1
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '192.0.2.1' props['primary-instance'] = '1.example.com' props['backup-instance'] = '2.example.com' props['primary-nic'] = 'eth0' props['backup-nic'] = 'eth0' props['failover-type'] = 'active-passive' otd_createFailoverGroup(props)
注意: フェイルオーバー・グループを作成する場合は、それらのマシン上でroot ユーザーとしてotd_startFailover を実行する必要があります。これはフェイルオーバーを手動で開始するためです。このコマンドを実行しないとフェイルオーバーは開始しないため、高可用性を実現できません。otd_startFailover の詳細は、『Oracle Traffic Director WebLogic Scripting Toolコマンド・リファレンス』を参照してください |
たとえば、次のコマンドでは、次の詳細でアクティブ-アクティブ・フェイルオーバー・グループが作成されます。
構成: ha
プライマリ・インスタンス: 1.example.com
バックアップ・インスタンス: 2.example.com
仮想IPアドレス: 192.0.2.1
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '192.0.2.1' props['failover-type'] = 'active-active' otd_createFailoverGroup(props)
otd_createFailoverGroup
の詳細は、『Oracle Traffic Director WebLogic Scripting Toolコマンド・リファレンス』を参照してください。
フェイルオーバー・グループを管理するには、フェイルオーバー・デーモンを特権ユーザー(通常はroot)で実行する必要があり、フェイルオーバー・グループのプライマリおよびバックアップ・インスタンスが実行されるマシン上で、otd_startFailover
コマンドを特権ユーザーで実行する必要があります。同様に、デーモンを停止するには、otd_stopFailover
を実行する必要があります。keepalived
デーモンの構成パラメータは、フェイルオーバー・グループの一部である各インスタンスのconfig
ディレクトリにあるkeepalived.conf
というファイルに格納されます。otd_startFailover
またはotd_stopFailover
の詳細は、『Oracle Traffic Director WebLogic Scripting Toolコマンド・リファレンス』を参照してください。
フェイルオーバー・グループを作成したら、それをリストしたり、設定を表示したり、フェイルオーバー・グループのプライマリ・インスタンスを変更したり、プライマリ・インスタンスとバックアップ・インスタンスを切り替えたり、削除したりできます。フェイルオーバー・グループのVIPまたは任意のプロパティを変更するには、フェイルオーバー・グループを削除してから新たに作成しなおす必要があることに注意してください。
Fusion Middleware ControlまたはWLSTのいずれかを使用して、フェイルオーバー・グループを表示、変更および削除できます。
Fusion Middleware Controlを使用したフェイルオーバー・グループの管理
Fusion Middleware Controlを使用してフェイルオーバー・グループを表示、変更および削除するには、次を実行します。
1.7.2項「Fusion Middleware Controlの表示」の説明に従ってFusion Middleware Controlにログインします。
ページの左上隅にある「WebLogicドメイン」ボタンをクリックします。
「管理」→「OTD構成」を選択します。
使用可能な構成のリストが表示されます。
フェイルオーバー・グループを管理する構成を選択します。
「共通タスク」ペインの「Traffic Director構成」をクリックします。
「管理」→「フェイルオーバー・グループ」を選択します。
フェイルオーバー・グループ・ページが表示されます。これには、構成に定義されているフェールオーバー・グループのリストが表示されます。
フェイルオーバー・グループのプロパティを表示するには、その仮想IPをクリックします。
プライマリ・ノードおよびバックアップ・ノードのホストを切り替えるには、「プライマリの切替え」ボタンをクリックします。結果のダイアログ・ボックスで、「OK」をクリックします。
フェイルオーバー・グループを削除するには、「削除」ボタンをクリックします。結果のダイアログ・ボックスで、「OK」をクリックします。
アクティブ-アクティブ・フェイルオーバー・グループのフェイルオーバー・インスタンスを追加または削除する場合、必ずすべてのノードのフェイルオーバー・グループを停止および起動してから変更を確認してください。
注意:
|
WLSTを使用したフェイルオーバー・グループの管理
たとえば、フェイルオーバー・グループをリストするには、otd_listFailoverGroups
コマンドを実行します。
props = {} props['configuration'] = 'ha' otd_listFailoverGroups(props)
たとえば、フェイルオーバー・グループを切り替えるには、otd_toggleFailovergroupPrimary
コマンドを実行します。
props = {}
props['configuration'] = 'ha'
props['virtual-ip'] = '10.128.67.44
'
otd_toggleFailovergroupPrimary(props)
たとえば、フェイルオーバー・グループのプロパティを変更するには、otd_getFailoverGroupProperties
コマンドを実行します。
props = {}
props['configuration'] = 'ha'
props['primary-instance'] = '1.example.com
'
otd_getFailoverGroupProperties(props)
たとえば、フェイルオーバー・グループを削除するには、otd_deleteFailoverGroup
コマンドを実行します。
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '10.128.67.44' otd_deleteFailoverGroup(props)
アクティブ-アクティブHAに固有のWLSTコマンド
たとえば、フェイルオーバー・インスタンスを追加するには、otd_addFailoverInstance
コマンドを実行します。
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '10.128.67.44' props['instance'] = '1.example.com' props['nic'] = 'eth0' otd_addFailoverInstance(props)
たとえば、フェイルオーバー・インスタンスを削除するには、otd_removeFailoverInstance
コマンドを実行します。
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '10.128.67.44' props['instance'] = '1.example.com' otd_removeFailoverInstance(props)
たとえば、フェイルオーバー・インスタンスをリストするには、otd_listFailoverInstances
コマンドを実行します。
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '10.128.67.44' otd_listFailoverInstances(props)
たとえば、フェイルオーバー・インスタンスの順序を変更するには、otd_setFailoverInstanceOrder
コマンドを実行します。
props = {} props['configuration'] = 'ha' props['virtual-ip'] = '10.128.67.44' props['instances'] = '1.example.com, 2.example.com' otd_setFailoverInstanceOrder(props)
詳細は、『Oracle Traffic Director WebLogic Scripting Toolコマンド・リファレンス』を参照してください。