文档章节

利用HAProxy代理SQL Server的AlwaysOn辅助副本

lyhabc
 lyhabc
发布于 2016/09/05 14:36
字数 1125
阅读 13
收藏 1

公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群

机房内有三套程序需要读取数据库

第一套:主程序,读写数据库,连接主副本

第二套:报表程序,读报表,连接辅助副本

第三套:历史库程序,读历史库,连接辅助副本

 

软件环境

机器环境

 

架构图

为什麽需要使用HAProxy?

之前机房里面有2000个终端,这些终端是一个很小的嵌入式设备,第二套报表程序原来是使用直连数据库IP(10.11.10.36)来连接数据库

但这样有一个弊端,当36这台辅助副本宕机,那么报表程序就瘫痪了,因为2000个终端要更改数据库连接需要烧写程序到终端里面非常耗费时间

可能要几天时间

 

最后决定使用HAProxy做负载均衡和TCP连接重定向

使用HAProxy有几个好处

1、前端不需要后端数据库的实际IP,当需要升级后端数据库,比如打补丁的时候特别方便

2、HAProxy能够自动检测后端数据库服务,探测1433端口是否存活,如果1433端口出问题,能够自动重定向连接到37这台辅助副本

3、减轻单台读库压力,使用RR轮询算法,请求均衡分发到36和37这两台辅助副本,减轻36这台机器的压力

 

 

HAProxy相关配置步骤

 

#yum安装,版本是1.5.4

yum install -y haproxy.x86_64

 

 

#编辑rsyslog 文件,修改为-c 2 -r

vi /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r"

 


#编辑rsyslog.conf 文件添加一行local2.*

vi /etc/rsyslog.conf
local7.* /var/log/boot.log

local2.* /var/log/haproxy.log

 

#重启rsyslog服务

service rsyslog restart

 

 


# 编辑haproxy配置文件 下面以mssql从库负载均衡为例

vi /etc/haproxy/haproxy.cfg

global
log 127.0.0.1 local2 
chroot /var/lib/haproxy 
pidfile /var/run/haproxy.pid 
maxconn 6000 
user haproxy 
group haproxy 
daemon 
stats socket /var/lib/haproxy/stats


defaults 
mode http 
log global 
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3 
timeout http-request 10s 
timeout connect 10s 
timeout client 1m 
timeout server 1m 
timeout http-keep-alive 10s
timeout check 10s
maxconn 6000

 

 

listen stats 
mode http
bind *:2080
stats enable
stats refresh 30s
stats uri /haproxyadminstats
stats realm HAProxy\ Statistics
stats auth admin:admin
stats admin if TRUE


listen mssql :1433
mode tcp
balance roundrobin
server mssqldb1 10.11.10.36:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2
server mssqldb2 10.11.10.37:1433 weight 1 maxconn 6000 check port 1433 inter 2000 rise 2 fall 2

 

 



#检查配置文件是否有语法错误

haproxy -f /etc/haproxy/haproxy.cfg -c
Configuration file is valid

 


#启动haproxy

/etc/init.d/haproxy start

 

 

#检查haproxy是否在监听

netstat -lntp

 

注意:Centos机器只需要使用一个网口,不需要额外增加网口


#打开后台管理界面
http://10.11.30.47:2080/haproxyadminstats

 

HAProxy提供了一个后台管理界面

 

 

测试验证

使用SSMS2016来连接HAProxy的IP

10.11.10.39

现在是连接到GZC-SQL03这台机

 

现在把 GZC-SQL03这台机的SQL服务停了

HAProxy已经探测到 GZC-SQL03这台机的SQL服务停了

 再次点击一下执行按钮,可以发现已经重定向到 GZC-SQL02这台机

 

 

虽然经过HAProxy这一层,但是性能方面也不算太差

 

HAProxy的通信方式

通信方式类似于LVS的NAT模式

LVS的NAT模式(调度器将请求的目标ip即vip地址改为Real server的ip, 返回的数据包也经过调度器,调度器再把源地址修改为vip)

 

 

总结

线上环境使用HAProxy已经差不多1个月,到现在没有出现过问题,比较稳定

对于HAProxy原理上的东西这里就不叙述了,网上有很多资料

 

参考文章:

http://www.cnblogs.com/dehai/p/4885021.html

 

如果是每个业务使用不同端口,可以使用下面的配置文件

比如报表使用1433端口,BI抽取数据使用2433端口

vi /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local2 
    chroot      /var/lib/haproxy       
    pidfile     /var/run/haproxy.pid     
    maxconn     6000                               
    user        haproxy           
    group       haproxy           
    daemon                     
    stats socket /var/lib/haproxy/stats     


defaults         
    mode                    http               
    log                     global                         
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3                 
    timeout http-request    10s        
    timeout connect         10s               
    timeout client          1m                 
    timeout server          1m                 
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 6000               





listen stats     
    mode http
    bind *:2080
    stats enable
    stats refresh 30s
    stats uri   /haproxyadminstats
    stats realm  HAProxy\ Statistics
    stats auth   admin:admin
    stats admin if TRUE
    
    
listen mssql :1433
    mode tcp
    balance roundrobin
    server mssqldb1 10.11.10.36:1433  weight 1 maxconn 6000 check port 1433 inter 2000  rise 2 fall 2
    server mssqldb2 10.11.10.37:1433  weight 1 maxconn 6000 check port 1433 inter 2000  rise 2 fall 2
    
    
listen mssql2 :2433
    mode tcp
    balance leastconn
    server mssqldb3 10.11.10.37:1433   maxconn 6000 check port 1433 inter 2000  rise 2 fall 2

 

© 著作权归作者所有

lyhabc
粉丝 1
博文 1
码字总数 1125
作品 0
佛山
数据库管理员
私信 提问
负载均衡工具haproxy安装,配置,使用

一,什么是haproxy HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点...

晨曦之光
2012/03/09
181
1
请问通过haproxy获取客户端的端口号,而非代理端口号!

现在项目中要求获取客户端请求的端口,但应用部署是通过haproxy代理分发到服务端,在服务端java程序request.getRemotePort(),获取到的是代理上的端口。请教各位,如何通过配置haproxy.cfg或...

回媚一笑万夫倒
2013/05/07
1K
2
基于keepalived的Haproxy高可用配置

一、概述: HAProxy是一个用于4层或7层的高性能负载均衡软件,在大型网站的大型Web服务器群集中,HAProxy可用来替代专业的硬件负载均衡设备,节省大量的开支。 通常情况下,为了避免整个体系...

OutManLinux
2018/07/01
0
0
haproxy+mysql实现代理mysql

我们通常会碰到这样的业务场景: b主机和c数据库在同一个内网,a主机不能直接访问c数据库,我们可以通过在b主机上搭建代理让a访问c数据库,我们使用haproxy来干这个事情 centos7环境 mysql自...

小白的希望
2018/06/28
0
0
理解OpenShift(1):网络之 Router 和 Route

理解OpenShift(1):网络之Router 和 Route 1. OpenShift 为什么需要 Router 和 Route? 顾名思义,Router 是路由器,Route 是路由器中配置的路由。OpenShift 中的这两个概念是为了解决从集...

SammyLiu
2018/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
1
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
2
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
2
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部