1

それぞれ 2 つの appserver を持つ 2 つのノードで構成される websphere 6.1 クラスター環境があります。NodeA including Server1(2809) & Server2(2810)、と呼びましょうNodeB including Server3(2811) & Server4(2812)。一方、 JNDI を使用してクラスタースコープのデータソースを作成しましたlocal_db

現在、上記の環境から WAS ORB 呼び出しを介して Java クライアントでデータベース接続を取得したいと考えています。Java コードの特定の部分は次のようになります。

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
        env.put(Context.PROVIDER_URL,"iiop://localhost:2809");  

        javax.sql.DataSource ds = (DataSource)initialContext.lookup("local_db");

        Connection cn = ds.getConnection();
  1. 上記の Java クライアント コードが実行された場合、データベース接続取得要求は、すべてのアプリケーション サーバーの 4 つの接続プール間で負荷分散規則に従いますか?

  2. さらに、Java クライアントが 1 つのデータベース接続を正常に取得し、大量の結果が返される大きな SQL クエリを実行した場合、メモリ領域の占有に関しては、どの WAS アプリケーション サーバーが処理するのでしょうか? 上記で使用されたポート 2809 またはデータベース接続を返すターゲット サーバーのため、server1のみですか?

  3. ところで、 のように 2 つのサーバー メンバーを配置した場合PROVIDER_URLiiop://localhost:2809, localhost:2810それは負荷分散またはフェールオーバーを意味しますか?

    私が間違って理解している場合は、説明と修正を手伝ってください!

ありがとう

4

2 に答える 2

1

簡単なものから始めて、残りの部分に進みましょう

  1. プロバイダー URL が 2 つあるということは、フェールオーバーを意味します。最初のネーム サーバーに接続できない場合は、2 番目のネーム サーバーに接続し、そのリストの最後まで続行します。フェールオーバーはネーミング サーバーへの接続用であることに注意してください (リソース自体ではありません)。

検索は、接続先のサーバーで行われます。local_db は、そのサーバー上のデータソース (およびその接続プール) を表します。(その NS に接続しているため) server1 で作業し、そのサーバーでホストされているデータソースから接続を取得します。

他のサーバーからの接続は得られません。つまり、負荷分散は行われません (1 つの要求はサーバー 1 からの接続を使用し、別の要求はサーバー 2 からの接続を使用するなど)。これが、上記の質問での負荷分散の意味だと思います。

HTH

于 2012-08-28T23:56:53.620 に答える
0

ADataSourceは、リモート化もシリアル化もできません。local_dbしたがって、サーバーから検索すると、クライアントがサーバー上のインスタンスと同じ構成で新しいjavax.naming.Referenceインスタンスを作成するために使用するが返されます。これは、ルックアップが実行されると、JDBCメソッドがWebSphereサーバーに要求を送信しないことも意味します。 DataSource

于 2012-08-29T11:41:54.500 に答える