运用HAProxy代理SQL Server的AlwaysOn协助副本

运用HAProxy代理SQL Server的AlwaysOn协助副本

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

信用合作社近年来数据库升级到SQL Server201四 ,并安排了alwayson高可用集群

机房内有3套程序供给读取数据库

先是套:主程序,读写数据库,连接主副本

第3套:报表程序,读报表,连接协理副本

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

 

软件条件

图片 1

机械环境

图片 2

 

架构图

图片 3

为什麽必要采用HAProxy?

事先机房里面有三千个极端,这一个极端是二个相当的小的嵌入式设备,第3套报表程序原来是应用直连数据库IP(十.1一.十.3陆)来再三再四数据库

但那样有二个害处,当3陆那台协理副本宕机,那么报表程序就瘫痪了,因为两千个极端要改成数据库连接须要烧写程序到极限里面特别耗时

莫不要几天时间

 

末段决定动用HAProxy做负载均衡和TCP连接重定向

选用HAProxy有多少个便宜

一、前端不须要后端数据库的骨子里IP,当需求进步后端数据库,比如打补丁的时候尤其福利

二、HAProxy能够自动物检疫查测试后端数据库服务,探测143三端口是不是存活,假若143三端口出标题,能够活动重定向连接到3七那台支持副本

叁、减轻单台读库压力,使用GL450哈弗轮询算法,请求均衡分发到3六和3柒那两台协理副本,减轻3陆这台机器的下压力

图片 4

 

 


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 6000 
user haproxy 
group haproxy 
daemon 
#stats socket /var/lib/haproxy/stats     
stats socket /var/run/haproxy.sock mode 666 level admin
stats timeout 2m


defaults 
mode http 
log                 127.0.0.1:514       local3                     
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机器只须要选择二个网口,不需求相当扩大网口

图片 5

#打开后台管理界面

 

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

图片 6

 

查看haproxy的日志

cat /var/log/haproxy.log

图片 7


测试注解

使用SSMS2016来连接HAProxy的IP

10.11.10.39

图片 8

今昔是接连到GZC-SQL03这台机

 

近日把 GZC-SQL0三那台机的SQL服务停了

图片 9

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

图片 10

 再一次点击一下实施按钮,能够发现早已重定向到 GZC-SQL0二那台机

图片 11

 

 

就算通过HAProxy那一层,可是品质方面也不算太差

图片 12


 

HAProxy的通讯方式

通讯情势接近于LVS的NAT情势

LVS的NAT形式(调度器将呼吁的靶子ip即vip地址改为Real server的ip,
再次来到的多寡包也透过调度器,调度器再把源地址修改为vip)

图片 13

图片 14

 

 


总结

线上环境使用HAProxy已经基本上二个月,到近来并未有出现过难点,比较稳定

对此HAProxy原理上的事物那里就不叙述了,网上有许多资料

 

参考文章:

 

1旦是每种业务应用不一致端口,能够使用上边包车型客车安排文件

比如说报表使用143叁端口,BI抽取数据采用243三端口

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 
    stats socket /var/run/haproxy.sock mode 666 level admin
    stats timeout 2m




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

 

 

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

本文版权归小编全部,未经作者同意不得转载。

选取HAProxy代理SQL Server的AlwaysOn帮忙副本

公司近期数据库升级到SQL Server201四 ,并布署了alwayson高可用集群

机房内有3套程序必要读取数据库

先是套:主程序,读写数据库,连接主副本

其次套:报表程序,读报表,连接支持副本

其叁套:历史库程序,读历史库,连接帮忙副本

 

软件条件

图片 1

机器环境

图片 2

 

架构图

图片 3

为什麽须求选取HAProxy?

从前机房里面有三千个极端,那么些极端是2个十分的小的嵌入式设备,第3套报表程序原来是行使直连数据库IP(10.11.拾.3陆)来连接数据库

但那样有3个害处,当36那台协助副本宕机,那么报表程序就瘫痪了,因为3000个极端要改成数据库连接供给烧写程序到巅峰里面尤其耗时

或者要几天时间

 

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

利用HAProxy有多少个便宜

壹、前端不须求后端数据库的实在IP,当供给提高后端数据库,比如打补丁的时候尤其有益

二、HAProxy能够自动物检疫查实验后端数据库服务,探测1433端口是不是存活,如若143三端口出难题,能够自行重定向连接到叁七那台援助副本

三、减轻单台读库压力,使用陆风X8Odyssey轮询算法,请求均衡分发到3六和叁7那两台援救副本,减轻3六那台机械的下压力

图片 4

 

 


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 6000 
user haproxy 
group haproxy 
daemon 
#stats socket /var/lib/haproxy/stats     
stats socket /var/run/haproxy.sock mode 666 level admin
stats timeout 2m


defaults 
mode http 
log                 127.0.0.1:514       local3                     
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机器只供给运用一个网口,不须求杰出扩大网口

图片 5

#开辟后台管理界面

 

HAProxy提供了多少个后台管理界面

图片 6

 

查看haproxy的日志

cat /var/log/haproxy.log

图片 7


测试表明

使用SSMS2016来连接HAProxy的IP

10.11.10.39

图片 8

前些天是接2连3到GZC-SQL0三那台机

 

今昔把 GZC-SQL0三这台机的SQL服务停了

图片 9

HAProxy已经探测到 GZC-SQL0三那台机的SQL服务停了

图片 10

 再度点击一下履行按钮,能够发现早已重定向到 GZC-SQL0二这台机

图片 11

 

 

固然如此经过HAProxy那一层,可是品质方面也不算太差

图片 12


 

HAProxy的通讯形式

通讯格局接近于LVS的NAT形式

LVS的NAT格局(调度器将请求的靶子ip即vip地址改为Real server的ip,
返回的数码包也透过调度器,调度器再把源地址修改为vip)

图片 13

图片 14

 

 


总结

线上环境使用HAProxy已经基本上3个月,到以后未有出现过难题,相比稳定

对此HAProxy原理上的事物那里就不叙述了,网上有很多质地

 

参考文章:

 

如若是各种工作使用分化端口,可以行使上边包车型客车布局文件

诸如报表使用143三端口,BI抽取数据应用243三端口

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 
    stats socket /var/run/haproxy.sock mode 666 level admin
    stats timeout 2m




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

 

 

如有不对的地点,欢迎我们拍砖o(∩_∩)o 

正文版权归笔者全部,未经作者同意不得转发。

LVS NAT情势搭建

预备干活

  • 三台机器
  • 分发器,也叫调度器(简写为dir)
  • 内网:13三.130,外网:14二.1四7(vmware仅主机方式)
  • rs1
  • 内网:13三.13二,设置网关为133.130
  • rs2
  • 内网:133.13三,设置网关为13三.130
  • 三台机器上都履行实施
  • systemctl stop firewalld; systemc disable firewalld
  • systemctl start iptables-services; iptables -F; service iptables
    save

NAT情势搭建

  • 在dir上安装ipvsadm
  • yum install -y ipvsdam
  • 在dir上编写制定脚本,vim /usr/local/sbin/lvs_nat.sh//内容如下

#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1

NAT形式效能测试

  • 两台rs上都设置nginx
  • 设置两台rs的主页,做二个分别,也便是说直接curl两台rs的ip时,得到不一致的结果
  • 浏览器里拜访192.16八.142.1肆7,多访问五遍看结果差距

预备三台机器,壹台作为分发器(内网:133.130,外网:14二.1四7),其余两台是real
server,分别为rs一(内网:133.132,网关为13叁.130)和rs2(内网:13三.13叁,网关为13三.130)

分发器扩充1块网卡,查看网卡网段,所以设置IP1玖二.16八.142.147

图片 29

图片 30

图片 31

接下来查看是还是不是ping通

图片 32

3台机器配置好了后来,全体亟待关闭防火墙

图片 33

然后在rs1,rs2上安装iptables-services包,启动iptables服务

图片 34

 systemctl start iptables
 systemctl enable iptables

下一场调用新规则,避防默许规则影响实验效果;最终关闭selinux,最佳修改下安插文件

图片 35

图片 36

图片 37

安装ipvsadm工具

图片 38

接下来编写脚本,vim
/usr/local/sbin/lvs_nat.sh,保存退出;然后实施该脚本sh
/usr/local/sbin/lvs_nat.sh,脚本无输出表示无不当

图片 39

$IPVSADM -A -t 192.168.147.144:80 -s rr -p 3
#-A:=add,添加规则;-t:=tcp;-s 钦命算法; -p:钦点超时时间

在rs一和rs二上安装nginx,并分别修改主页内容

图片 40

图片 41

接下来能够做测试,如下表示测试成功

图片 42

陆、HAProxy负载均衡器算法与利用技术

一、HAProxy帮忙的负荷均衡算法
(一)、roundrobin,表示简单的轮询,负载均衡基础算法
(二)、static-rr,表示依据权重
(叁)、leastconn,表示最少连接者先拍卖
(4)、source,表示遵照请求源IP
(伍)、uri,表示遵照请求的USportageI;
(6)、url_param,表示依照请求的U本田CR-Vl参数来拓展调度
(7)、hdr(name),表示依据HTTP请求头来锁定每一次HTTP请求;
(八)、rdp-cookie(name),表示依照据cookie(name)来锁定并哈希每1遍TCP请求。

二、常用的负载均衡算法

(一)轮询算法:roundrobin
(二)依照请求源IP算法:source
(三)最少连接者先拍卖算法:lestconn

LVS介绍

  • LVS是由国人章文嵩开发
  • 流行度不亚于apache的httpd,基于TCP/IP做的路由和转载,稳定性和作用很高
  • LVS最新版本基于Linux内核二.陆,有比比皆是年不创新了
  • LVS有三种常见的情势:NAT、DSportage、IP Tunnel
  • LVS架构中有1个主干角色叫做分发器(Load
    balance),它用来散发用户的乞求,还有许多拍卖用户请求的服务器(Real
    Server,简称rs)

叁、神速安装HAProxy集群软件

yum install haproxy

文件存放地方:

/usr/sbin/haproxy  #二进制文件
/usr/share/haproxy  #共享文件
/var/lib/haproxy  #库文件
/etc/rc.d/init.d/haproxy  #初阶2进制文件
/etc/logrotate.d/haproxy  #日志切割
/etc/sysconfig/haproxy   #配置
/etc/haproxy  #布局目录

设置到位后,暗许安装目录中尚无布置文件,那里是将源码包里面的以身作则配置文件拷贝到配置文件目录
如此,HAProxy就安装到位了。

LVS IP Tunnel模式

图片 43

  • 那种形式,须要有三个集体的IP配置在分发器和持有rs上,大家把它称为vip
  • 客户端请求的指标IP为vip,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为rs的IP,那样数据包就到了rs上
  • rs接收数据包后,会回涨原始数据包,那样目标IP为vip,因为拥有rs上配备了那一个vip,所以它会以为是它本身

7、通过HAProxy的ACL规则完毕智能负载均衡

由于HAProxy能够干活在七层模型下,
由此,要贯彻HAProxy的无敌成效,一定要动用强劲灵活的ACL规则,通过ACL规则能够兑现基于HAProxy的智能负载均衡系统。HAProxy通过ACL规则完成两种首要的效果,分别是:
一)通过安装的ACL规则检查客户端请求是还是不是合法。若是符合ACL规则必要,那么就将放行,反正,倘若不适合规则,则向来中断请求。
贰)符合ACL规则供给的乞请将被交付到后端的backend服务器集群,进而达成基于ACL规则的载荷均衡。

HAProxy中的ACL规则日常应用在frontend段中,使用格局如下:
一acl 自定义的acl名称 acl方法 -i [匹配的路子或文件]
其中:
acl:是三个要害字,表示定义ACL规则的发轫。前边需求跟上自定义的ACL名称

acl方法:那些字段用来定义完毕ACL的主意,HAProxy定义了许多ACL方法,平常利用的法门有hdr_reg(host)、hdr_dom(host)、hdr_beg(host)、url_sub、url_dir、path_beg、path_end等。
-i:表示忽略大小写,前面必要跟上合营的门径或文件或正则表明式。
与ACL规则一起使用的HAProxy参数还有use_backend,use_backend前面需求跟上一个backend实例名,表示在知足ACL规则后去央浼哪个backend实例,与use_backend对应的还有default_backend参数,它象征在未有知足ACL条件的时候暗中认可使用哪个后端backend。
上面列举多少个广大的ACL规则例子:
acl www_policy hdr_reg(host) -i ^(www.z.cn|z.cn)
acl bbs_policy hdr_dom(host) -i bbs.z.cn
acl url_policy url_sub -i buy_sid=
use_backend server_www if www_policy
use_backend server_app if url_policy
use_backend server_bbs if bbs_policy
default_backend server_cache

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图