ポリシー サーバ負荷分散の管理
目次
casso127jpjp
目次
1
サービス中断の防止を支援するために、
CA Single Sign-on
にはフェールオーバ機能があります。プライマリ ポリシー サーバが失敗し、フェールオーバが有効の場合、バックアップ ポリシー サーバがポリシー操作を引き継ぎます。CA Single Sign-on
v6.0 以降では、フェールオーバをポリシー サーバ間だけでなく、ポリシー サーバのグループつまりクラスタ
間でも行うことができます。また、クラスタ機能は、クラスタ内のサーバ間に動的な負荷分散機能を提供して、サーバのパフォーマンスを改善します。動的な負荷分散では、各サーバのパフォーマンス能力に応じてポリシー操作がクラスタ内の使用可能サーバ間で自動的に分散されます。
ホスト設定は、どのようにホスト設定オブジェクトを定義するかに応じて、以下のように 1 つ以上のポリシー サーバまたはポリシー サーバの 1 つ以上のクラスタと関連付けることができます。
- クラスタ化サーバ
- ホスト設定で作成するクラスタごとに AddCluster() をコールします。
- AddCluster() から返される PolicyMgtCluster オブジェクトで、AddServer() をコールしてクラスタにサーバを適用します。
動作: 複数のクラスタが定義される場合、フェールオーバがサーバのクラス間で行われます。また、クラスタ内のサーバへの要求は、Agent API v6.0 に導入された、機能強化パフォーマンスベース負荷分散テクニックにしたがって送信されます。 - 非クラスタ化サーバ
- ホスト設定で作成する非クラスタ化サーバごとに AddServer() をコールします。
動作: 動作は v5.x インストールの場合と同じです、つまり、ホスト設定と関連付けられたサーバ間でフェールオーバを有効にするか(EnableFailover() を 1 に設定)、サーバ間でラウンド ロビン動作を有効にできます(EnableFailover() を 0 に設定)。ラウンド ロビン動作が有効なとき、エージェント API に導入された、機能強化パフォーマンスベース負荷分散テクニックが使用されます。
注:
ホスト設定内でクラスタ化されたサーバとクラスタ化されていないサーバを混在させることはできません。クラスタの設定
クラスタはホスト設定オブジェクトに保存されます。クラスタ フェールオーバは、PolicyMgtHostConfig で設定された以下の設定値に従って行われます。
- フェールオーバしきい値。ポリシー サーバ要求に対して利用可能である必要があるクラスタ内のサーバの最小の割合(%)。利用可能なサーバの数がしきい値以下になると、次のクラスタへのフェールオーバが行われます。フェールオーバしきい値パーセンテージは、ホスト設定オブジェクトと関連付けられたすべてのクラスタに適用されます。パーセンテージが特定のクラスタ内で表すサーバの数を判定するには、しきい値パーセンテージにクラスタ内のサーバ数を乗算して、次の最も高い整数まで丸めます。例: <nete:proxyrules xmlns:nete="http://www.ca.com/" debug="yes">
- 5 つのサーバのクラスタの 60 パーセント フェールオーバしきい値では、クラスタ内の利用可能なサーバの数が 3 を下回ると、次のクラスタへのフェールオーバが行われます。
- 同じクラスタの 61 パーセント フェールオーバしきい値では、クラスタ内の利用可能なサーバの数が 4 を下回ると、フェールオーバが行われます。
次のメソッドによって設定。FailoverThreshold()。 - サーバ タイムアウト。エージェントがサーバからのレスポンスを待機する最大時間。待機時間がサーバ タイムアウト値を超える場合、サーバは非アクティブであると見なされ、次のサーバへのフェールオーバが行われます。サーバ タイムアウトがクラスタ内で発生し、タイムアウトによってクラスタのフェールオーバしきい値を超える場合は、次のクラスタへのフェールオーバが行われます。次のメソッドによって設定。RequestTimeout()。
- クラスタ フェールオーバのシーケンス。クラスタ フェールオーバが発生すると、CA Single Sign-onは後続のポリシー サーバ要求をクラスタ シーケンス内の次のクラスタに送信します。クラスタ シーケンスはクラスタ配列内のクラスタ オブジェクトの順序によって決定されます。次のメソッドによってクラスタを追加: AddCluster()。追加された新しいクラスタは、クラスタ配列の終わりに追加されます。次のメソッドによってクラスタ配列を取得。GetAllClusters()。ホスト設定オブジェクトにクラスタを追加する順序によって、フェールオーバ シーケンスが決定されます。追加する最初のクラスタ(つまりクラスタ配列内の最初のクラスタ)は、プライマリ クラスタです。これは、クラスタ内の利用可能なサーバの数がフェールオーバしきい値未満にならない限り使用されるクラスタです。プライマリ クラスタに使用できる十分なサーバがないと、次のクラスタへのフェールオーバが行われます。つまり、ホスト設定オブジェクトに追加された 2 番目のクラスタが対象になります。そのクラスタも失敗する場合、ホスト設定オブジェクトに追加された 3 番目のクラスタへのフェールオーバが行われます(以後同じ要領)。
クラスタがすべて失敗するとき
利用可能なサーバの数がホスト設定内のすべてのクラスタでフェールオーバしきい値未満になった場合、ポリシー操作は停止しません。要求は、少なくとも 1 つの利用可能なサーバがあるクラスタ シーケンスの最初のクラスタに送信されます。
たとえば、ホスト設定に 2 つのクラスタがあると想定します。3 つのサーバが含まれる C1 と 5 つのサーバが含まれる C2 です。ホスト設定用のフェールオーバしきい値は 60 パーセントに設定されます。以下の表は、各クラスタ内で利用可能である必要があるサーバの最小数を示しています。
Cluster | クラスタ内のサーバ数 | パーセンテージ フェールオーバしきい値。 | 数値フェールオーバしきい値(最小利用可能サーバ数) |
C1 | 3 | 60 | 1 |
C2 | 5 | 60 | 3 |
利用可能なサーバの数が各クラスタ内でしきい値未満になり、その結果、C1 には利用可能なサーバがなく、C2 に 2 つのみ利用可能サーバがあるという状態になった場合、着信する次の要求は最良のレスポンス時間を持つ C2 サーバに送信されます。少なくとも 3 つの C1 サーバのうちの 2 つが修復された後は、後続の要求が利用可能な C1 サーバ間で負荷分散されます。
エージェント API v6 は、エージェント API v5 と下位互換性があり、v5/v6 エージェントおよび v5/v6 エージェント API との完全な相互操作性が実現されます。
例: ホスト設定の作成
以下のコードは、ホスト設定オブジェクトを作成し、多くのクラスタおよびサーバを追加します。
use Netegrity::PolicyMgtAPI;# Initialize the Policy Management API and create a Host Config object.$pmgtapi = Netegrity::PolicyMgtAPI->New();$session = $pmgtapi->CreateSession("SiteMinder", "password");$hostconf = $session->CreateHostConfig("host", "description",false, 2, 2, 1, 30);# Add two non-cluster servers. The Az, Auth and Acct ports are# specified.$hostconf->AddServer("1.1.1.1", 44443, 44442, 44441);$hostconf->AddServer("2.2.2.2", 44443, 44442, 44441);# Add two clusters with two servers in each cluster. One Policy# Server port number is specified.$clusterconf1 = $hostconf->AddCluster();$clusterconf1->AddServer("1.1.1.1", 44443);$clusterconf1->AddServer("2.2.2.2", 44443);$clusterconf2 = $hostconf->AddCluster();$clusterconf2->AddServer("3.3.3.3", 44443);$clusterconf2->AddServer("4.4.4.4", 44443);# Print configuration of all non-cluster servers in the Host# Config object@servers = $hostconf->GetAllServers();foreach $server (@servers) {$address = $server->GetServerAddress();@ports = $server->GetServerPort();print("Server: $address,@ports[0],@ports[1],@ports[2]\n");}# Print all cluster servers@clusters = $hostconf->GetAllClusters();foreach $cluster (@clusters) {$num++;foreach $server ($cluster->GetAllServers()) {$address = $server->GetServerAddress();$port = $server->GetServerPort();print("Cluster $num Server: $address,$port\n");}}# Remove all clusters and non-cluster servers from host configuration$hostconf->RemoveAllClusters();$hostconf->RemoveAllServers();