前置條件
使用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
