いくつかの調査の後、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