標籤:
前置條件
使用sqlserver的發布訂閱功能實現讀寫分離,並建立多個讀庫。
本文的負載平衡是針對多個讀庫而言的。
測試環境
vmware 10 64位
windows server 2008 R2
sql server 2008
centOS 6.6
haproxy 1.5
虛擬機器設定
(1)虛擬機器1:安裝centos, 並安裝HAProxy。ip為:172.16.1.1。作為負載平衡器。
(2)虛擬機器2:安裝windows server 2008 R2, 並安裝sql server 2008。ip為:172.16.1.2,作為資料庫伺服器1。
(3)虛擬機器3:複製虛擬機器2。ip為:172.16.1.6。作為資料庫伺服器2。
如:
haproxy配置
這裡最重要的是對haproxy進行配置,設定檔如下:
global maxconn 5120 chroot /usr/local/haproxy uid 99 gid 99 daemon quiet nbproc 2 pidfile /usr/local/haproxy/haproxy.pid defaults log global mode http option httplog option dontlognull log 127.0.0.1 local3 retries 3 option redispatch maxconn 2000 contimeout 50000 clitimeout 50000 srvtimeout 50000 listen mssql :1433 mode tcp balance roundrobin server mssql1 172.16.1.2:1433 check weight 1 check server mssql2 172.16.1.6:1433 check weight 1 check listen stats :8888 mode http transparent stats uri / haproxy-stats stats realm Haproxy \ statistic
測試
(1) 建立一個測試表:
CREATE TABLE [dbo].[table1]( [f1] [nchar](10) NULL) ON [PRIMARY]
(2)為了看到負載平衡的結果,請將兩個讀庫中table1表的資料設定為不一樣
(3)串連至172.16.1.1(負載平衡器),使用以下查詢語句進行查詢。
SELECT TOP 1000 [f1] FROM [test1].[dbo].[table1]
需要在每次查詢前先中斷連線,然後再建立與sql server的串連,如所示:
特別說明:
(1)若是不重建立立串連的話,則每次得到的結果是一樣的,因為sqlserver的用戶端採用了資料庫連接池技術,在沒有主動地關閉的情況下,TCP串連會一直被保持著。
(2)中斷連線之後,再重新串連一次的話,則得到的結果是不一樣的。
本文的介紹的方法僅在測試環境中通過,尚未在正式環境中使用。
haproxy的安裝請見:
http://www.cnblogs.com/dehai/p/4885016.html
使用HAProxy實現sql server讀庫的負載平衡