簡體   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