sql server 中間件支持讀寫分離

    通過一段時間艱苦的奮鬥,終於把sql server的讀寫分離搞定了。你們能夠下載oneproxy-for-sqlserver來使用此功能。更多消息,能夠訪問平民軟件官網獲取。或者加入羣 數據庫監控 521095285,或者關注oneproxy-monitor框架項目(oneproxy-for-sqlserver是在此項目下開發的,會同步更新此框架)git

    下面說說oneproxy-for-sqlserver讀寫分離的使用方法和開發中遇到的有趣問題。sql

一. 使用方法

爲了支持讀寫分離,須要修改[oneproxy]標籤的數據和增長[database_xxx]標籤的數據以及數據庫組的信息。詳細以下所示:數據庫

1) 在[oneproxy]標籤下面增長:passwordseparate = true和readslave=true。增長後的配置以下所示:session

[oneproxy]
logfile = oneproxy_log.log
pidfile = oneproxy_pid.pid
listen_addr = 0.0.0.0
listen_port = 9999,7777,6666
httpserver_addr = 0.0.0.0
httpserver_port = 8080
log_level = error
data_dump = false
log_sql = false
clientusername = admin
clientpassword = 0000
passwordseparate = true
readSlave = true

須要注意的是:框架

1)若是不配置,默認狀況下這兩個選項也是爲true。sqlserver

2)若是readSlave爲true,則必須配置passwordseparate爲true。spa

若是不想使用密碼分離功能,則一樣也不能使用讀寫分離功能。.net

2) 在數據庫配置組標籤[sqlserver_9999]下面增長主數據庫和從數據庫的信息,好比:code

[database_1433]
host = 127.0.0.1
port = 1433
username = sa
password = 0000

[database_1434]
host = 127.0.0.1
port = 1434
username = sa
password = 0000

[sqlserver_9999]
dbmastergroup = database_1433
dbslavegroup = database_1434
classname = SSProtocol
frontport = 0

須要注意點:server

1)數據庫的信息必須放置在[database_xxx]標籤下面。這個標籤必須以database開頭。

2)數據庫組信息放到其餘名稱的標籤(不能是[oneproxy]和[database_xxx]的標籤)下,如上配置中的[sqlserver_9999]標籤。

3)主數據庫配置在dbmastergroup上,從數據庫配置在dbslavegroup上。

4)容許不存在從數據庫,若是沒有從數據庫,則讀寫分離的功能被禁止。

完成上面的配置後,直接啓動程序便可。

二. 讀寫分離效果

1)事務中的操做所有在主數據庫執行

2)非事務中的select語句在從數據庫執行(無論是statement下的仍是preparedstatement下的)

三. 讀寫分離的故事

在開發讀寫分離的過程當中,遇到不少問題。好比:

1) 當在同一個session中,從不一樣數據庫獲得的spid可能不一樣,則須要根據發送到不一樣的數據庫重寫spid。

2) 怎麼透明的處理遊標和prepared句柄。

3) 在事務中怎麼處理非事務中建立的statement或者preparedstatement.

4) 怎麼處理在事務中建立的statement和preparedstatement在非事務中使用的問題。

5)怎麼處理包中的事務描述符等數據。

在開發的過程當中,遇到因爲沒有重寫事務描述符,致使一直提示不能新開始一個事務的異常。針對這個問題,我研究了很長時間,同時直連和讀寫分離的包數據的比較查找數據包的差別點,以及讀MSDN文檔等衆多艱苦的過程。終於明白了處理方法。

四,關注方式

1)數據庫監控 521095285

2)平民軟件官網

3)oneproxy-monitor項目

相關文章
相關標籤/搜索