zoukankan      html  css  js  c++  java
  • HAPRoxy(一):HAProxy基本配置、调度算法与tcp、http、heath模式配置示例

    一、HAProxy安装

    1.HAProxy简单介绍

    HAProxy虽然名字前有HA,但它并不是一款高可用软件,而是一款用于实现负载均衡的软件,可实现四层与七层的负载均衡。

    2.yum安装HAProxy

    HAProxy已经包含在yum的base中,版本为1.15,可以直接yum安装

    ~]# yum install -y haproxy

    HAProxy的配置文件路径为:/etc/haproxy/haproxy.cfg

    主程序路径为:/usr/sbin/haproxy

    3.HAProxy配置

    HAProxy配置段分为两大部分:

    1.全局配置段,在配置文件中的标识为global,主要功能有如下:

    a.在global中可以对HAProxy的进程及安全相关参数进行配置

    b.性能调整

    c.Debug

    2.代理配置段,在配置文件中的标识为proxyies,它还分为如下小段:

    a.default:为frontend,listen,backend提供默认配置

    b.frontend:前端主机配置,可类比于Nginx的server { }

    c.listen:将前端和后端整合在一起配置,同时拥有前端和后端。

    HAProxy简单配置示例

    HAProxy默认配置如下:

    global
        local2.*                       /var/log/haproxy.log #HAProxy日志文件依赖于rsyslog,这里的log配置与rsyslog相关
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid #运行的pid文件路径
        maxconn     4000 #设置最大可支持的并发连接数
        user        haproxy
        group       haproxy
        daemon
        # turn on stats unix socket
        stats socket /var/lib/haproxy/stats
    
    defaults
        mode                    http #设置HAProxy默认的工作模式,有tcp,http,health三种
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000 #最大连接数
    
    frontend  main *:5000
        acl url_static       path_beg       -i /static /images /javascript /styl
    esheets
        acl url_static       path_end       -i .jpg .gif .png .css .js
    
        use_backend static          if url_static
        default_backend             app
    
    backend static
        balance     roundrobin
        server      static 127.0.0.1:4331 check
    
    
    backend app
        balance     roundrobin
        server  app1 127.0.0.1:5001 check
        server  app2 127.0.0.1:5002 check
        server  app3 127.0.0.1:5003 check
        server  app4 127.0.0.1:5004 check

    简单的代理段配置:

    frontend web #自定义前端服务器名,这里为web
        bind *:80 #设置监听的端口与IP
        default_backend     websrvs #配置默认调用的名为websrvs的后端服务器组
                
    backend websrvs #定义后端服务器名
        balance roundrobin #配置算法类型
        server srv1 172.16.100.6:80 check #配置主机参数,check为健康状态检测
        server srv2 172.16.100.7:80 check    

    说到HAProxy的调度算法,这里简单介绍一下:

    HAProxy调度算法:
    HAProxy在balance中定义
    格式为 balance <algorithm> [ <arguments> ] 
    1.roundrobin 根据服务器权重轮询的算法,可以自定义权重,它支持慢启动,并能在运行时修改权重,所以是一种动态算法。最多支持4095台后端主机。
    2.static-rr 与roundrobin类似,static-rr也是一种轮询算法,但它是静态的,对后端主机数量无限制。
    3.leastconn 最小连接数算法,一种可以根据后端主机连接数情况进行调度的动态算法,支持慢启动和运行时调整,可将新的请求调度至连接数较少的后端主机。与LVS中lc算法类似。
    4.first 根据服务器标识顺序选择服务器,当服务器承载的连接数达到maxconn的值后便将新情求调度至下一台服务器。此算法只在一些特殊场景下使用。
    5.source 对请求的源IP地址进行hash处理,根据hash运算处理结果调度至后端服务器。可使固定IP的请求始终调度至统一服务器。
    6.uri 根据请求的uri进行hash处理并调度之后端主机。
    7.url_param 将URL的参数进行判断并进行hash计算,参数可以自定义,任何的URL参数都可以。
    8.hdr <name>根据请求中的HTTP报文首部的值进行hash计算并调度。name可以是GET、USERAGENT等首部名。
    HAProxy可以选择普通hash算法也可以选择一致性hash算法。可用参数hash_type配置。

    4.HAProxy中四层负载与七层负载的简单演示

    mode参数可设置HAProxy工作在四层还是七层,在HAProxy中mode有三种工作模式:

    1.tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议;
    2.http:仅当代理的协议为http时使用;
    3.health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接;

    1.tcp模式下负载均衡简单示例

    IP分配如下:

    HAProxy主机:192.168.29.101

    后端主机1:192.168.29.102  后端主机2:192.168.29.103

    客户端主机:192.168.29.104

    将默认配置/etc/haproxy/haproxy.cfg中默认的frontend、backend注释掉,重新添加如下配置:

    listen sshd
        mode tcp bind
    *:8080 balance leastconn server sshd1 192.168.29.102:22 check server sshd2 192.168.29.103:22 check

    启动HAProxysy

    ~]# stemctl start haproxy

    注:所有服务器都关闭了firewall和selinux

    用客户端做测试,看ssh请求是否由HAProxy负载均衡至后端,如下图:

    2.http模式下负载均衡简单示例

    a.在两台后端服务器上yum安装Nginx服务

    b.设置默认主页index.html,将主页内容设置分别设置为B1和B2。

    c.开启Nginx服务,检查80端口是否在监听状态。

    d.配置HAProxy服务,注释掉上例中的listen配置,添加配置文件如下(本示例的配置也可在listen中配置,这里为不与上例重复,分别在frontend和backend中配置):

    frontend myweb
            bind *:80
            default_backend app
    
    backend app
            balance roundrobin
            server app1 192.168.29.102:80 check
            server app2 192.168.29.103:80 check

     重启HAProxy后在客户端访问HAProxy主机并刷新,可看到内容不断切换,说明http请求被负载均衡代理至后端主机,调度算法为roundrobin:

    5.HAProxy的cookie配置基础

    1.什么是cookie?

    由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

    2.为什么需要cookie?

    举一个大家都在举的例子:客户端第一次访问某购物网站时,集群中负载均衡会根据设置好的算法分配至后端某服务器A,若负载均衡开启了cookie机制,则负载均衡会给客户端一个身份标识,以后只要是该客户访问网站,都会将请求发送至后端服务器A。这就绑定了用户和后端服务器。与ip_hash不同的是,这种方式的绑定更精细,设置更灵活,就算用户换IP也不会影响绑定。

    3.cookie简单配置

    基本格式:cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ] [ postonly ] [ preserve ] [ httponly ] [ secure ] [ domain <domain> ]* [ maxidle <idle> ] [ maxlife <life> ]

    <name>:is the name of the cookie which will be monitored, modified or inserted in order to bring persistence.

    在上例配置中添加cookie配置,使客户端绑定至后端某台主机

    frontend myweb
            bind *:80
            default_backend app
            stats enable #开启HAProxy的状态页功能
            stats auth admin:asd12345 #设置状态页登入密码
    
    backend app
            balance leastconn
            cookie server insert nocache #在nocache中插入名为server的cookie键
            server app1 192.168.29.102:80 check cookie svr1 #server app1的键值为svr1
            server app2 192.168.29.103:80 check cookie svr2 #server app1的键值为svr2

    重启HAProxy后无论怎么刷新都不会切换内容了。查看网页的cookie内容:

    说明绑定在了svr1上了。

  • 相关阅读:
    C#中文件操作【File】和【Directory】
    MySql的不同之处
    FileStream读写文件【StreamWriter 和 StreamReader】
    将对象序列化为XML文档
    SQL自增长的数据插入
    POJ3356 AGTC (最短编辑距离问题)
    POJ3070Fibonacci(矩阵快速幂求Fibonacci数列)
    HDOJ1058 Humble Numbers
    第三届软件大赛预赛A组试题及答案
    HDOJ4526 威威猫系列故事——拼车记
  • 原文地址:https://www.cnblogs.com/readygood/p/9774643.html
Copyright © 2011-2022 走看看