2012-12-05 29 views
1

我想通過從dbcp中的basicDatasource中包裝的jdbc mysql驅動程序連接到mysql集羣。Jdbc mysql loadbalancing

這裏是我的豆配置:

<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查詢。如果slave1處於關閉狀態,則slave2僅用作故障轉移。

我錯過了一些讓負載平衡選項正常工作?

回答

0

有很多事情你需要注意明顯。

首先,您需要確保您永遠不會指定負載均衡策略,不確定其來源,但它不起作用。其次,默認情況下,DBCP從只有一個連接開始,並根據極端需求創建其他連接。這意味着你將只有一個與只有一臺MySQL主機被重複使用的連接(特別是如果你的交易量很小),並且所有的流量都集中在那裏。您可以通過指定較大的初始池大小來實現這一點 - 這將創建到每個服務器的多個連接。我個人負載均衡3臺服務器,並使用固定的36個連接池。只有這樣,DBCP纔會盡力在不同的MySQL主機上建立連接。如果您只指定3個連接,則有可能連接將負載平衡到單個主機,並且您仍然以不公平的分配結束。我的猜測是,如果他們修復roundRobin策略,這將工作得很好,但現在它不適用於我。

請記住,DBCP負載均衡池中的連接,並且它們活得很長時間(或永遠)。無論你最初得到什麼任務,它都會保持這種狀態。池不是動態負載平衡的好主意。 MySql J Connection提供的用於添加新MySQL主機而不重新啓動的JMX bean將無法很好地工作。