IP ベースのサーバー・アプリケーションが、すべて同じように IP アドレスに関連しているわけではありません。DVIPA の自動移動、および動的 VIPA テークオーバーの計画では、この違いを考慮に入れる必要があります。
FTP または TN3270E Telnet サーバー (Telnet) のような IPv4 または IPv6 アプリケーションには、INADDR_ANY または IPv6 無指定アドレス (in6addr_any) にバインドすることによって、任意の IP アドレスでのクライアント要求を受け入れるものもあります。このようなアプリケーションの特徴は、それが提供する機能です (Telnet のための SNA アプリケーションの特定のセットなど)。
分散作業負荷の場合にしばしば認められるように、その機能がシスプレックス内の複数の z/OS® イメージにまたがって複製されている場合は、DVIPA は、アプリケーションをサポートするスタックに
移動するだけで済みます。このシナリオは複数アプリケーション・インスタンス・シナリオと呼ばれます。複数アプリケーション・インスタンス・シナリオの場合、障害時には、シスプレックス内のスタックが、DVIPA をアクティブにするすべての作業を行います。
他のタイプのアプリケーションでは、各アプリケーション・インスタンスが固有の IP アドレスを持っていなければなりません。
このシナリオは、固有アプリケーション・インスタンス・シナリオと呼ばれ、ioctl または bind() によりアクティブにされた DVIPA を使用します。
アプリケーション・インスタンスとその DVIPA の間の関係を維持するため、アプリケーションはスタックに、DVIPA をアクティブにする必要があることを示す必要があります。これは次の場合に起こります。
- アプリケーション・インスタンスが bind() 関数呼び出しを発行し、スタック上でアクティブでない IP アドレスを指定した場合。スタックは、ある基準を満たす場合、アドレスを DVIPA としてアクティブにします。アプリケーション・インスタンスが
ソケットをクローズすると、DVIPA は削除されます。
- 特定の IP アドレスに bind() を発行するようには構成できないが、固有アプリケーション・インスタンス・シナリオであるアプリケーションもあります。
このようなアプリケーション用に、ユーティリティー (MODDVIPA) が提供されており、
これが SIOCSVIPA または SIOCSVIPA6 ioctl() を発行して、DVIPA を
アクティブ、または非アクティブにします。
このユーティリティーを JCL プロシージャーまたは OMVS スクリプトに組み込み、アプリケーションを開始する前に DVIPA をアクティブにすることができます。障害発生時に別のノード上でアプリケーション・インスタンスを再始動する場合でも、同一の JCL パッケージまたはスクリプトを使用する限り、新しいスタック上で同一の DVIPA をアクティブにすることができます。MODDVIPA ユーティリティーの実行に必要な
権限について詳しくは、MODDVIPA ユーティリティーの使用を参照してください。
- それ自体を固有の IP アドレスへバインドできない固有アプリケーション・インスタンス・シナリオのサーバー・アプリケーションに代わる方法は、PORT 予約ステートメントで BIND パラメーターを使用することです。
どのようなときでも、サーバー・アプリケーションの listen ソケットとしてポートを予約しておくのは良い方法です。
サーバー・アプリケーション用の PORT 予約ステートメントで BIND パラメーターと IP アドレスが指定されており、アプリケーションがソケットをそのポートと IPv4 INADDR_ANY アドレスまたは IPv6 無指定アドレス (in6addr_any) のどちらかにバインドする場合、z/OS TCP/IP はそのバインドを、PORT 予約ステートメントで指定された IP アドレス固有のバインドに変換します。その時点以降、指定された IP アドレスはアプリケーション自体が bind() を発行して指定したかのように見えるようになり、その IP アドレスは、サーバー・アプリケーションがソケットをクローズした時点で削除されます。