使用HAProxy实现sql server读库的负载均衡

前置条件html

使用sqlserver的发布订阅功能实现读写分离,并建立多个读库。redis

本文的负载均衡是针对多个读库而言的。sql

 

测试环境数据库

vmware 10 64位windows

windows server 2008 R2centos

sql server 2008服务器

centOS 6.6负载均衡

haproxy 1.5tcp

 

虚拟机配置sqlserver

(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

相关文章
相关标签/搜索