标签:
前置条件
使用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
标签:
原文地址:http://www.cnblogs.com/dehai/p/4885021.html