...

Edge 1 WebSphere Application Server V6.0 - Network Deployment -

by user

on
Category: Documents
175

views

Report

Comments

Transcript

Edge 1 WebSphere Application Server V6.0 - Network Deployment -
WebSphere Application Server V6.0
- Network Deployment -
Edge
1
Agenda
1章. Load Balancer
Load Balancer とは
Edgeクラスター
u MAC転送方式
u Load Balancer 構成要素
u High Availability構成
u
u
2章. 構成とトポロジー
Rule
u Affinity
u 割り振りの制御
u スクリプト
u ログ
u
当資料では以下の略語を使用しています。
( )内が正式名称になります。
製品名
WAS
(WebSphere Application Server)
ND
(WebSphere Application Server Network Deployment)
RAD
(IBM Rational Application Developer for WebSphere Software)
RWD
(IBM Rational Web Developer for WebSphere Software)
製品に含まれるコンポーネント
AST
(Application Server Toolkit)
TPV
(Tivoli Performance Viewer)
DM
(Deployment Manager)
IHS
(IBM HTTP Server)
用語
WLM
(Workload Management)
環境により異なるインストール・ルート等については、以下の表記を使用していま
す。
<WAS_root> :WASのインストール・ルート
(Windowsデフォルト:C:¥Program Files¥IBM¥WebSphere¥AppServer)
<Profile_root>:プロファイル・ルート(Windowsデフォルト:C:¥Program
Files¥IBM¥WebSphere¥AppServer¥profiles¥<Profile_name>)
<Plugin_root>:プラグインのインストール・ルート(Windowsデフォルト:
C:¥Program Files¥IBM¥WebSphere¥Plugins)
<IHS_root> :IHSのインストール・ルート(Windowsデフォルト:C:¥Program
Files¥IBM¥IBM HTTP Server)
2
第1章
Load Balancer
Load Balancer とは
Edgeクラスター
MAC転送方式
u Load Balancer 構成要素
u High Availability 構成
u
u
u
3
Load Balancerとは
n
n
n
クライアントの要求を各サーバーに分散
各サーバーの監視
各サーバーへ割り振りの制御
Advisoが
サーバーの監視
Advisor
Executor
Executorが
割り振る
Client
Manager
Load Balancer
Managerが
負荷を計算
Server
Balancer は、クライアント
要求を各種サーバー間で分散させるためのソフト
ウェア・ソリューションです。これは、TCP/IP セッション要求をサーバーに割り振ること
によって、サーバーのパフォーマンスを高めます。このロード・バランシングは、ユー
ザーや他のアプリケーションに透過的に行われます。
nLoad
Balancer は、割り振り先サーバーの監視を行います。サーバーがダウンする
とそれを検知し、ダウンしたサーバーに要求を割り振りません。
nLoad
Balancer は、要件に基づき割り振りを行います。時間や要求コンテンツなどに
より割り振るサーバーを限定する事ができます。
nLoad
4
Edgeクラスター
u
u
u
u
複数のサーバーでクラスター を定義。
クライアントはLoadBalancerに定義されたCluster Addressでアクセス。
クラスターは複数定義可能 。
WASのクラスター とは別ものです。
クライアントはいつも
Cluster Address
にアクセスする
Cluster:port
10.10.10.5
10.10.10.1
Cluster Address
10.10.10.2
10.10.10.10
Load Balancer
10.10.10.3
Client
IHS/WAS
■LoadBalancerでは、割り振り先となる複数のサーバーで、クラスターを構成しま
す。クラスターとはLoadBalancer上に定義されたCluster Addressによってアクセ
スされる1つのグループです。クライアントにはクラスターアドレスしか見えませんの
で、あたかも1つのサーバーであるかのように見えます。LoadBalancerはクラス
ター・アドレス宛てで来たリクエストを受け取り、クラスター内に定義された割振り先
サーバーにリクエストを割振ります。
■負荷分散装置には複数のクラスター・アドレスを設定することができますので、
異なるサイトのトラフィックを一つの負荷分散装置で割振ることも可能です。負荷分
散装置に設定可能なクラスターの数は製品に依存します。WAS V6 NDで提供さ
れるDispatcherの場合はデフォルト最大100個のクラスター・アドレスを設定可能で
すが、あまり多くのクラスターアドレスを設定するとメンテナンス性が低下することが
懸念されますのでご注意ください。
5
Load Balancer構成方法
①サービスのdsserverを起動
dsserver start
②Executorを起動
dscontrol executor start
③Clusterアドレスを設定
dscontrol cluster add Cluster_Address
④使用するポートを設定
dscontrol port add Cluster_Address:port
⑤割り振り先サーバーを設定
dscontrol server add Cluster_Address:port:Server_1
dscontrol server add Cluster_Address:port:Server_2
⑥Managerを起動
dscontrol manager start
⑦Advisorを起動
dscontrol advisor start http 80
Cluster:80
Server2
Server1
Client
Load Balancer
IHS/WAS
n上記はServer1とServer2をポート
80でクラスター構成した時の例です。
n割り振り先サーバーであるServer1とServer2にループバック・
アドレスのAliasも
しくはiptablesでClusterアドレスを設定する必要があります。
6
MAC転送方式
u
u
u
u
u
u
クライアント・リクエスト内のMACアドレスのみを変換。
宛先IPアドレスは変更しない。
ResponseはDispatcherを経由しない。
最もパフォーマンスがよい。
Dispatcherと同じセグメント内のサーバーのみ割り振りができる。
割り振り先サーバーにクラスター・
アドレスを定義。※ノート参照
クラスター・アドレスを
ループバックのエイリアスとして追加!
MAC
IP
ClusterIP
Port
MAC aa:aa
IP
10.10.10.98
MAC
src aa:aa
dst bb:bb
IP
src 10.10.10.98
dst 10.10.10.10
TCP
dst 80
MAC
IP
ClusterIP
Port
bb:bb
10.10.10.5
10.10.10.10(en0)
80
DATA
・・・
・・・
MAC
src bb:bb
dst cc:cc
Request
IP
src 10.10.10.98
dst 10.10.10.10
TCP
dst 80
cc:cc
10.10.10.3
10.10.10.10(lo0)
80
DATA
・・・
・・・
Request
Load Balancer
Client
Response
MAC
src cc:cc
dst aa:aa
IP
src 10.10.10.10
dst 10.10.10.98
TCP
src 80
IHS/WAS
DATA
・・・
・・・
nMAC転送方式に追加で必要なIPアドレスはClusterIPのみです。DispatcherのMAC転送
方式は、クライアントから来たリクエスト内のMACアドレスのみを変換し、IPアドレスの変換は
行ないません。
nこの転送方式の特徴としては、帰りのパケットがDispatcherを経由しないことです。一般的
にWebのトラフィックはリクエストよりもレスポンスの方が重たいことが多いので、この重いトラ
フィックがDispatcherを通らない分パフォーマンスはよくなります。Dispatcherで最もパフォー
マンスのよい転送方式になります。
nMAC転送方式を用いる際の制限としては、MACアドレスしか書換えを行なわないので、
ARPが届く範囲内つまりDispatcherと同じセグメント内に割り振り先サーバーが存在する必
要があります。
nDispatcherはリクエスト
をクライアントから受け取ると、宛先MACアドレスを割振り先サー
バーのMACアドレスに変換し、リクエストを割振り先サーバーに送信します(同一ネットワーク
ですので MACアドレスにより、リクエストは割振り先サーバーに届きます)。この際、送信元の
IPアドレスが変更されていないことをご確認下さい。リクエストを受け取った割振り先サー
バーは、リクエストに含まれる送信元IPアドレスに対してレスポンスを返しますので、送信元IP
からARPテーブルを確認してMACアドレスを判断し、直接クライアントへとレスポンスを返し
ます。
※割振り先サーバーがAIX / Windows の場合は、loopbackアドレスにクラスター・アドレスを
aliasとして設定することが必要です。
※割振り先サーバーがLinuxの場合は、以下のコマンドでiptablesにクラスター・アドレスを設
定する必要です。
iptables –t nat –A PREROUTING –d cluster_address –j REDIRECT
※割振り先サーバーがWindowsの場合は、エキストラ経路を削除する必要があります。
7
Load Balancer 構成要素
u
Load Balancer の内部構成
サーバーの監視を行い
レスポンスの時間を
Managerに伝える
IHS/WAS
dsserver(javaコンポーネント)
監視
Manager
Advisor
IHS/WAS
Client
Executor
カーネル
Executorから接続数を
受け取り、それらの情報を基に
負荷を計算してExecutorに
”重み”として伝える
割り振り
IHS/WAS
Load Balancer
Managerに接続数
を伝え、“重み”
を基に
割り振りを行う
Cluster
ここでは、Load Balancerの構成を説明します。
管理者は、dscontrolコマンド、もしくはGUIを通して、executor, manager,
advisor を操作します。
nexecutor・
・・実際に割り振りを行うカーネルベースのコンポーネントです。
nmanager・
・・advisorを呼び出し、割り振り先サーバーの重みを計算し、executor
に伝えるコンポーネントです。
nadvisor・
・・割り振り先サーバーにリクエストを送り、レスポンスが返ってくるまでの
時間をmanagerに伝え、サーバーの生死の監視を行っているコンポーネントです。
8
Executorの役割
n
サーバーへ割り振りおよび割り振りの制御をします。
u
実際の割り振りを行う
l
u
カーネルの一部として動作し、プロセスとしては見えない。
接続数のカウント
l
Managerを通じて表示可。
u
High Availability構成時、primary/backup間でheartbeat
(heartbeatで接続情報およびAffinity情報の同期をとる。)
u
接続情報テーブルの保持
u
Affinity情報の保持(IP Sticky情報のみ)
9
Managerの役割
n
各サーバーの負荷を計算し、Executorに”重み”として伝える。
u
Executorが使用する各サーバー重み(負荷)を計算
l
u
f
ixedweightコマンドによりサーバーに設定した重みを固定できる。※ノート参照
以下の情報からサーバーの重みを計算するJavaコンポーネント
Ø
Ø
Ø
Ø
u
ACTV
NEWC
PORT
SYS
・・・現在の接続数(
Executorが情報提供)
・・・新規の接続数(
Executorが情報提供)
・・・Advisorからの情報
・・・Metric Server等のモニタリング・ツールによる情報
Advisorの呼び出しとレスポンスタイムの計測
nmanagerは、各項目(
ACTIVE、NEW、PORT、SYSTEM)における各サーバー
に対する重みを、それぞれからのフィードバックに基づいて、manager内部で設
定しております。managerは収集した全ての情報(4項目の値)を基に、各サー
バーの新規の重み(WEIGHT)を算出し、executorに伝達します。
nadvisorを使用しなければ、managerは割振り先サーバーのダウン検知を行えま
せん。ダウン検知は行いたいが、割振り先サーバーに設定した重みをadvisorによ
り更新させたくない場合は、fixedweightオプションを使用します。例えば、以下の
ようになります。
dscontrol server set cluster:port:server fixedweight yes
また、fixedweightをyesに設定した後、dscontrol server set weightコマンドで
重みを所要の値に設定します。
10
負荷の計算方法
n
Manager
2秒間隔で重みを計算し、更新を行います。
※managerが算出する重みの計算式につきましては、内部ロジックとなります為、
一般公開されておりません。
u
図①
#dscontrol manager report (managerが持っている情報を表示するコマンド)
------------------------------------------------------------------|
9.170.19.100
| WEIGHT | ACTV | NEWC | PORT |
SYS |
|
PORT:
80
|NOW NEW|
49% |
50% |
1% |
0% |
------------------------------------------------------------------|
9.170.19.10 | 9 9 |
13 |
1 |
32 |
0 |
|
9.170.19.20 | 0 0 |
0 |
0 |
-1 |
0 |
-------------------------------------------------------------------
<参考>
WEIGHT
更新
WEIGHT
更新
2秒
ACTV, NEWC
更新
WEIGHT
更新
2秒
WEIGHT
更新
2秒
ACTV, NEWC
更新
■managerが持っている情報(図①)について説明します。
nWEIGHTのNOW値は現在executorが使用している重みです。
nWEIGHTのNEW値は次のサイクルでexecutorが使用する重みです。
nACTV値、NEWC値に関しては、executorが内部カウンターからカウント
した接
続数をmanagerに渡したものです。managerは、default2秒間隔でWEIGHTを更
新しており(参考図)、そのサイクルを2回(default)繰り返すごとに接続数
(ACTV,NEWC)の情報を更新しています(参考図)。その2サイクルの間に(点線
部)新しく入ってきた接続数が、次の「NEWC」として反映されます。また、総接続
数から次の接続数の更新時までに接続が終了した数を引いたものが、「ACTV」と
して反映されます。
nPORT値は,advisorを使用してサーバの状態を監視した時の、サーバに対する
リクエストのレスポンス時間(ミリ秒単位)を表しております。レスポンスがない場合
は、PORT値は−1となります。
Serverなどのシステムの負荷を監視するツールにより、割振り
先サーバーのCPU使用率やメモリ使用率などのシステム負荷を監視している場合、
その値が反映されます。
nSYS値は、Metric
※proportionオプションにより、ACTV, NEWC, PORT, SYS の4項目の重要度の
割合を変更する事が可能です。
11
Advisorの役割
n
割り振り先サーバーの監視、レスポンスタイム を計測
u
割り振り先サーバーの障害検知
l
l
負荷分散の対象となるサーバーに定期的にリクエスト
レスポンスが返れば、サーバーは正常と判断
レスポンスが返らないと、サーバーダウンと判断
※ダウンと判断する前に、もう一度リクエストを送る事ができます。ノート参照
l
Executor
レスポンスがあれば正常
なければダウンと判断
リクエスト
接続情報
重みの計算結果
7秒間隔で呼び出す
Manager
Advisor
生死情報,レスポンスタイム
Load Balancer
レスポンス
IHS/WAS
Advisorはサーバーをダウンと判断する前に再試行できます。
例えば、ポート80のHTTP advisorの場合に、ダウンと判断する前に3回再試行させる
場合は、以下のコマンドを入力します。
dscontrol advisor retries http 80 3
12
IHSまで監視させるには
n
デフォルトのHTTP Advisorを使えばOK
u
u
デフォルトのリクエスト HEAD / /HTTP 1.0
デフォルトでは、レスポンスはどんな値でもサーバーが生きてると
見なす。
※IHSにアクセス・ログが残りますが、ログから除く事も可能です。ノート参照。
レスポンスがどんな
値でも生きてると
見なす
Advisor リクエスト
HEAD / HTTP/1.0
UserAgent : IBM_Load_Balancer_HTTP_Advisor
Load Balancer
IHS
レスポンス
Advisorを使用している場合、IHSはadvisorのリクエストをアクセス・ログと
して記録してしまいます。
これを取り除くには、IHSのhttpd.confに以下のように編集をします。
nHTTP
BrowserMatch IBM_Load_Balancerh_HTTP_Advisor ND
CustomLog <IHS_ROOT>/log/access_log common env=!ND
問題判別のため、別途ログを記録する事をお奨めします。(以下:advisor_logと
いうログの作成例)
CustomLog <IHS_ROOT>/log/advisor_log common env=ND
13
WASまで監視させるには①
n
拡張 HTTP advisor
u
u
advisorが割振り先サーバーに送るリクエストや、割振り先サーバーからのレ
スポンス指定可能。
AdvisorリクエストにWASやDBまでみるサーブレットを指定する事で、WASや
DBまで監視する事が可能。
※DBまで見に行くサーブレットにリクエストを送り、
正常ならば ”Everything OK”という文字列をレスポンスに入れた場合
dscontrol server set cluster:port:server advisorrequest “¥”GET /testServlet HTTP/1.0¥””
dscontrol server set cluster:port:server advisorresponse “¥”Everything OK¥””
リクエスト
GET /testServlet HTTP/1.0
Load Balancer
IHS
レスポンス
Everything OK
WAS
DB
n例えば、拡張
HTTP advisorを使用して、割振り先サーバーに “ GET /testServlet
HTTP/1.0 ” というリクエストで、レスポンスに “ Everythihg OK “ の文字列を指定して、割振り
先サーバーのダウン検知を行うには、以下のようにします。
dscontrol>> シェル・プロンプトからこのコマンドを出す場合は、ブランクがストリングに含ま
れている場合は、そのストリングの前後を引用符で囲まなければなりません。
server set cluster:port:server advisorrequest “GET /testServlet HTTP/1.0"
server set cluster:port:server advisorresponse “Everything OK"
オペレーティング・システム・プロンプトからdscontrol コマンドを出す場合は、テキストの前
に “¥” を付けて、¥“” を付けたテキストを続けなければなりません。
dscontrol server set cluster:port:server advisorrequest "¥“GET /testServlet
HTTP/1.0¥""
dscontrol server set cluster:port:server advisorresponse "¥“Everything OK
¥""
14
WASまで監視させるには②(SSL通信の場合)
n
SSL通信でWASまで監視できるAdvisor
HTTPS Advisor はこれは、サーバーとの完全 SSL ソケット接続を実行。
HTTPS Advisor は、SSL 接続をオープンして HTTPS 要求を送信し、応答を待機し、
接続をクローズし、負荷として経過時間 を戻す。SSL Advisor より重い。リクエストおよびレ
スポンスを指定可能 。
Advisor
IHS/WAS
<参考>SSL通信でIHSまで監視できるAdvisor
SSL Advisor はサーバーとの完全 SSL ソケット接続を確立しない。
SSL Advisor は、接続をオープンして SSL CLIENT_HELLO 要求を送信し、
応答が来たら接続をクローズし、負荷として経過時間 を戻す。HTTPS Advisor より軽い。
Advisor
IHS
15
<参考>Advisorの挙動①
u
Advisorの監視に使われる制限時間を変更できます。
l
l
l
interval ・・・Advisorを呼び出す間隔です。(デフォルト7秒)
connecttimeout ・
・
・接続をするまでの時間制限です。(デフォルト21秒)
recievetimeout ・・・レスポンスを受け取るまでの時間制限です。(デフォルト21秒)
Advisorの監視
ClusterA
< Server1> < Server2 >
7秒間
interval
接続開始
<
接続終了
connecttimeout
最大21秒間
レスポンス
interval
リクエスト
最大21秒間
接続確立
接続開始
7秒間
ClusterA
< Server1> < Server2 >
7秒間
interval
recievetimeout
Server1
><
S e r v e r 2 ・・
advisorは、監視先サーバーに対して、接続を確立し、リクエストを投げレスポンスを受け取
り、接続を終了するまでの時間をmanagerに報告します。監視先サーバーに接続できない、
もしくは レスポンスがない場合は、ダウンとみなし、managerに報告します。
■ここでは、interval, connecttimeout, recievetimeout の3つの値について説明します。
はmanagerがadvisorを呼ぶ間隔です。default7秒ですが、advisorを7秒間
隔で呼び出す訳ではなく、advisorが監視を終了してから次の呼び出しまで7秒間あると
いう事に注意してください。実際には、advisorが監視を行っている時間+7秒後に次の
advisor監視が行われます。
例えば、ポート80 の HTTP advisor の場合に、間隔を 3 秒に設定するには、以下の
コマンドを入力します。
dscontrol advisor interval http 80 3
ninterval
nconnecttimeoutは、advisorが監視先サーバーに対して接続を確立するまでの制限時
間です。defaultは21秒ですが、要件に合うよう短くする事も可能です。
例えば、ポート80 で HTTP advisor の connecttimeout を 9 秒に設定するには、次
のコマンドを入力します。
dscontrol advisor connecttimeout http 80 9
nrecievetimeoutは、advisorが監視先サーバーに対してリクエスト
を投げ、レスポンスを
受け取るまでの制限時間です。defaultは21秒です。サーバーの応答時間が増加するよ
うなトラフィックを生じるアプリケーションの場合は、receivetimeout の値を小さく設定し
すぎないように注意してください。そうしないと、ビジーのサーバーが障害発生として
マークされるのが早すぎる事態になる場合があります。
例えば、ポート80 で HTTP advisor の recievetimeout を 9 秒に設定するには、次
のコマンドを入力します。
dscontrol advisor recievetimeout http 80 9
16
<参考>Advisorの挙動②
n
複数クラスターに対するAdvisorの動き
ClusterA : 80
Server1+Server2
ClusterB : 80
Load Balancer
Server3+Server4
dscontrol advisor start http 80
ClusterA
(
port 単位でadvisorを起動した場合)
ClusterB
< Server1> < Server2 > < Server3> < Server4 >
dscontrol advisor start http ClusterA:80
dscontrol advisor start http ClusterB:80
ClusterA
< Server1> < Server2 >
ClusterB
< Server3 > < Server4 >
7秒間
interval
7秒間
interval
ClusterA
< Server1> < Server2 >
(
Cluster+port単位でadvisorを起動した場合)
ClusterA
< Server1> < Server2 >
7秒間
interval
7秒間
interval
ClusterB
< Server3 > < Server4 >
7秒間
interval
■ここでは、クラスターが複数ある場合のadvisorの挙動について説明します。
nadvisorをport単位で起動した場合は、それぞれのクラスターに順次リクエスト
を
送ります。そのため、複数クラスターがある場合は、全てのクラスターにリクエストを
送り終わった後に、intervalが入り、次のadvisorサイクルが始まります。
nadvisorをCluster+port単位で起動した場合は、各クラスターに同時にリクエスト
を送ります。そのため、一つクラスターに対しリクエストを送り終わったら、intervalが
入り、そのクラスターに対する次のadvisorサイクルが始まります。
※サーバー単位でadvisorを起動する事はできません。
※一つのクラスターに複数のサーバーが登録されている場合は、サーバー数が増
えれば増えるほど障害検知に時間がかかってしまう恐れがあります。
17
High Availabilityとは
n
High Availability構成(
HACMPとは別物)
u
u
u
Dispatcher自身の可用性
Primary-Backupの2台でHA構成
(通常はBackup機はスタンバイ状態です。)
Primaryサーバーの障害時にBackupサーバーが処理を引き継ぐ。
Primary
heartbeat
IHS/WAS
Client
Backup
nLoadBalancerが割振り先サーバーの障害を検知し、可用性を確保していること
はご説明しました。ここではLoadBalancer自身の可用性についご説明いたします。
nまずDispatcherの可用性はPrimaryとBackupの2台でHA構成をとることにより
確
保されます。(なおこのHA構成はDispatcher自身の持っている機能であり、
HACMPとは関係ありません)。PrimaryとBackupのそれぞれのDispatcherは互い
に0.5秒間隔でheartbeatと呼ばれるパケットを送りあっています。このheartbeatが
4回(つまり2秒)相手から届かなかった場合には、相手がダウンしたと判断し
Takeoverが発生します。Takeoverが発生するとクライアントからのリクエストは
Backup機により処理されるようになります。また接続情報やsticky情報は通常の
heartbeatでやりとりされていますので、Takeoverが発生した際にもTakeover直前
までの情報は引継いでいます。
nTakeover発生条件であるheartbeatのタイムアウト
値は変更する事ができます。
(heartbeatの間隔0.5秒は変更できません。)
dscontrol executor hatimeout 3 (3秒に変更する例)
18
heartbeatとは
n
HA構成の時にお互いを監視するためのパケット
u
u
u
お互いに0.5秒間隔でheartbeatを投げ合い、監視を行う。
heartbeatが相手から4回(2秒)届かなかったら相手をダウンと判断。
(デフォルト値)
heartbeatは接続情報およびsticky情報を保持。
heartbeat
接続情報 sticky情報
heartbeat
Primary
n
Backup
Primary機の持っている接続情報およびsticky情報は、heartbeatを通してBackup機と
同期をとります。Primary機がダウンした場合は、Backup機によって、接続およびsticky
が保持されます。
19
<参考>High Availability 障害発生ケース
u
Primary機のマシン障害
u
ネットワーク障害
l
l
u
問題なくBackup機へと引き継ぐ。
Primary機、Backup機の両方がActiveになりますが、どちらかは障害により接続できない状態
にあるため、問題ありません。
プロセス障害
l
ManagerやAdvisorなどのJavaで動いているコンポーネントで障害が発生した場合、heartbeat
は途切れないため(Executorがカーネルのため)Takeoverは発生しません。この障害に対応
するためには、Tivoli等の監視ツールを使用する必要があります。
heartbeat
heartbeat
Primary
マシン障害の場合は、
Backup機がtakeover
します。
ネットワーク障害の場合
は、お互いがActiveに
なります。
Backup
n
Primary機のマシン障害の場合は、Backup機がTakeoverします。
n
ネットワーク障害の場合は、heartbeatが断絶するため、Backup機もActiveに
なります。ネットワーク障害から回復した場合、フェールオーバーがautoであ
ればPrimary機がActiveに、manualであればタイミングでどちらかがActiveに
なります。
プロセス障害(advisor, managerの障害)の場合は、heartbeatは止まりませ
ん(カーネルのexecutorで動作しているため)のでTakeoverは起こりません。
Tivoliや運用シェルでプロセスを監視し、障害を検知したら強制的に
Takeoverを発生させる必要があります。以下は強制的にTakeoverを発生さ
せる方法です。
−インターフェースをダウンさせてheartbeatを止めて、メンテナンスのために再
起動をする。
−dsserver(java プロセス)を再起動してexecutorを停止し、再起動をします。
n
20
<参考>Takeover発生時の挙動
※Takeoverが発生してBackup機がActiveになった後に、Primary機が回復した時、Primary
機をActiveに自動、もしくは手動で戻す事ができます 。
1. Primary機がダウンし、Backup機がActiveになった場合
・接続情報、sticky情報共に引き継がれます 。
2. Primary機がダウンし、Backup機がActiveになった後、Primary機が回復して
再びActiveに自動で戻った場合
・接続情報は引き継がれます。
・sticky情報は引き継がれません。
※接続情報 の同期をとってから引継ぎを行うには、dscontrol highavailability status
コマンドで、同期化済 になっている事を確認してから手動で引継ぎを行ってください。
3. Primary機がダウンし、Backup機がActiveになった後、Primary機が回復して
再びActiveに手動で戻した場合
・接続情報は引き継がれます。
・sticky情報はPrimary機が回復してから、手動でActiveに戻すまでに更新されたものが
引き継がれます。
21
<参考>HA構成の同期確認
§
#dscontrol highavailability status
Primary機
Backup機
high availability 状況:
------------------------役割 ......................プライマリー
リカバリー・ストラテジー ..手動
状態 ......................活動中
2 次状態 ..................同期化済 み
プライマリー・ホスト...........10.10.10.1
ポート...............34756
優先ターゲット.......適用なし
high availability 状況:
------------------------役割 ......................バックアップ
リカバリー・ストラテジー ..手動
状態 ......................待機
2 次状態 ..................同期化済 み
プライマリー・ホスト...........10.10.10.1
ポート...............34756
優先ターゲット.......適用なし
Heartbeat 状況:
--------------カウント.............1
送信元/宛先 ..........10.10.10.1/10.10.10.2
Heartbeat 状況:
--------------カウント.............1
送信元/宛先 ..........10.10.10.2/10.10.10.1
nコマンド
dscontrol highavailability status でマシンのHigh Availability情報を
確認できます。
22
第2章
構成とトポロジー
u
Rule
u
Affinity
割振りの制御
u
u
u
スクリプト
ログ
23
条件による割り振り
n
n
n
Ruleを定義して条件により、割振りを制御することが可能。
Ruleは複数定義可能で、優先度の高いものから適用。
定義できるルールの条件
u
u
u
u
Client IP
時間
・・・など
秒あたりの 接続数
活動中の接続数
通常は2台のサーバーへ割り振り
u
常に“true”
特定条件でSorryへ割り振り
接続数制限
サービス利用不可
サービス時間外
Load Balancer
Load Balancer
Sorry Server
Sorry Server
※Sorry Server はLoad Balancer と同一筐体に作成する事が可能。
nLoadBalancerの割振りをルールを用いて、制御することが可能です。例えば、業務
時間内には業務サーバーに割振るが、業務時間外にはSorry Serverに割り振り、
サービス停止中のメッセージを表示したいといった場合には、時間タイプのルールを
用いることができます。その他クライアントのIPによって割振り先を変更したり、業務
サーバーが過負荷になる前に接続数で制限をかけるといったことも可能です。
nルールは複数定義可能ですが、優先度の高いものから順位処理され、ルールに
マッチングするとそのルールに基づいて割振りが行なわれ、それ以降のルールのマッ
チングは行なわれません。またルールの”かつ”条件での設定はできません。
24
<参考>Ruleの使用例
n
Ruleを使用した例
IHS/WAS
Load Balancer
Sorry Server
①type true
Web Serverがダウンした時に、Sorry Serverへ割り振る。
②type ip
Client IP が10.10.10.1∼10.10.10.10までをWeb Serverへ、それ以外はSorry
Serverへ割り振る。
③type time
PM 11:00∼AM 5:59までをSorry Serverへ割り振る。
④type active
接続数が30を超えたらSorry Serverへ割り振る。
※Sorry Server となるIHS側であらゆるパスも処理できるように設定を行います。
設定例:Alias /sorryImpage/ /usr/IHS60/htdocs/ja_JP/sorryImage/
AliasMatch ^/.* /usr/IHS60/htdocs/ja_JP/sorry.html
①dscontrol rule add cluster_address:port:rule1 type true priority 10
dscontrol rule add cluster_address:port:rule2 type true priority 20
dscontrol rule useuser cluster_address:port:rule1 WebServer_address
dscontrol rule useuser cluster_address:port rule2 SorryServer_address
②dscontrol rule add cluster_address:port:rule1 type ip beginrange 10.10.10.0 endrange 10.10.10.10 priority 10
dscontrol rule add cluster_address:port:rule2 type true priority 20
dscontrol rule useuser cluster_address:port:rule1 WebServer_address
dscontrol rule useuser cluster_address:port:rule2 SorryServer_address
③dscontrol rule add cluster_address:port:rule1 type time beginrange 23 endrange 23 priority 10
dscontrol rule add cluster_address:port:rule2 type time beginrange 0 endrange 5 priority 11
dscontrol rule add cluster_address:port:rule3 type true priority 20
dscontrol rule useuser cluster_address:port:rule1 WebServer_address
dscontrol rule useuser cluster_address:port:rule2 WebServer_address
dscontrol rule useuser cluster_address:port:rule3 SorryServer_addree
※endrangeで指定した時間は、その時間の59分までが範囲になります。
例えばendrangeを3とした場合、3:59までが範囲になります。
④dscontrol rule add cluster_address:port:rule1 type active beginrange 0 endrange 30 priority 10
dscontrol rule add cluster_address:port:rule2 type true priority 20
dscontrol rule useuser cluster_address:port:rule1 WebServer_address
dscontrol rule useuser cluster_address:port:rule2 SorryServer_address
25
同一サーバーに割り振りを行うには
Affinityを使用する事で、同一サーバーに割り振る
IP Sticky
n
u
u
u
u
DispatcherがクライアントのIP に基づき、Affinity を維持。
Sticky有効時間内であれば同じサーバーへ割り振る。
前段のProxy Serverも1Clientと数える。
Ruleよりも優先される。
Cross Port
n
u
Port80とPort443をまたいでAffinityを実現。
u
例えばnon-SSL時に買い物カゴへ商品を入れ、SSLで支払いを行う場合に有効。
pIP Address Sticky
pCross Port Affinity
ØPort80 とPort443をまたいでAffinityを行う
Ø同じクライアントからのリクエストは同じサーバーへ割り振る
Load
Balancer
Load
Balancer
80
Client
このIPは、前に
Server1 に振ったか
ら、今度もServer1!
Client
443
nこれ以降、Dispatcherで提供されるAffinityの種類をご説明いたします。
nまず最もシンプルなIP
Stickyです。これはDispatcherがクライアントからのIP Address
毎にどの割振り先サーバーに割振ったかを覚えていて、sticky有効時間内であれば同
一のサーバーに割振り続けるというものです。この転送方式の注意としては、前段に
ProxyServerがいた場合にはDispatcherからはProxyServerが1クライアントと見えます
ので、割振りが偏ってしまう危険性があります。また、携帯電話からのリクエストは、ラウン
ド・ロビンProxyを通って届きますので、IP Stickyを用いてもAffinityを維持することができ
ません。
n次にCross Port Affinityです。Dispatcherは基本的にはSticky情報をクラスター・
アド
レス:ポートの組み合わせの単位で持っています。このためDispatcherでStickyを効か
せていても、80ポートへのリクエストと443ポートへのリクエストでは別々のサーバーに割
振られてしまう可能性があります。例えば、HTTPで商品を選択し精算時のみSSL通信
を行なうようなアプリケーションの場合には、商品選択の間はセッションが維持できるが、
購入ボタンを押すとセッション・オブジェクトのないサーバーに割振られてログイン・ペー
ジに戻されてしまう可能性があります。この問題を解消するのがCross Port Affinityです。
複数のポート間でSticky情報を共有し、ポートを跨いでAffinityを維持します。
26
Load Balancerによるサーバーダウン方法①
サーバーへの割り振りを即座に止める
n server down/up
コマンドを発行した時点で、
接続を強制終了します。
IHS/WAS
接続済み
新規接続
Load
Balancer
n
IHS/WAS
server down Cluster_address:port:WebServer コマンドでサーバーを
managerが強制的にダウンさせる事が可能。このコマンドを発行した後は、
いかなるリクエストもそのサーバーに割り振りません。割り振りを再開させ
たい時は、server up コマンドを発行します。
downコマンドを発行するとサーバーへの活動状態の接続はすべて切断
され、その他の接続またはパケットがこのサーバーに送信されないようになります
nserver upコマンドを発行するとサーバーが起動しているとマークを付けます。こ
れで、Dispatcher は、新しい接続をこのサーバーに送信するようになります。
nserver
27
Load Balancerによるサーバーダウン方法②
サーバーに新規リクエストの割り振りを止める
n manager quiesce/unquiesce
コマンドを発行した時点で、
残っている接続が完了する
まで待ちます。
IHS/WAS
接続済み
新規接続
Load
Balancer
n
IHS/WAS
manager quiesce WebServer_addressコマンドを入力すると、接続途中や
sticky情報のあるクライアントからの 要求はWebServerへ割り振り、新規の
クライアント・リクエストのみを別のサーバーへ割り振ることが可能。割り
振りを再開させたい時は、manager unquiesceコマンドを発行します。
quiesce server_addressコマンドでは、既存の接続が完了するまで、
もしくはsticky時間が切れるまでそのサーバーに対し割り振りを行います。コマンド
を発行した後に届いた新規(sticky情報のない)リクエストは、そのサーバーには割
り振りを行いません。このコマンドにより、クライアント
に透過的にサーバーのメンテ
ナンス(更新、保守、アップグレード)を行うことができます。
nmanager
nstickytimeが満了する前に、新規接続を別のサーバーに送信したい場合は、
now オプションを使用します。
manager quiesce server_address now
28
<参考>スクリプト①
u
goActive
l
u
goStandby
l
u
HighAvailability構成で、executorが停止する時、及び最初に開始される前に呼ば
れる。
goIdle
l
u
HighAvailability構成で、Standby状態になった時に呼ばれる。
goInOp
l
u
HighAvailability構成で、Active状態になった時に呼ばれる。
StandAlone構成で、Active状態になった時に呼ばれる。
highavailChange
l
High AvailabilityのステータスがActiveとStand-byで変更があった時に呼ばれます 。
ngoActive・
・・HighAvailability構成で、Active状態になった時に、クラスター・アド
レスをNICにエイリアスとして追加します。MAC転送方式以外であれば、リターン・
アドレスもNICのエイリアスに追加します。
ngoStandby・
・・HighAvailability構成で、Standby状態になった時に、クラス
ター・アドレスをNICからはずします。MAC転送方式以外であれば、リターン・アド
レスもNICからはずします。
ngoInOp・
・・HighAvailability構成で、executorが停止する時、及び最初に開始
される前に、クラスター・アドレスをNICからはずします。MAC転送方式以外であれ
ば、リターン・アドレスもNICからはずします。
ngoIdle・
・・StandAlone構成で、Active状態になった時に、クラスター・アドレスを
NICのエイリアスとして追加します。
nhighavailChange・
・・go*スクリプト
が呼ばれた時に、記録を取ることができま
す。また、管理者にメールを送ることができます。
※HighAvailability構成では、goActive, goStandby, goInOp が、StandAlone構
成では、goIdle がそれぞれ必須になります。
※上記のスクリプト
のサンプルは/opt/ibm/edge/lb/servers/samplesディレクトリ下
にあります。sampleスクリプト
を使用する場合は、拡張子”sample”を除去し、
/opt/ibm/edge/lb/servers/binディレクトリ下に移動し、適宜、編集をしてください。
29
<参考>スクリプト②
これらは特殊な挙動をしますのでご注意ください。※1
u
serverDown
l
u
serverUp
l
u
特定のサーバーが活動した時に呼ばれる。
managerAlert
l
u
特定のサーバーがダウンした時に呼ばれる。
全てのサーバーがダウンした時に呼ばれる。
managerClear
l
全てのサーバーがダウンとマークされた後に、少なくとも一つが
回復した時に呼ばれる。
u
halfOpenAlert
l
u
DoS攻撃と思われるものを受けた時に呼ばれる。
halfOpenAleartDone
l
DoS攻撃が終了した時に呼ばれる。
nserverDown・
・・特定のサーバーがダウンしたことを管理者にメールで知らせ、記
録をとります。
nserverUp・
・・特定のサーバーがダウン状態から回復したことを管理者にメールで
知らせ、記録をとります。
nmanagerAlert・
・・全てのサーバーがダウンしたことを管理者にメールで知らせ、
記録をとります。
nmanagerClear・
・・全てのサーバーがダウンした後、少なくとも一つのサーバー
が回復したことを管理者にメールで知らせ、記録をとります。
nhalfOpenAlert・
・・DoS攻撃を受けたことを管理者にメールで知らせ、記録をとり
ます。
nhalfOpenAlertDone・
・・DoS攻撃が終了したことを管理者にメールで知らせ、記
録をとります。
※上記のスクリプト
のサンプルは/opt/ibm/edge/lb/servers/samplesディレクトリ下
にあります。sampleスクリプト
を使用する場合は、拡張子”sample”を除去し、
/opt/ibm/edge/lb/servers/binディレクトリ下に移動し、適宜、編集をしてください。
※1
全てのサーバーがダウンした時は、serverDownは呼ばれず、managerAlertが呼
ばれます。例えば、サーバーが3台あり、1台と2台目がダウンしたら、serverDown
が呼ばれ、3台目がダウンして全滅した場合は、managerAlertが呼ばれます。ま
た、3台ともダウンした後に、1台が回復した場合は、serverUpではなく、
managerClearが呼ばれると同時に、ダウンしている2台に対してserverDownが
呼ばれます。
30
<参考>ログ
Load Balancerのログは循環ログ
u
u
n
サイズがオーバーしたら古いログから上書きします。
ログ・サイズは変更可能です。
ログの種類
u
server.log
u
manager.log
u
使用advisor名_ポート.log
u
subagent.log
u
hamon.log
l
l
l
l
l
u
dsserverの活動の記録、発行したコマンド等の情報
managerの活動記録等
使用するadvisorに関する情報
SNMP subagentに関する情報
high availabilityに関する情報(Primary, Backupの両方)
reach.log
l
reach advisorがとばしたping情報等
n上記のログはコマンドdscontrol loglevel
<0∼5> で書き込む情報量が変更可能
です。
nログレベルを0~5まで変更することが出来ます。
nログレベルが3以上の場合は、最大サイズを設定することを望まれます。
nログの最大サイズを指定した場合は、ログサイズの最大値に達すると、トップから上
書きされていきます。
nログのサイズは、現在の値よりも小さいものには設定できません。
※LoadBalancerのログは問題判別用ですので、常時ログレベルを5にして運用する
事は一般的ではありません。
Balancerを再起動したときに、前回使用していたログファイルに.bak拡張子を
付加して保存し、新しいログファイルを作成します。
nログを保存したい場合は、再起動する前に、.bakを保存する事をお奨めします。
nLoad
31
<参考>
n
JDKの入手先
AIX:http://www-106.ibm.com/developerworks/java/jdk/aix/service.html
u Windows: http://www-106.ibm.com/developerworks/java/jdk/index.html
u Linux:
http://www-106.ibm.com/developerworks/java/jdk/linux140
u
※インストールしたJDKに対し、PATHの設定を行ってください。
n
EdgeComponent Info-Center
u
http://www -306.ibm.com/software/webservers/appserv/doc/v60/ec/infocenterjp/index.html
32
Fly UP