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

公司最近数据库升级到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 -x -m

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

#编辑rsyslog.conf 文件添加两行local3.*  和local0.*

vi /etc/rsyslog.conf
local7.* /var/log/boot.log
local3.* /var/log/haproxy.log
local0.* /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
user haproxy
group haproxy
daemon
#stats socket /var/lib/haproxy/stats
stats socket /var/run/haproxy.sock mode level admin
stats timeout 2m defaults
mode http
log 127.0.0.1: local3
option dontlognull
#option http-server-close
#option forwardfor except 127.0.0.0/
option redispatch
retries
timeout http-request 10s
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn listen stats
mode http
bind *:
stats enable
stats refresh 30s
stats uri /haproxyadminstats
stats realm HAProxy\ Statistics
stats auth admin:admin
stats admin if TRUE listen mssql :
mode tcp
balance roundrobin
server mssqldb1 10.11.10.36: weight maxconn check port inter rise fall
server mssqldb2 10.11.10.37: weight maxconn check port inter rise fall

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

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提供了一个后台管理界面

查看haproxy的日志

cat /var/log/haproxy.log


测试验证

使用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
user haproxy
group haproxy
daemon
#stats socket /var/lib/haproxy/stats
stats socket /var/run/haproxy.sock mode level admin
stats timeout 2m defaults
mode http
log global
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/
option redispatch
retries
timeout http-request 10s
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn listen stats
mode http
bind *:
stats enable
stats refresh 30s
stats uri /haproxyadminstats
stats realm HAProxy\ Statistics
stats auth admin:admin
stats admin if TRUE listen mssql :
mode tcp
balance roundrobin
server mssqldb1 10.11.10.36: weight maxconn check port inter rise fall
server mssqldb2 10.11.10.37: weight maxconn check port inter rise fall listen mssql2 :
mode tcp
balance leastconn
server mssqldb3 10.11.10.37: maxconn check port inter rise fall

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

本文版权归作者所有,未经作者同意不得转载。

利用HAProxy代理SQL Server的AlwaysOn辅助副本的更多相关文章

  1. 从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)

    这一篇是从0开始搭建SQL Server 2012 AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 操作步骤: 1.安装SQL server ...

  2. 服务器搭建域控与SQL Server的AlwaysOn环境过程(四)配置AlwaysOn

    0 引言 这一篇才真正开始搭建AlwaysOn,前三篇是为搭建AlwaysOn 做准备的. 步骤 1.3 配置AlwaysOn 请先使用本地用户Administrator登录这两个集群节点并执行下面的 ...

  3. 服务器搭建域控与SQL Server的AlwaysOn环境过程(三)配置故障转移

    0 引言 主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的. 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Windows Server20 ...

  4. SQL Server 2012 AlwaysOn集群配置指南

    1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...

  5. SQL SERVER 2012 AlwaysOn– 数据库层面 02

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

  6. 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)

    本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...

  7. SQL Server 2016 + AlwaysOn 无域集群

    目录 AlwaysOn 搭建 WSFC 配置计算机的 DNS 后缀 安装故障转移集群 验证集群 创建集群 创建文件共享见证 配置 AlwaysOn 新建可用性组 创建侦听器 可读副本的负载均衡 主角色 ...

  8. SQL Server的AlwaysOn错误19456和41158

    SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...

  9. 利用脚本修改SQL SERVER排序规则

    利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l  今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...

随机推荐

  1. Markdown 图片助手-MarkdownPicPicker

    title: Markdown 图片助手 v0.1 toc: true comments: true date: 2016-06-04 16:40:06 tags: [Python, Markdown ...

  2. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

  3. 阿里云直播 C# SDK 如何使用

    阿里云直播SDK的坑 1.直播云没有单独的SDK,直播部分被封装在CDN的相关SDK当中. 2.针对SDK,没有相关Demo. 3.针对SDK,没有相关的文档说明. 4.针对SDK的说明,官网上的说明 ...

  4. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  5. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  6. MFC中如何画带实心箭头的直线

    工作中遇到话流程图的项目,需要画带箭头的直线,经过摸索,解决:思路如下: (1) 两个点(p1,p2)确定一个直线,以直线的一个端点(假设p2)为原点,设定一个角度 (2)以P2为原点得到向量P2P1 ...

  7. 快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

    微信官方已经开放微信小程序的官方文档和开发者工具.前两天都是在看相关的新闻来了解小程序该如何开发,这两天官方的文档出来之后,赶紧翻看了几眼,重点了解了一下文档中框架与组件这两个部分,然后根据简易教程, ...

  8. 【转】 FineBI:自助式BI工具打造业务分析的“快与准”

    如今的企业经营方式,业务对于数据分析有极大的需求,但却苦于没有数据以及工具的有效支持,业务分析仍就依赖于IT报表制作.而IT方不断地按业务需求去调研.确认业务逻辑,然后取数做报表,其中还要忍受业务的需 ...

  9. 15个C++项目列表

    实验楼上有很多C++的实战项目,从简单到进阶,学习每个项目都可以掌握相应的知识点. 如果你还是C++新手的话,那么这个C++的项目列表你可以拿去练手实战开发,毕竟学编程动手实践是少不了的! 如果你不知 ...

  10. Java 中获取类路径 classpath 的方法

    System.out.println("++++++++++++++++++++++++"); String path = System.getProperty("jav ...