繁体   English   中英

Mysql ReplicationDriver-故障处理

[英]Mysql ReplicationDriver - failure handling

我有一个MySql Master / Slave复制问题,谷歌似乎无法回答。 使用com.mysql.jdbc.ReplicationDriver时,驱动程序如何处理只读副本上的故障? 它是否将它们列入黑名单,是否尝试继续尝试它们并每次(在配置了任何超时之后)都抛出异常? 从我的测试看来,当我杀死一个只读副本时,我的应用程序刚刚挂起。 我正在使用tomcat,这是我的context.xml。

<Resource auth="Container" 
        driverClassName="com.mysql.jdbc.ReplicationDriver" 
        defaultAutoCommit="false"
        initialSize="10" 
        minIdle="5"
        logAbandoned="false"
        maxIdle="10" 
        maxWait="10000" 
        name="jdbc/db" 
        removeAbandoned="true" 
        testOnBorrow="true"  
        removeAbandonedTimeout="86400"
        testWhileIdle="true" 
        type="javax.sql.DataSource" 
        factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
        username="powerptc" 
        password="password"   
        url="jdbc:mysql:replication://localhost:3306,host1,host2:3306/db?allowSlavesDownConnections=true&amp;readFromMasterWhenNoSlaves=true" 
        validationQuery="/* ping */ SELECT 1"
        validationQueryTimeout="5" />

有没有办法让驱动程序将失败的只读副本列入黑名单(持续x分钟),而不是一次又一次地重试它?

在这种情况下,MySQL驱动程序将LoadBalanced驱动程序用于从属,并仅当从LoadBalanced从属群集选择连接失败时才切换到主驱动程序 应用程序挂起,因为retriesAllDown = 120默认值为retriesAllDown = 120 如果您将retriesAllDown = 4设置retriesAllDown = 4 ,那么负载平衡器将在进入主机之前休眠4次,持续250毫秒

默认情况下, loadBalanceBlacklistTimeout = 0 ,这意味着从站的负载平衡器不使用黑名单。 即使将loadBalanceBlacklistTimeout > 0设置loadBalanceBlacklistTimeout > 0 ,它也无济于事,因为黑名单的实现很奇怪,如果将所有主机都添加到黑名单,则黑名单是空的。 但是您可以使用下一个技巧:使用ServerAffinityStrategy并将主主机名放入从属列表,但仅将从属服务器设置为相似性服务器。

我的工作网址是:

jdbc:mysql:replication://master:3306,slave1,slave2:3306/db?allowSlaveDownConnections=true&readFromMasterWhenNoSlaves=true&loadBalanceBlacklistTimeout=30000&retriesAllDown=4&loadBalanceStrategy=serverAffinity&serverAffinityOrder=slave1,slave2

结果,仅当没有可用的从属设备时才使用主设备

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM