Mysql-JDBC構成LoadBalanceプロトコル

4457 ワード

Mysql-JDBCは長い間、MySqlクラスタ、マルチプライマリReplicationの導入でリード/ライト負荷を配布する有効な手段を提供してきました.mysql-jdbc 5.1.3以来、サービスを停止せずにloadBalance接続を動的に構成することができ、プロセス中のトランザクションが失われず、インスタンスに異常は発生しません.loadBalanceの構成プロトコルは次のとおりです.
jdbc:mysql:loadbalance://[host1][:port],[host2][:port][,[host3][:port]]...[/[database]] »
[?propertyName1=propertyValue1[&propertyName2=propertyValue2]...]

この機能には、2つの構成プロパティがあります.
  • loadBalanceConnectionGroup:同じソースからグループ接続を行う能力を提供し、同じクラスのローダで選択したデータソースをロードします.同じ構成を持っていて、論理的なリース管理をしたい場合は、名前を統一します.これは管理の鍵です.loadBalanceConnectionGroupに名前を付けなければ、これらのリンクを管理できません.すべてのloadBalance接続は同じグループの値を共有し、アプリケーションがどのように作成しても統一的に管理されます.
  • loadBalanceEnableJMX:loadBalanceConnectionGroupを定義すると、接続を管理する能力が露出します.外部管理を通じてJMXを通じて属性がtrueである場合は、JMX管理と接続グループを監視する能力が開きます.それ以外は、-DCを使用します.sun.management.jmxremoteというパラメータはプロジェクトを起動し、jconsoleなどのJMXツールを使用して、操作管理接続を実行することができます.

  • 接続が正しい接続プロパティとして使用されると、一連の監視プロパティが使用できます.
  • Current active host count. 現在の生存ホスト数
  • Current active physical connection count. 現在の生存物理接続数
  • Current active logical connection count. 現在の生存論理接続数
  • Total logical connections created. 合計作成された論理接続数
  • Total transaction count. 合計トランザクション数
  • 以下の管理操作も実行できます.
  • Add host. クラスタにマシン
  • を追加する
  • Remove host. クラスタからマシン
  • を除去する.
    JMXインタフェース:com.mysql.jdbc.jmx.LoadBalance ConnectionGroupManagerMBeanには、次の方法があります.
  • int getActiveHostCount(String group);
  • int getTotalHostCount(String group);
  • long getTotalLogicalConnectionCount(String group);
  • long getActiveLogicalConnectionCount(String group);
  • long getActivePhysicalConnectionCount(String group);
  • long getTotalPhysicalConnectionCount(String group);
  • long getTotalTransactionCount(String group);
  • void removeHost(String group, String host) throws SQLException;
  • void stopNewConnectionsToHost(String group, String host) throws SQLException;
  • void addHost(String group, String host, boolean forExisting);
  • String getActiveHostsList(String group);
  • String getRegisteredConnectionGroups(); getRegisteredConnectionGroup()クラスのロード時に定義されたすべての接続グループ名を返すには、次のコードを使用して接続をテストします.
  • public class Test {
    
        private static String URL = "jdbc:mysql:loadbalance://" +
            "localhost:3306,localhost:3310/test?" +
            "loadBalanceConnectionGroup=first&loadBalanceEnableJMX=true";
    
        public static void main(String[] args) throws Exception {
            new Thread(new Repeater()).start();
            new Thread(new Repeater()).start();
            new Thread(new Repeater()).start();
        }
    
        static Connection getNewConnection() throws SQLException, ClassNotFoundException {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection(URL, "root", "");
        }
    
        static void executeSimpleTransaction(Connection c, int conn, int trans){
            try {
                c.setAutoCommit(false);
                Statement s = c.createStatement();
                s.executeQuery("SELECT SLEEP(1) /* Connection: " + conn + ", transaction: " + trans + " */");
                c.commit();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        public static class Repeater implements Runnable {
            public void run() {
                for(int i=0; i < 100; i++){
                    try {
                        Connection c = getNewConnection();
                        for(int j=0; j < 10; j++){
                            executeSimpleTransaction(c, i, j);
                            Thread.sleep(Math.round(100 * Math.random()));
                        }
                        c.close();
                        Thread.sleep(100);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    

    コンパイル後、アプリケーションは-DCを使用することができる.sun.management.jmxremoteというパラメータが起動し、リモート管理jconsoleが有効になることを確認し、テストの主な方法がjconsoleにリストされ、thisを選択します.スタンドアロン接続、comが表示されます.mysql.jdbc.jmx.LoadBalanceConnectionGroupManagerというbeanは、変数オプションをクリックして結果セットを確認することができます.さらに3309でmysqlインスタンスを追加して実行すると、jconsoleでConnector/JがaddHost()を使用して追加されたことを確認できます.これらの操作はサービスを停止する必要がなく、動的に変更されていることを覚えておいてください.loadbalanceとfailoverのメカニズムをさらに表示するには、次の手順に従います.https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-usagenotes-j2ee-concepts-load-balancing-failover.html