gpt4 book ai didi

mysql - jdbc mysql 负载均衡

转载 作者:行者123 更新时间:2023-11-30 23:25:09 25 4
gpt4 key购买 nike

我正在尝试通过 jdbc mysql 驱动程序连接到 mysql 集群,该驱动程序包装在来自 dbcp 的 basicDatasource 中。

这是我的 bean 配置:

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:loadbalance://slave1:3306,slave2:3306/mobile_detection"/>
<property name="username" value="username"/>
<property name="password" value=""/>
<property name="initialSize" value="10" />
<property name="maxActive" value="100" />
<property name="maxIdle" value="50" />
<property name="minIdle" value="10" />
</bean>

在我的 mysql 日志文件中,我看到两个服务器都在服务器启动时收到连接请求,但只有第一个 slave1 收到 READ 查询。 slave2 仅在 slave1 宕机时用作故障转移。

我是否缺少让负载平衡选项正常工作的东西?

最佳答案

显然,您需要注意很多事情。

首先,您需要确保您永远不会指定负载平衡策略,不确定它来自哪里,否则它不起作用。

其次,默认情况下,DBCP 仅从一个连接开始,并在极端需要时创建其他连接。这意味着你将只有一个连接与一个 MySQL 主机相关联,并且一直被重用(特别是如果你的事务很小)并且所有流量都集中在那里。您可以通过指定更大的初始池大小来解决这个问题——这将创建到每个服务器的多个连接。我个人在 3 个服务器之间进行负载平衡,并使用 36 个连接的固定池。只有这样 DBCP 才会尝试公平地获取与不同 MySQL 主机关联的连接。如果您只指定 3 个连接,则连接可能会负载均衡到单个主机,并且您最终仍然会得到不公平的分配。我的猜测是,如果他们修复了 roundRobin 策略,这会很好地工作,但现在它对我不起作用。

请记住,DBCP 对连接池中的连接进行负载平衡,并且它们会存在很长时间(或永远存在)。无论你最初得到什么任务,它都会保持这种状态。池不是动态负载平衡的好主意。 MySql J Connection 在不重新启动的情况下添加新 MySQL 主机的 JMX bean 将无法很好地工作。

关于mysql - jdbc mysql 负载均衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13727434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com