[英]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&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.