haproxy

 一、haproxy理论介绍

1、haproxy的来源以及下载网站

haproxy由c语言编写的,可以提供负载均衡和高可用性,

社区版下载网站:HAProxy - The Reliable, High Perf. TCP/HTTP Load Balancer

2、负载均衡及其优点
2.1、负载均衡:

当用户流量访问时,通过一台设备,将流量合理调度到内部主机中,从而加快处理流量的效率

2.2、负载均衡的优点

        增加服务器的业务处理能力,解决服务器硬件瓶颈问题

        节约公网ip地址,降低成本

        隐藏内部服务器ip,增加服务器安全性

        配置简单,只需更改固定文件

        性能较强,可以并发数万以及数十万

2.3、利用硬件进行负载均衡

         美国F5网络公司----F5

          耀--------------------array

          深信服-----------------AD-1000

2.4、利用haproxy配置负载均衡
        2.4.1、四层负载均衡

                通过ip和port(端口)进行负载均衡的分配

                记录tcp,和udp流量由哪些服务器处理,后续该请求连接的流量都通过该服务器处理

                通过NAT技术,转发到后台服务器

                支持四层负载均衡的软件:LVS , Nginx , Haproxy等

                通过虚拟url或主机ip进

        2.4.2、七层负载均衡

                通过对虚拟URL或主机i进行对流量的识别,根据应用层信息进行解析

                代理后台服务器与客户端进行连接,可以进行后端检测

                 支持七层代理的软件:Nginx , Haproxy

       2.4.3、四层与七层的区别

                区别在于对服务器进行负载均衡时依据四层或七层的信息来进行负载均衡         

                四层负载均衡:通过三层的IP地址,和四层的端口号,决定流量的负载均衡,对需要进行负载均衡的流量进行nat处理,转发至后台服务器,记录下TCP和UDP是与哪台服务器建立连接的,后续这个连接的所有流量处理都是此服务器完成

                七层负载均衡:在四层的基础上,加入应用层特征进行考虑,比如URL、浏览器类别等进行负载均衡

                 四层负载均衡的吞吐能力较强,但是七层的负载均衡安全性较强

二、haproxy实验配置

1、haproxy的基础配置
1、实验环境部署

三台主机:一台haprey,两台sr子机

haorey :ip---172.25.254.100,安装haproxy

sr1  :ip---172.25.254.10 , 安装nignx

sr2  :ip---172.25.254.20 , 安装nignx

2、haproxy主机配置

haproxy默认开启后端检测,即当一个子机挂掉后,将不会继续给该主机发送流量

2.1、进入配置文件
rpm -qc haproxy
[root@haprey sun]# vim /etc/haproxy/haproxy.cfg  #进入配置文件

2.2、更改配置文件

2.3、启动服务使配置生效
开启服务:
[root@haprey sun]# systemctl start haproxy
[root@haprey sun]# systemctl start haproxy.service  
2.4、查看配置是否生效

在本地主机上面curl172.25.254.100网段,看是否符合轮询规则

2.5、listen方式配置

3、haproxy参数
3.1、设置进程数

默认一个进程中执行一个线程

[root@haprey sun]# pstree -p | grep haproxy      #查看进程
           |-haproxy(31489)---haproxy(31491)---{haproxy}(31492)

[root@haprey sun]# systemctl restart haproxy.service     #重启服务 
[root@haprey sun]# pstree -p | grep haproxy              #查看进程,建议cpu几核就开几个
           |-haproxy(31810)-+-haproxy(31812)
           |                `-haproxy(31813)
 
3.2、查看线程数
[root@haprey sun]# cat /proc/31812/status | grep -i thread    #查看进程数
Threads:	1
Speculation_Store_Bypass:	thread vulnerable

注意:多线程与多进程不能同时开启

3.3、定向存储日志设置

 上一篇文章简单的描述了haproxy中的global(全局配置)的简单配置,这篇文章则系统的介绍一下haproxy-proxies中的配置。

1、proxies配置说明

参数作用
defaults默认配置项,针对下面三项生效
frontend前端配置(类似与LVS服务主机)
backend后端配置(类似于RS服务器组)
listen前后端可以通过这个参数一起配置,生产环境下常用

2、proxies配置

2.1、defaults 配置详解

        ​​​

注:如果下面的前后端已经指定参数,则按指定的参数执行,如果未指定参数,就按配置列表内的参数执行

2.2、backend 配置详解
        2.2.1、server参数

                

配置完后重启功能
[root@haprey sun]# systemctl restart haproxy

                  (1)backip与disabled参数

即所有子机都无法访问时访问指定的backup网段

当在子机后面加上 disabled 时,该子机下线,删除disabled时,子机上线

                  (2)redirect参数   

注意:使用redirect时,将子机ip命令段注释掉

                  (3)msxconn参数              

配置更改完后重启功能
[root@haprey sun]# systemctl restart haproxy

3、动态调整proxies参数

以上更改配置文件,更改完成后需要刷新所有集群状态,影响很大,所以需要工具单独更新,改哪个就控制哪个

3.1、socat工具
进入配置文件
[root@haprey sun]# vim /etc/haproxy/haproxy.cfg 

安装socat工具
[root@haprey sun]# dnf install socat -y
查看集群权重
[root@haprey sun]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats

更改权重
echo "set weight webcluster/web1 1 "| socat stdio /var/lib/haproxy/stats

测试轮询结果正常

下线后端服务器

[root@haprey sun]# echo "disable server webcluster/web1" | socat stdio /var/lib/haproxy/stats

上线后端服务器

[root@haprey sun]# echo "enable server webcluster/web1" | socat stdio /var/lib/haproxy/stats

多进程更改

1、静态算法
        1.1、static-rr

不支持慢启动

不支持socat进行的热处理

主机数量没有限制

        1.2、first

根据服务器列表位置,自上而下进行调动,当当前服务器连接达到上限时,新请求分配给其他服务器

会忽略权重设置

不支持socat进行热处理

listen webcluster
    bind *:80
    mode http
   # balance roundrobin
    balance first   #设置为first算法
   # redirect prefix http://www.baidu.com/   
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
2、动态算法

基于权重的轮询动态调度算法

新请求优先调度到负载低的服务器

权重可用动态调整不用重启

        2.1、roundrobin

基于权重的轮询算法

支持慢启动

数据传给权重高但负载小的主机

每个后端最多支持4095个服务器

listen webcluster
    bind *:80
    mode http
    balance roundrobin
   #balance first   #设置为first算法
   # redirect prefix http://www.baidu.com/   
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
        2.2、leastconn

将流量给当前链接最少的服务器

支持慢启动和热修改

权重次考虑,优先给链接少的

listen webcluster
    bind *:80
    mode http
    balance leastconn
   #balance first  
   # redirect prefix http://www.baidu.com/   
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
3、其他算法

即是动态算法,也可以作为静态算法

        3.1、source

同一来源的所有请求会被打到后端的子机上

基于hash地址进行运算转到后端服务器

默认为静态算法

可以通过hash-type调整为动态算法

listen webcluster
    bind *:80
    mode http
    balance source
   #balance first  
   # redirect prefix http://www.baidu.com/   
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
                3.1.1、取模法

对source进行hash计算,再基于服务器权重取模,决定将此请求转发给哪台服务器

设定后,不支持慢启动,不支持在线调整权重,为静态算法

后端服务器上下线时,因总权重改变导致整体改变        

3.2、

4、哈希一致性

1、当服务器总权重进行变化时,对调度结果影响是局部的,不会引起大的变动

该算法是动态的,支持socat在线权重调整,支持慢启动

算法:后端服务器的哈希环点(服务器ip)%(2^32)

客户机哈希环点(客户机ip)%(2^32)

客户机落点配对的服务器
弧1服务器2
弧2服务器3
弧3服务器1
listen webcluster
    bind *:80
    mode http
    balance source  #配置哈希算法
    hash-type consistent
   #balance first  
   # redirect prefix http://www.baidu.com/   
    server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1

2、uri (不支持tcp)

基于对用户请求的左半部分或整个uri做hash,再将hash结果对总权重进行取模,根据最终结果将请求转发到指定服务器

同一来源的所有请求会被打到后端的子机上

配置文件配置

listen webcluster
    bind *:80
    mode http
   # balance roundrobin
    balance uri
    hash-type consistent

3、url_param

对url中的params的参数key对应的value值进行hash计算,并由服务器总权重相除后派发到相应的服务器。同一来源的所有请求会被打到一个后端的子机上

可以指定多个param参数

配置文件参数
listen webcluster
    bind *:80
    mode http
   # balance roundrobin
    balance url_param name,userid
    hash-type consistent

4、hdr(根据浏览器来指定去哪个服务器)

针对http头部请求的信息做hasha

由name指定的http将被取出做hash计算

若取模无效后,使用默认的轮询调度

配置文件参数
listen webcluster
    bind *:80
    mode http
   # balance roundrobin
    balance hdr(User-Agent)
    hash-type consistent

算法使用场景

Uri------http    缓存服务器,CDN服务商

url_param----http    可以实现session保持

hdr------  --------基于客户端请求报文做下一步处理

5、haproxy的状态页

状态页启用

 listen stats
        mode http
        bind *:9999
        stats enable
        stats uri /status
        stats auth lee:lee

启用后登录网址观看状态页

 1、基于cookie的会话保持

cookie value:为server指定cookie值,相对于source的hash调度算法,精度更高,但也加大了haproxy的负载,

1.1、配置选项

  name  指定coookie的名称

insert  插入新的cookie,默认不插入cookie

   indirect :如果客户端由cookie,则不再发送cookie信息

nocache:当client和hapoxy之间有缓存服务器时,不允许中间缓存器缓存cookie

1.2、配置
  balance roundrobin
   # balance hdr(User-Agent)
   # balance source
   # hash-type consistent
   # redirect prefix http://www.baidu.com/   
    cookie WEBCOOKIE insert nocache indirect
    server  web1 172.25.254.10:80 cookie sun1 check inter 2 fall 3 rise 5
    server  web2 172.25.254.20:80 cookie sun2 check inter 2 fall 3 rise 5

 记录真实的ip地址,用于数据统计和安全分析

1、ip透传
1.1、七层透传

httpd服务看不到ip透传地址,需要进行配置

进入配置文件

[root@web2 sun]# vim /etc/httpd/conf/httpd.conf

查看httpd日志
[root@web2 sun]# cat /etc/httpd/logs/access_log 
2、四层ip透传(nginx)

进入配置文件更改
[root@haprey sun]# vim /etc/haproxy/haproxy.cfg

进入配置文件更改
[root@web1 sun]# vim /etc/nginx/nginx.conf

 1、acl匹配模式

acl        名称        匹配规范        具体操作符        操作对象类型

        1.1、ACL-name名称
acl  test(名字)  path_end  -m  sub  /a
#ACL名称,大小写字母,数字0~9,严格区分大小写
        1.2、ACL匹配规范
命令作用
hdr_beg前缀匹配(以xxx开头)
hdr_end后缀匹配(以xxx结尾)
hdr_dom区域匹配(是xxx)
hdr_dir路径匹配
hdr_len

长度匹配

hdr_reg正则表达式匹配
hdr_sub字串匹配

再windows里面配置解析

解析路径
C:\Windows\System32\drivers\etc
修改etc里面的host文件
172.25.254.100  www.sun.org

配置完后即可正常访问www.sun.org

2、ACL动静分离

        2.1、基于访问路径的访问控制

2.2、基于ip的访问控制

刷新配置文件
[root@haprey sun]# systemctl restart haproxy.service

2.3、基于浏览器的访问控制、

2.4、基于文件后缀名进行动静分离

启动httpd
[root@web1 sun]# systemctl restart httpd

下载PHP

进入vim /var/www/html/index.php
配置php文件

<?php
        phpinfo();
?>

自定义错误界面

示例:errorfile <code>  <file>(当出现相应错误代码时,跳转到file文件)

[root@haprey sun]# mkdir /etc/haproxy/errorpage -p
创建错误文件夹
[root@haprey sun]# vim /etc/haproxy/errorpage/503.http
创建503的错误自定义文件

配置完后重启服务

systemctl restart httpd

haproxy 四层负载

使用数据库来进行四层负载

[root@web1 sun]# dnf install mariadb-server -y

查看数据库id

hppts的加密访问

        需要制作证书和密钥

[root@haprey sun]# mkdir -p /etc/haproxy/certs
证书文件制作
[root@haprey sun]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/sun.org.key -x509 -days 365 -out /etc/haproxy/cert/timinglee.org.sun
[root@haprey sun]# cat /etc/haproxy/certs/sun.org.key  /etc/haproxy/certs/sun.org.key  > /etc/haproxy/certs/sun.org.pem

查看端口是否开启
[root@haprey sun]# netstat -antlupe | grep haproxy

跳转443端口

配置状态页

写完重启服务

systemctl daemon-reload

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值