利用HAProxy代理SQL Server的AlwaysOn辅助副本
利用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辅助副本的更多相关文章
- 从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
这一篇是从0开始搭建SQL Server 2012 AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 操作步骤: 1.安装SQL server ...
- 服务器搭建域控与SQL Server的AlwaysOn环境过程(四)配置AlwaysOn
0 引言 这一篇才真正开始搭建AlwaysOn,前三篇是为搭建AlwaysOn 做准备的. 步骤 1.3 配置AlwaysOn 请先使用本地用户Administrator登录这两个集群节点并执行下面的 ...
- 服务器搭建域控与SQL Server的AlwaysOn环境过程(三)配置故障转移
0 引言 主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的. 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Windows Server20 ...
- SQL Server 2012 AlwaysOn集群配置指南
1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...
- SQL SERVER 2012 AlwaysOn– 数据库层面 02
搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...
- SQL Server 2016 + AlwaysOn 无域集群
目录 AlwaysOn 搭建 WSFC 配置计算机的 DNS 后缀 安装故障转移集群 验证集群 创建集群 创建文件共享见证 配置 AlwaysOn 新建可用性组 创建侦听器 可读副本的负载均衡 主角色 ...
- SQL Server的AlwaysOn错误19456和41158
SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...
- 利用脚本修改SQL SERVER排序规则
利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l 今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...
随机推荐
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- nginx+php的使用
原文来自:windows下配置nginx+php环境 按照他的步骤走,亲测可用! 但是这里他后面说的根目录可能有些人有点懵. 其实在设置的时候就设置了: 网站根目录就是www这个目录,如果没创建请自行 ...
- Java获取本机的IP与MAC地址
有些机器有许多虚拟的网卡,获取IP地址时会出现一些意外,所以需要一些验证: // 获取mac地址 public static String getMacAddress() { try { Enumer ...
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- 听H3絮叨:何以让天下没有难用的流程
最近朋友圈.网站新闻铺天盖地是"让天下没有难用的流程",有人就要问了,H3 BPM何德何能,为BPM站台,让天下没有难用的流程? 这是一个关于"办公室空想"的故 ...
- ubuntu安装ANSYS17.2全过程
本次介绍在Ubuntu kylin1604下安装Ansys 17.2的全部过程. 1 安装文件准备 关于ANSYS的软件安装文件,在网络上可以找到.这里采用SSQ版本的安装文件,如图所示,包含一个名为 ...
- Github使(zhuang)用(bi)指南
本文针对未能熟练使用GitHub的人员,旨在为其指明通往新世界的小路. 一些闲话可以无视 在这个开源的时代,可能你听说过GitHub,知道大概是个什么.但是,你要是不能熟练的玩起来,怎么和大神取经,怎 ...
- Centos 6.6 下搭建php5.2.17+Zend Optimizer3.3.9+Jexus环境
(为何安装php5.2.17这个版本 因为phpweb这个程序用到了Zend Optimizer3.3.9 这个东东已经停止更新了 最高支持5.2版本的php 所以就有了一晚上填坑的自己和总结了这篇文 ...
- RavenDB官网文档翻译系列第二
索引>查询>处理文档关联 处理文档关联 RavenDB坚持的一个设计原则就是文档是独立的,这就是说处理一个文档所需的所有数据都存储在文档本身之中.然而,这不是说对象之间不应存在联系. 在许 ...
- WCF : 如何将NetTcpBinding寄宿在IIS7上
摘要 : 从IIS 7 开始, IIS增加了对非HTTP协议的支持. 因此, 自IIS 7之后, 可以将NetTcpBinding等非HTTP协议的Bindings直接寄宿在IIS上面. 本文将介绍如 ...