10bet网址
连接器和api手册
下载本手册

3.8.3配置连接器/J的负载分担

Connector/J长期以来为集群或源-源复制部署提供了在多个MySQL服务器实例间分配读/写负载的有效方法。您可以动态配置负载平衡连接,而不会出现服务中断。进程内事务不会丢失,如果任何应用程序试图使用特定的服务器实例,也不会生成应用程序异常。

负载平衡是在服务器连接的初始设置阶段通过以下连接URL配置的,其格式与用于MySQL连接的通用JDBC URL,而是一个专门的方案:

jdbc: mysql: loadbalance: / /宿主1] [:港口]、[宿主2] [:港口] [[宿主3] [:港口]]……[/数据库]] [?]propertyName1propertyValue1[&propertyName2propertyValue2]…]

有两个配置属性与此功能相关:

  • loadBalanceConnectionGroup-这提供了对来自不同源的连接进行分组的能力。这允许您以选择的任何组合在单个类装入器中管理这些JDBC源。如果它们使用相同的配置,并且您希望将它们作为一个逻辑上的单个组来管理,则给它们指定相同的名称。这是管理的关键属性:如果您没有定义名称(字符串)loadBalanceConnectionGroup,则无法管理连接。所有负载平衡连接共享相同loadBalanceConnectionGroup值,无论应用程序如何创建它们,都将一起管理。

  • ha.enableJMX—定义连接时,暴露了管理连接的能力loadBalanceConnectionGroup;但是如果您想在外部管理它,可以通过将此属性设置为来启用JMX真正的.这就启用了JMX实现,它公开了连接组的管理和监视操作。方法启动应用程序-Dcom.sun.management.jmxremoteJVM国旗。然后,您可以使用JMX客户机执行连接和操作,例如jconsole

使用正确的连接属性建立连接后,可以使用以下几个监视属性:

  • 当前活动主机的数量。

  • 当前活动物理连接数。

  • 当前活动逻辑连接数。

  • 创建的逻辑连接总数。

  • 交易总数。

还可以执行以下管理操作:

  • 添加主机。

  • 删除主机。

JMX接口,com.mysql.cj.jdbc.jmx.LoadBalanceConnectionGroupManagerMBean,有以下方法:

  • int getActiveHostCount(String group);

  • int getTotalHostCount(String group);

  • getTotalLogicalConnectionCount(String group);

  • getActiveLogicalConnectionCount(String group);

  • getActivePhysicalConnectionCount(String group);

  • getTotalPhysicalConnectionCount(String group);

  • getTotalTransactionCount(String group);

  • 抛出SQLException异常

  • (String组,String主机)抛出SQLException;

  • null addHost(String组,String主机,boolean值);

  • getActiveHostsList(String group);

  • 字符串getRegisteredConnectionGroups ();

getRegisteredConnectionGroups ()方法返回该类装入器中定义的所有连接组的名称。

你可以用下面的代码测试这个设置:

public class Test {private static String URL = "jdbc:mysql:loadbalance://" + "localhost:3306,localhost:3310/ Test ?"+“loadBalanceConnectionGroup = first&ha.enableJMX = true”;public static void main(String[] args)抛出异常{new Thread(new Repeater()).start();new Thread(new Repeater()).start();new Thread(new Repeater()).start();} static Connection getNewConnection()抛出SQLException, ClassNotFoundException {Class.forName("com.mysql.cj.jdbc.Driver");DriverManager返回。getConnection(URL, "root", "");}静态无效executeSimpleTransaction(连接c, int conn, int trans){尝试{c. setautocommit (false);语句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(); } } } } }

编译后,应用程序可以使用-Dcom.sun.management.jmxremote标志,启用远程管理。jconsole然后可以启动。的测试主类将由列出jconsole.选择这个,然后单击连接.然后可以导航到com.mysql.cj.jdbc.jmx.LoadBalanceConnectionGroupManagerbean。此时,您可以单击各种操作并检查返回的结果。

如果现在在端口3309上运行了一个额外的MySQL实例,可以通过使用addHost (),暴露在jconsole.注意,这些操作可以动态执行,而不必停止应用程序的运行。

有关负载平衡和故障转移组合的更多信息,请参见第3.8.5节,高级负载均衡和故障转移配置

配置DNS SRV负载分担

看到3.5.14节“对DNS SRV记录的支持”获取详细信息。