Sun Cluster の概念 (Solaris OS 版)

クラスタインターコネクトによるデータサービストラ フィックの送受信

クラスタには、ノード間を結ぶ複数のネットワーク接続が必要です。クラスタインターコネクトは、これらの接続から構成されています。 クラスタ化ソフトウェアは、可用性や性能を高めるために複数のインターコネクトを使用します。 内部トラフィック (ファイルシステムデータ、スケーラブルサービスデータなど) に関しては、メッセージはラウンドロビン方式を使用し、利用できるすべてのインターコネクト間でストライプ化されます。

クラスタインターコネクトは、ノード間の通信の可用性を高めるためにアプリケーションから使用することもできます。 たとえば、分散アプリケーションでは、個々のコンポーネントが異なるノードで動作することがあり、その場合には、ノード間の通信が必要になります。 パブリック伝送の代わりにクラスタインターコネクトを使用することで、個別のリンクに障害が発生しても、接続を持続することができます。

ノード間の通信にクラスタインターコネクトを使用するには、クラスタのインストール時に設定したプライベートホスト名をアプリケーションで使用する必要があります。 たとえば、ノード 1 のプライベートホスト名が clusternode1-priv の場合、その名前を使用してクラスタインターコネクト経由でノード 1 と通信します。この名前を使用して開いた TCP ソケットは、クラスタインターコネクトを介してルーティングされ、ネットワーク障害が発生した場合には透過的に再ルーティングされます。

複数のプライベートホスト名がインストール時に設定されているため、クラスタインターコネクトでは、その時点で選択した任意の名前を使用できます。 実際の名前は、scha_cluster_get(3HA) に scha_privatelink_hostname_node 引数を指定することによって取得できます。

クラスタインターコネクトをアプリケーションレベルで使用する場合には、個々のノードペア間の通信に 1 つのインターコネクトが使用されます。ただし、可能であれば、別のノードペアには別のインターコネクトが使用されます。 たとえば、3 つの SPARC ベースノードで動作するアプリケーションが、クラスタインターコネクト経由で通信しているとします。 この場合、たとえば、ノード 1 とノード 2 の通信にはインタフェース hme0 が、ノード 1 とノード 3 の通信にはインタフェース qfe1 がそれぞれ使用されます。 つまり、アプリケーションによる 2 ノード間の通信は 1 つのインターコネクトに制限されますが、内部のクラスタ通信はすべてのインターコネクト上にストライプ化されます。

インターコネクトはアプリケーションと内部のクラスタトラフィックによって共有されるため、アプリケーションから使用できる帯域幅の量は、他のクラスタトラフィックに使用される帯域幅の量に左右されます。 インターコネクトに障害が発生すると、内部トラフィックは残りのインターコネクト上にラウンドロビン方式で分散されますが、障害が発生したインターコネクト上のアプリケーションは動作しているインターコネクトに切り替えられます。

クラスタインターコネクトでは、2 つのタイプのアドレスがサポートされます。さらに、プライベートホスト名に対する gethostbyname(3N) では、通常 2 つの IP アドレスが返されます。 最初のアドレスを「論理 pairwise アドレス」と呼び、2 番目のアドレスを「論理 pernode アドレス」と呼びます。

個々のノードペアには、異なる論理 pairwise アドレスが割り当てられます。 この小規模な論理ネットワークでは、接続のフェイルオーバーがサポートされます。 さらに、各ノードには、固定した pernode アドレスが割り当てられます。 つまり、clusternode1-priv の論理 pairwise アドレスはノードごとに異なりますが、clusternode1-priv の論理 pernode アドレスは各ノードで同じです。 ただし、個々のノードが pairwise アドレスを自分で持っているわけではないため、ノード 1 で gethostbyname(clusternode1-priv) を実行しても、論理 pernode アドレスだけが返されます。

クラスタインターコネクト経由で接続を受け付け、セキュリティ目的で IP アドレスを検証するアプリケーションは、最初の IP アドレスだけではなく、gethostbyname から返ったすべての IP アドレスを検査する必要があります。

アプリケーション全体にわたって一貫した IP アドレスが必要な場合は、クライアント側でもサーバー側でもその pernode アドレスにバインドするようにアプリケーションを設定します。これによって、すべての接続にこの pernode アドレスが使用されます。