0

私の製品セットアップは、Tomcat 7.0 を実行する 2 つの物理サーバーと MySQL 5.6 を実行する 2 つの物理サーバーです。MySQL サーバーはマスター/レプリカ構成になっています。マスター用とレプリカ用の 2 つのデータベース接続プールを作成し、必要に応じてアプリケーション レベルでそれらを選択的に選択することは、大したことではありません。

これが微妙な点の多い複雑なトピックではないというふりをするつもりはありません。2 つの基本的な質問に分解してみましょう。

  1. 一般的に、マスターにのみ書き込み、レプリカからは読み取りのみを行いますか?

  2. レプリケーション ラグは予測できないため、書き込み後にすぐに読み取りが必要な場合、マスターから読み取ることはできますか?

よろしくお願いします -Hal50000

4

1 に答える 1

0

いくつかの調査の後、MySQL Connector/J で既に実装されているソリューションに戻りました。次のように、context.xml ファイルのリソースへのdriverClassName、およびリソース内でのかなり単純な変更:url

<Resource name="jdbc/my_db"
              auth="Container"
              type="javax.sql.DataSource"
              username="db_user"
              password="db_password"
              driverClassName="com.mysql.jdbc.ReplicationDriver"
              url="jdbc:mysql:replication://192.168.100.51:3306,192.168.100.52:3306/my_schema"
              maxActive="200"
              maxIdle="100"
              maxWait="20000"
              initialSize="20"
              removeAbandoned="true"
              removeAbandonedTimeout="60"
              logAbandoned="true"
            />

うまく動作します。URL の順序は master/replica/replica/... ですが、レプリカの数は異なります。次に、Connection インスタンスを、レプリカの 1 つからの読み取り用に setReadOnly(true) に設定するか、マスターからの読み取り用に setReadOnly(false) に設定できます。どうやらレプリカ間の負荷分散はドライバーによって処理されているようですが、レプリカが 1 つしかないため確認できません。

すべてドキュメントでよりよく説明されています: https://dev.mysql.com/doc/refman/5.6/en/connector-j-reference-replication-connection.html

于 2013-10-18T15:31:11.697 に答える