使用HAProxy實現sql server讀庫的負載均衡


前置條件

使用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM