• Haproxy


    Haproxy:他也是常用的负载均衡软件

    Nginx:支持四层转发,七层转发

    Haproxy:也可以四层和七层转发

    LVS的DR和hat是基于四层转发还是七层转发

    四层转发

    tun:四层加七层转发

    基于四层的转发:

    Lvs

    Nginx

    Haproxy

    基于七层的转发:

    Nginx

    Haproxy

    Haproxy:法国人威利塔罗开发的,在2000年基于c语言开发的一个开源软件

    可以支持一万以上的并发请求

    高性能的tcp和http负载均衡器 2.4  1.5.9

    Haproxy:主要用于高并发的web站点。工作原理和nginx一样。Lvs都一样

    支持的功能:

    1. tcp和http的反向代理功能
    2. https的代理配置
    3. 可以针对http请求添加COOKie,转发到后端服务器(添加缓存)
    4. 也支持主备切换(keepalived)
    5. 基于端口的实时监控
    6. 压缩响应报文

    Haproxy的特点:

    1. 可靠性和稳定非常好,可以和硬件f5 BIG负载均衡的硬件设备相媲美
    2. 同时维护40000-50000个并发连接,单位时间内处理最大请求数20000个
    3. 支持8中负载均衡算法,但是haproxy不带缓存功能,但是可以支持会话保持
    4. 也支持配置虚拟主机

    Haproxy的负载均衡算法:

    1. roundrobin  轮询
    2. static-rr   加权轮询
    3. leastconn  最小连接数
    4. source  根据请求的源ip进行调度sh
    5. uri  根据请求地址进行调度
    6. url param  根据URL的参数实现调度
    7. hdr(name)  表示根据http的请求头锁定每一次http的请求
    8. rdp-cookie(name)  表示根据cookie的名称来锁定每一次请求

    lvs  nginx  haproxy

    1. lvs基于linux内核实现负载均衡,性能最高,但是对系统硬件要求也比较高

    haproy和nginx基于第三方应用实现负载均衡,性能较低

    1. lvs可以实现ip+端口的四层负载均衡,无法实现http请求的转发。haproxy和nginx都可以实现四层和七层的转发
    2. lvs只能实现四层转发,监测的状态只能是单一的功能(监测端口)

    haproxy可以实现端口,uri也可以

    1. haproxy虽然功能强大,但是整体性能低于lvs nginx的性能比haproxy低

    lvs-----haproxy-----nginx(bug多,稳定也差)

    1. nginx的主要应用还是web服务或者缓存服务器,nginx的stream模块和upstream也可以支持集群,但是对节点的健康检查能力不能。没有lvs和haproxy的监控性能好

    Haproxy的缺点:单节点部署,单实例运行,代理服务器出现故障,整个负载集群全部不可用

    Haproxy是一个无状态的负载均衡器,没缓存,也没有会话保持,靠应用程序实现会话保持。状态不是保存在代理服务器,而是在后端服务器,或者依靠cookie

    日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志,人工自定义。

    实验:

    1. 搭建
    2. 实现七层 实现四层
    3. 如何实现haproxy的日志单独存放

    haproxy负载调度器:192.168.120.30

    nginx服务器1:192.168.120.40

    nginx服务器2:192.168.120.60

    yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

    tar zxvf haproxy-1.5.19.tar.gz

    cd haproxy-1.5.19/

    make TARGET=linux2628 ARCH=x86_64

    TARGET=linux2628 ARCH=X86_64

    TARGET=linux2628

    uname -r 内核版本

    2.6.18

    ARCH=X86_64

    系统位数,64位系统

    Haproxy服务器配置:

    mkdir /etc/haproxy

    cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/

    vim haproxy.cfg

    # this config needs haproxy-1.1.28 or haproxy-1.2.1

      2

      3 global #全局配置 定义全局参数

      4         log /dev/log    local0 info

      5         #系统日志

      6         log /dev/log    local0 notice

      7         #修改日志的存放路径

      8         #log loghost    local0 info

      9         maxconn 10240

     10         #支持的最大连接数 1024 一定要改limits.conf

     11         #chroot /usr/share/haproxy

     12         uid 99

     13         gid 99

     14         daemon

     15         nbproc 4

     16         #同时并发进程数,要么和cpu相同,要么是cpu的两倍

     17         #debug

     18         #quiet

     19

     20 defaults

     21 #默认配置,包括监听地址和协议backend(upstream)

     22         log     global #引入全局配置日志格式

     23         mode    http #模式为http七层

     24         option  httplog #日志类别是http格式的日志

     25         option  dontlognull #不记录健康检查的日志信息

     26         retries 3 #检查节点服务器的失败次数 3次失败就认为节点服务器失效

     27         redispatch #服务器的负载很高,自动结束当前队列处理比较久的连接

     28         maxconn 2000 #最大连接数,不能超过全局配置的定义数量

     29         #contimeout     5000

     30         #clitimeout     50000

     31         #srvtimeout     50000

     32         timeout http-request 10s

     33         #默认http请求的超时时间

     34         timeout queue 1m

     35         #默认队列超时时间

     36         timeout connect 10s

     37         #默认连接超时的时间

     38         timeout client 1m

     39         #客户端的超时时间

     40         timeout server 1m

     41         #服务端的超时时间

     42         timeout http-keep-alive 10s

     43         #默认会话保持的超时时间

     44         timeout check 10s

     45         #心跳检查的超时时间

     timeout connect 10s

     timeout client

     timeout server 1m

    都是向后兼容,和客户端以及服务端相匹配        

    check inter 2000 fall 3

    check inter 开启对后端服务器的健康检查,检查的时间间隔:2000毫秒

    fall 3 表示连续3次检测不到后端服务器的心跳线,则认为该节点失效

    haproxy系统服务的添加

    cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy

    chmod 777 /etc/init.d/haproxy

    chkconfig --add /etc/init.d/haproxy

    cd /etc/init.d

    ln -s /usr/local/sbin/haproxy /usr/sbin

    systemctl restart haproxy

    节点服务器部署

    nginx1和nginx2

    vim /usr/local/nginx/html/index.html

    自定义

    vim /usr/local/nginx/conf/nginx.conf

    修改连接保持时间 注释或修改成0

     #keepalive_timeout  65;  

    最后到客户端访问

    curl 192.168.120.30

    Haproxy的日志重定义

    vim /etc/rsyslog.d/haproxy.conf

    if ($programname == 'haproxy' and $syslogseverity-text == 'info')

    then -/var/log/haproxy/haproxy-info.log

    &~

    if ($programname == 'haproxy' and $syslogseverity-text == 'notice')

    then -/var/log/haproxy/haproxy-notice.log

    &~

    systemctl restart rsyslog.service

    tail -f /var/log/haproxy/haproxy-info.log

    #查看haproxy的访问请求日志信息

    到客户端访问

    curl 192.168.120.30

  • 相关阅读:
    Android平台GB28181设备接入侧如何实现SIP校时
    java基于ssm+vue的考研信息查询系统 elementui
    前缀和【一维前缀和与二维前缀和】
    GraphQL基础知识与Spring for GraphQL使用教程
    【高项笔记】No.2 网络和网络协议
    鲸探发布点评:9月2日发售罗丹雕塑系列数字藏品
    leetcode(力扣) 59. 螺旋矩阵 II (边界控制思路)
    mysql为什么使用B+树
    LeetCode-剑指22-链表中倒数第k个节点
    CentOS7.9 安装postgresql
  • 原文地址:https://blog.csdn.net/DDYYmmm/article/details/134537935