行使HAProxy代理SQL Server的AlwaysOn支持别本

集团近来数据库晋级到SQL Server2015 ,并安顿了alwayson高可用集群

机室内有三套程序要求读取数据库

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

第二套:报表程序,读报表,连接帮助别本

其三套:历史库程序,读历史库,连接补助别本

 

软件条件

图片 1

机器遭受

图片 2

 

架构图

图片 3

为什麽须要动用HAProxy?

此前机房里面有三千个极端,这几个极端是贰个非常的小的嵌入式设备,第二套报表程序原本是应用直连数据库IP(10.11.10.36)来连接数据库

但那样有三个弊病,当36这台协助别本宕机,那么报表程序就瘫痪了,因为三千个极端要转移数据库连接须要烧写程序到极限里面非常耗时

兴许要几天时间

 

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

动用HAProxy有多少个低价

1、前端无需后端数据库的骨子里IP,当要求升高后端数据库,比如打补丁的时候特别有利

2、HAProxy能够自动物检疫查实验后端数据库服务,探测1433端口是或不是存活,倘诺1433端口出标题,能够活动重定向连接到37那台帮助别本

3、缓慢解决单台读库压力,使用瑞鹰君越轮询算法,要求均衡分发到36和37这两台援助别本,缓慢消除36那台机器的下压力

图片 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-SQL03那台机的SQL服务停了

图片 9

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

图片 10

 再度点击一下实行按键,能够窥见早就重定向到 GZC-SQL02那台机

图片 11

 

 

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

图片 12


 

HAProxy的通讯方式

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

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

图片 13

图片 14

 

 


总结

线上情状使用HAProxy已经基本上1个月,到今后从未有过出现过难题,相比较稳定

对于HAProxy原理上的事物这里就不汇报了,网络有成百上千资料

 

参谋文章:

 

设即使种种事情使用差别端口,能够应用下面包车型大巴配置文件

例如说报表使用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 
    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)
  • 内网:133.130,外网:142.147(vmware仅主机格局)
  • rs1
  • 内网:133.132,设置网关为133.130
  • rs2
  • 内网:133.133,设置网关为133.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.168.142.147,多访谈两回看结果差别

预备三台机械,一台作为分发器(内网:133.130,外网:142.147),另外两台是real
server,分别为rs1(内网:133.132,网关为133.130)和rs2(内网:133.133,网关为133.130)

分发器扩大一块网卡,查看网卡网段,所以设置IP192.168.142.147

图片 15

图片 16

图片 17

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

图片 18

三台机器配置好了以往,全体索要关闭防火墙

图片 19

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

图片 20

 systemctl start iptables
 systemctl enable iptables

下一场调用新法则,以防默许法规影响实验效果;最后关闭selinux,最棒修改下布署文件

图片 21

图片 22

图片 23

安装ipvsadm工具

图片 24

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

图片 25

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

在rs1和rs2上安装nginx,并各自修改主页内容

图片 26

图片 27

下一场能够做测验,如下表示测验成功

图片 28

global
    # 定义每个haproxy进程的最大连接数 
    maxconn 40000
    daemon
    user haproxy
    group haproxy
    # 定义haproxy的pid,定义haproxy pid文件存放位置
    pidfile /data/haproxy/h.pid
    log 127.0.0.1:514 local2
defaults
    log     global
    mode    http
    option  httplog
    option dontlognull
    no option log-health-checks
    no option dontlog-normal
    option log-separate-errors

    # add X-Forwarded-For: IP
    option forwardfor

    balance roundrobin

    hash-type consistent

    timeout connect             10000
    timeout queue               1000
    timeout tarpit              12000
    timeout client              120000
    timeout server              120000
    timeout http-request        120000
    timeout http-keep-alive     120000
    timeout check               3000
    grace               3000
frontend h_9999
    maxconn     60000
    bind 0.0.0.0:9999
    use_backend weixin_server
# 这里定义你要代理的服务器
backend weixin_server
    balance         roundrobin
    log                global
    cookie          SERVERID
    server          db_test_155_8888          10.1.3.155:8888     check inter 2000 fall 3

LVS调治算法

  • 轮询 Round-Robin rr
  • 加权轮询 Weight Round-罗布in wrr
  • 细微连接 Least-Connection lc
  • 加权最小连接 Weight Least-Connection wlc
  • 依照局地性的纤维连接 Locality-Based Least Connections lblc
  • 带复制的依照局地性最小连接 Locality-Based Least Connections with
    Replication lblcr
  • 指标地方散列调节 Destination Hashing dh
  • 源地址散列调治 Source Hashing sh

常用的算法是前三种

扩展

lvs 三种形式详解

lvs二种算法

关于arp_ignore和
arp_announce

lvs原理相关的

groupadd haproxy #添加haproxy组
useradd -g haproxy haproxy -s /bin/false #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统