万字详述haproxy高可用

目录

写在前面

1、Haproxy简介

2、Haproxy的安装和基本配置信息

2.1、haproxy的安装

2.2haproxy的基本配置信息

2.2.1基本配置文件global参数

2.2.2基本配置文件proxys的相关参数

2.2.2.1 default的相关参数

2.2.2.2 frontend的相关配置

2.2.2.3 backend的相关配置

对于server配置参数的补充

3、haproxy热更新-socat

4、haproxy调度算法

4.1、静态算法

4.1.1、static-rrr:基于权重的轮询调度

4.1.2、first

4.2、动态算法

4.2.1、roundrobin

4.2.2、leastconn

4.3、其他算法

4.3.1、source

4.3.1.1、Source静态算法---map-base 取模法   

 4.3.1.2、一致性hash算法

4.3.2、uri

4.3.2.1、uri静态算法

4.3.2.2、uri动态算法

4.3.3、url_param

4.3.3.1、url_param静态算法

4.3.3.2、url_param动态算法

4.3.4、hdr

4.3.4.1、hdr静态算法

4.3.4.2、hdr动态算法

5、基于cookie的会话保持

6、HAProxy状态页

7、IP透传

8、ACL

9、错误日志定向

10、四层tcp负载均衡数据库

11、Haproxy https实现

写在最后

慢启动

hash取模算法


写在前面

了解haproxy之前希望你能了解一定的负载均衡原理,这会对你了解haproxy有不小的帮助
详情请见http://t.csdnimg.cn/ijWYa

注:所有不清楚的知识点都可以在写在最后目录下找到

1、Haproxy简介

        HAProxy是法国开发者 威利塔罗 (Willy Tarreau) 2000 年使用 C 语言开发的一个开源软件是一款具备高并发( 万级以上 ) 、高性能的 TCP HTTP 负载均衡器,支持基于cookie 的持久性(不怎么用的到了),自动故障切换(这个很棒),支持正则表达式及 web 状态统计,支持动态更改服务器状态。
        社区版网站: http://www.haproxy.org

2、Haproxy的安装和基本配置信息

主机 IP 角色
haproxy 192.168.220.100 负载均衡调度器
server1 192.168.220.150 db1
server2 192.168.220.200

db2

2.1、haproxy的安装

这里haproxy采用的安装方式是配置rhel9的本地源,直接从本地源里下载

#创建挂载目录
mkdir /rhel9

#将挂载命令写入开机自启文件中,并授予该文件执行权限
echo "mount /dev/cdrom /rhel9" > /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

#写一个repl9的repo文件
[AppStream]
name=AppStream
baseurl=file:///rhel9/AppStream/        #本地yum源的配置
gpgcheck=0

[BaseOS]
name=BaseOS
baseurl=file:///rhel9/BaseOS/
gpgcheck=0

#下载haproxy
yum install haproxy -y

2.2haproxy的基本配置信息

haproxy配置文件:/etc/haproxy/haproxy.cfg

2.2.1基本配置文件global参数

#打开配置文件 
vim /etc/haproxy/haproxy.cfg
global                                  #全局参数
    log         127.0.0.1 local2        #日志存放目录,具体后续在/etc/rsyslog.conf

    chroot      /var/lib/haproxy        #锁定运行目录
    pidfile     /var/run/haproxy.pid    #指定Pid所在文件
    maxconn     4000                    #指定最大连接数,建议十万
    user        haproxy                 #指定用户
    group       haproxy                 #指定用户组
    nbproc      2                       #开启的haproxy的进程数,默认进程数为1
#   nbthread    1     #指定每个haproxy进程开启的线程数,默认为每个进程一个线程,不能和nbproc共存
    cpu-map 1 0                         #将第一个进程绑定至0号CPU
    maxsslconn 100000                   #haproxy进程ssl最大连接数,用于https场景下
    maxconnrate 100                     #每个进程每秒创建的最大连接数量

    daemon                              #以守护进程运行

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats    #套接字文件

    # utilize system-wide crypto-policies
    ssl-default-bind-ciphers PROFILE=SYSTEM
    ssl-default-server-ciphers PROFILE=SYSTEM

2.2.2基本配置文件proxys的相关参数

2.2.2.1 default的相关参数
defaults
    mode                    http                #七层负载均衡,tcp为四层
    log                     global              #日志,根据global参数
    option                  httplog             #log选项,采集http会话相关的各种属性值    
                                                #包括HTTP请求、会话状态、源地址、连接时间等
    option                  http-keep-alive     #开启与客户端的会话保持
    option                  dontlognull         #log选项,不采集空会话连接日志
    option http-server-close                    #等待客户端完整HTTP请求的时间,此处为等待10s
    option forwardfor       except 127.0.0.0/8  #透传客户端真实IP至后端web服务器,除lo外
    option                  redispatch          #当连接的服务器挂掉后,强制连接其他健康的server
    retries                 3                   #连接后端服务器最多尝试次数
    timeout http-request    10s                 #等待客户端请求完全被接收和处理的最长时间
    timeout queue           1m                  #设置删除连接和客户端收到503信息前的等待时间
    timeout connect         10s                 #设置等待服务器连接成功的时间
    timeout client          1m                  #设置允许客户端处于非活动状态的时间
    timeout server          1m                  #设置服务端超时的时间
    timeout http-keep-alive 10s                 #session 会话保持超时时间
                                                #此时间段内会转发到相同的后端服务器
    timeout check           10s                 #指定后端服务器健康检查的超时时间
    maxconn                 3000                #指定一个haproxy进程最大的连接数
    errorfile 503 /etc/errorpage/503.http       #配置503,当报503时,使其访问定义的文件
    errorloc 503 https://www.baidu.com          #配置503,当报503时,使其重定向到百度

default中这三个时间不好区分理解,采用画图方式理解

  • option http-server-close
  • timeout http-request
  • timeout connect
2.2.2.2 frontend的相关配置
frontend webcluster        #名字随意起
    bind *:80              #监听的主机和端口 *表示任意,格式是IP:Port
    mode http              #采用几层负载均衡
    use_backend webcluster-host        #调用的backend
2.2.2.3 backend的相关配置
backend webcluster-host                #名字需要与frontend使用的backend名称一致
    balance roundrobin                 #采用的算法是轮询
    server web1 192.168.220.150:80     #后端服务器主机
    server web2 192.168.220.200:80     #后端服务器主机
对于server配置参数的补充
  • check:对指定 real 进行健康状态检查,如果不加此设置,默认不开启检查
  • addr: 可指定的健康状态监测 IP ,可以是专门的数据网段,减少业务网络的流量
  • inter <num>: 健康状态检查间隔时间,默认 2s
  • weight <num>: 默认为 1 ,最大值为 256 0( 状态为蓝色 ) 表示不参与负载均衡,但仍接受持久连接
  • maxconn <maxconn>: 当前后端 server 的最大并发连接数
  • redirect prefix http://www.baidu.com/: 将请求临时 (302) 重定向至其它 URL ,只适用 http 模式
  • disabled: 将后端服务器标记为不可用状态,即维护状态,除了持久模式
  • backup: 将后端服务器标记为备份状态 , 只在所有非备份主机 down 机时提供服务,类似 Sorry Server
  • rise <num>: 后端服务器从下线恢复上线的检查的连续有效次数,默认为 2
  • fall <num>: 后端服务器从线上转为线下的检查的连续失效次数,默认为 3
  • port: 指定的健康状态监测端口
2.2.2.4 listen的相关配置
listen webserver_80
    bind *:80
    mode http
    balance roundrobin
    server web1 192.168.220.150:80 check inter 2 fall 2 rise 3
    server web2 192.168.220.200:80 check inter 2 fall 2 rise 3 weight 2
    server web3 192.168.220.100:8080 backu

3、haproxy热更新-socat

我的haproxy配置


使用工具socat

需要先在下载并修改haproxy配置文件,以下配置是socat热更新单进程的配置

socat动态热更新多进程

socat命令(重启失效)

  • 查看帮助:echo "help" | socat stdio /var/lib/haproxy/stats
  • 查看haproxy状态:echo "show info" | socat stdio /var/lib/haproxy/stats
  • 查看集群状态:echo "show servers state" | socat stdio /var/lib/haproxy/stats
  • 查看集群权重:echo "get weight myhaback/web1" | socat stdio /var/lib/haproxy/stats
  • 设置集群权重:echo "set weight myhaback/web2 2" | socat stdio /var/lib/haproxy/stats
  • 下线后端服务:echo "disable server myhabck/web1" | socat stdio/var/lib/haproxy/stats 
  • 上线后端服务:echo "enable server myhaback/web1" socat stdio /var/lib/haproxy/stats

4、haproxy调度算法

4.1、静态算法

        静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度 等,且无法实时修改权重(只能为 0 1, 不支持其它值 ) ,只能靠重启 HAProxy 生效。
4.1.1、static-rrr:基于权重的轮询调度
  • 不支持端服务器慢启动
  • 其后端主机数量没有限制,相当于 LVS 中的 wrr

配置如下

验证:按照权重分配,访问9次,应是三次web1,6次web2

4.1.2、first
  • 根据服务器在列表中的位置,自上而下进行调度
  • 其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务
  • 其会忽略服务器的权重设置
配置如下

验证,如是first,那么全部的访问都应打向web1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值