精华内容
下载资源
问答
  • Web服务器群集——HAProxy 搭建Web群集

    千次阅读 2021-04-04 13:12:49
    HAProxy搭建Web群集HAProxy介绍HAProxy功能三大软件负载均衡器对比(LVS Nginx Haproxy)三大软件负载均衡器适用业务场景HAProxy安装及基础配置默认yum源第三方安装包编译安装HAProxy解决HAProxy的依赖环境解决lua环境...

    HAProxy介绍

    HAProxy是法国开发者威利塔罗(Willy Tarreau)在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计

    官网网站

    HAProxy分为企业版,社区版。

    HAProxy功能

    HAProxy功能:

    • TCP和HTTP反向代理
    • 可作为SSL/TSL服务器
    • 可以针对HTTP请求添加cookie,进行路由后端服务器
    • 可平衡负载至后端服务器,并支持持久连接
    • 支持所有主服务器故障切换至备用服务器
    • 支持专用端口实现监控服务
    • 支持不影响现有连接情况下停止接受新连接请求
    • 可以在双向添加,修改或删除HTTP报文首部
    • 响应报文压缩
    • 支持基于pattern实现连接请求的访问控制
    • 通过特定的URI为授权用户提供详细的状态信息

    不具备的功能:

    • 正向代理 squid,nginx
    • 缓存代理 varnish
    • web服务 nginx.tengine.apache. php.tomcat
    • UDP 目前不支持UDP协议,2.1版本会支持UDP协议代理
    • 单机性能–LVS

    三大软件负载均衡器对比(LVS Nginx Haproxy)

    LVS:

    1. 抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
    2. 工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生
    3. 稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
    4. 应用范围比较广,可以对所有应用做负载均衡
    5. 不支持正则处理,不能做动静分离
    6. 支持负载均衡算法:rr(轮循)、wrr(加权轮循)、lc(最小连接)、wlc(加权最小连接)
    7. 配置较复杂,对网络依赖比较大,稳定性很高

    Ngnix:

    1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构
    2. Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能
    3. Nginx安装和配置比较简单,测试起来比较方便
    4. 也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发
    5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
    6. Nginx对请求的异步处理可以帮助节点服务器减轻负载
    7. Nginx仅能支持http、https和E-mail协议,这样就使得其在适用范围上较窄
    8. 不支持Session的直接保持,但能通过ip_hash来解决。对Big request header的支持不是很好
    9. 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(加权轮循)、Ip-hash(Ip哈希)
    10. Nginx还能做Web缓存服务器即:Cache功能

    HAProxy:

    1. 支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机
    2. 能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
    3. 支持url检测,对后端服务器出问题的检测会有很好的帮助
    4. 更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
    5. 单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度
    6. HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡
    7. 支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
    8. 不能做Web缓存服务器即Cache

    三大软件负载均衡器适用业务场景

    1. 网站建设初期,可以选用Nigix/HAproxy作为反向代理负载均衡(或者流量不大都可以不选用负载均衡),因为其配置简单,性能也能满足一般的业务场景。如果考虑到负载均衡器是有单点问题,可以采用Nginx+Keepalived/HAproxy+Keepalived避免负载均衡器自身的单点问题。
    2. 网站并发达到一定程度之后,为了提高稳定性和转发效率,可以使用LVS、毕竟LVS比Nginx/HAproxy要更稳定,转发效率也更高。不过维护LVS对运维人员的要求也会更高,投入成本也更大。

    注:Nginx与Haproxy比较:Nginx支持七层、用户量最大,稳定性高,比较可靠。Haproxy支持四层和七层,支持更多的负载均衡算法,支持session保存等。具体选型看使用场景,目前来说Haproxy由于弥补了一些Nginx的缺点用户量也在不断提升。

    HAProxy安装及基础配置

    默认yum源

    默认的base仓库中包含haproxy的安装包文件,但是版本比较旧,是1.5.18的版本,距离当前版本已经有较长时间没有更新,由于版本比较旧所以有很多功能不支持,如果对功能和性能没有要求可以使用此版本,否则推荐使用新版本。

    yum install -y haproxy
    
    验证haprovy版本
    haproxy -v
    
    HA-Proxy version 1.5.18 2016/05/10
    Copyright 2000-2016 Willy Tarreau <willy@haproxy.org>
    

    第三方安装包

    去国外网站下载:https://pkgs.org/search/?q=haproxy
    选择centos7

    #基于互联网在线安装
    # cheese-release-7-1.noarch.rpm 这个包也必须下载 因为是依赖
    rpm -ivh cheese-release-7-1.noarch.rpm
    
    会在/etc/yum.repos.d/ 下产生一个新的cheese.repo
    
    yum install -y haproxy-1.8.14-1.el7.x86_64.rpm 
    
    #验证haproxy版本
    haproxy -v
    HA-Proxy version 1.8.26 2020/08/03
    Copyright 2000-2020 Willy Tarreau <willy@haproxy.org>
    
    
    cat /lib/systemd/system/haproxy.service 
    
    [Unit]
    Description=HAProxy Load Balancer
    After=network.target
    
    [Service]
    Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"
    EnvironmentFile=-/etc/sysconfig/haproxy
    ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q
    ExecStart=/usr/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE $OPTIONS
    ExecReload=/usr/sbin/haproxy -f $CONFIG -c -q
    ExecReload=/bin/kill -USR2 $MAINPID
    KillMode=mixed
    Type=notify
    
    [Install]
    WantedBy=multi-user.target
    
    

    编译安装HAProxy

    源码包下载地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
    我下载的是 haproxy-2.3.5.tar.gz

    解决HAProxy的依赖环境

    解决lua环境

    HAProxy支持基于lua实现功能扩展,lua是一种小巧的脚本语言,于1993年由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

    Lua应用场景
    游戏开发
    独立应用脚本
    web应用脚本
    扩展和数据库插件,如MySQL Proxy
    安全系统,如入侵检测系统

    由于centos自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy。

    curl -R -O https://www.lua.org/ftp/lua-5.4.3.tar.gz
    tar xf lua-5.4.3.tar.gz -C /usr/local
    cd /usr/local/lua-5.4.3
    yum install -y readline-devel
    make linux
    
    查看安装版本
    ./src/lua
    lua-5.4.3  Copyright (C) 1994-2020 Lua.org, PUC-Rio
    > print('hello world')
    hello world
    

    解决各种编译依赖

    yum install -y gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zlib-devel ntpdate lsof tcpdump
    

    编译安装HAProxy

    进入haproxy源码包目录
    
    make -j `lscpu |awk 'NR==4{print $2}'` ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE
    _ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.3/src/ LUA_LIB=/usr/local/lua-5.4.3/src/ PREFIX=/usr/local/haproxy
    
    echo $?   检查是否成功编译
    
    make install PREFIX=/usr/local/haproxy
    

    验证HAProxy版本

    cd /usr/local/haproxy/sbin
    
    ./haproxy -v
    
    HA-Proxy version 2.3.5-5902ad9 2021/02/06 - https://haproxy.org/
    Status: stable branch - will stop receiving fixes around Q1 2022.
    Known bugs: http://www.haproxy.org/bugs/bugs-2.3.5.html
    Running on: Linux 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64
    
    
    

    HAProxy启动脚本

    vim /lib/systemd/system/haproxy.service 
    
    [Unit]
    Description=HAProxy Load Balancer
    After=syslog.target network.target
    
    [Service]
    ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
    ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    
    

    配置文件

    建立配置文件

    创建配置文件目录
    mkdir -p /etc/haproxy
    
    将样本配置文件拷贝到/etc/haproxy里
    cp examples/haproxy.cfg /etc/haproxy/haproxy.cfg
    
    如果没有haproxy.cfg 可以自己写一个
    vim /etc/haproxy/haproxy.cfg
    
    global
      user     haproxy	# 用户
      group    haproxy
      daemon
      nbproc   2
      #cpu-map  1  0
      #cpu-map  2  1
      maxconn  100000
      chroot   /usr/local/haproxy	# 锁定家目录
      pidfile  /var/lib/haproxy/haproxy.pid	 #pid文件位置
      log      127.0.0.1 local0 info
    
    defaults
      log      global
      option   httplog
      option   http-keep-alive
      option   redispatch
      option   forwardfor
      maxconn  100000
      mode     http
      retries  3
      timeout  check 5s
      timeout  connect 5s
      timeout  client 60s
      timeout  server 60s
      timeout  http-request 10s
      timeout  queue 1m
    
    listen stats
      bind     0.0.0.0:1234		# 端口1234
      log      global
      mode     http
      stats    enable
      stats    hide-version
      stats    realm Haproxy\ Statistics
      stats    uri     /stats	# 查看状态网页后缀
      stats    refresh 5s
      stats    auth    admin:123	# 授权访问 用户名:密码
    
    创建haproxy用户和组
    
    groupadd haproxy
    useradd -M -s /sbin/nologin haproxy -g haproxy
    
    给用户haproxy授权
    mkdir -p /var/lib/haproxy
    chown -R haproxy:haproxy /usr/local/haproxy/
    chown -R haproxy:haproxy /var/lib/haproxy/
    

    启动HAProxy

    systemctl start haproxy
    systemctl status haproxy
    

    浏览器输入自己ip:端口/stats
    在这里插入图片描述
    在这里插入图片描述
    至此 说明HAProxy安装成功

    配置文件详解

    HAPrpxy的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分。

    • global:全局配置段

      进程及安全配置相关的参数
      性能调整相关参数
      Debug参数

    • proxies:代理配置段

      defaults:为frontend,backend,listen提供默认配置
      frontend:前端,相当于nginx中的server { }
      backend:后端,相当于nginx中的upstrea { }
      listen:同时拥有前端和后端配置

    global配置参数

    chroot 锁定运行目录
    deamon 以守护进程运行
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin # socket文件
    user,group,uid,gid 运行haproxy的用户身份
    nbproc 开启的haproxy进程数,与CPU保持一致
    nbthread 指定每个haproxy进程开启的线程数,默认为每个进程一个线程
    cpu-map 1 0 绑定haproxy 进程至指定CPU
    cpu-map 2 1
    如果nbproc 4
    cpu-map 1 0
    cpu-map 2 1
    cpu-map 3 2
    cpu-map 4 3
    maxconn 每个haproxy进程的最大并发连接数
    maxsslconn每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
    maxconnrate 每个进程每秒创建的最大连接数量
    spread-checks 后端server状态check随机提前或延迟百分比时间,建议2-5(28%-50%)之间
    pidfile 指定pid文件路径
    log 127.0.0.1 local3 info #定义全局的syslog服务器;最多可以定义两个

    Proxies配置

    Proxies配置-defaults

    option redispatch 当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发(这个选项常用
    option abortonclose 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
    option http-keep-alive 开启与客户端的会话保持
    option forwardfor 透传客户端真实IP至后端web服务器
    mode http 设置默认工作类型
    timeout http-keep-alive 120s session会话保持超时时间,范围内会转发到相同的后端服务器
    timeout connect 120s 客户端请求从haproxy到后端server的最长连接等待时间(TCP之前)
    timeout server 600s 客户端请求从haproxy到后端服务端的请求处理超时时长(TCP之后)
    timeout client 600s 设置haproxy与客户端的最长非活动时间
    timeout check 5s 对后端服务器的默认检测超时时间

    Proxies配置-frontend

    bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中
    bind[<address>] :<port_range> [,...][param*]
    
    listen http_proxy	#监听http的多个IP的多个端口和sock文件
    	bind :80, :443, :8881-8810
    	bind 10.0.0.1:10080,10.0.0.1:10443
    	bind /var/run/ss1-frontend.sock user root mode 600 accept-proxy
    
    listen http_https_proxy whttps监听
    	bind :80
    	bind :443 ssl crt /etc/haproxy/site.pem
    	
    listen http_https_proxy_explicit #监听ipv6.ipv4和unix sock文件
    	bind ipv6e:80
    	bind ipv4epublic_ssl:443 ssl crt /etc/haproxy/site.pem
    	bind unix@ssl-frontend.sock user root mode 600 accept-proxy
    
    listen external_bind_app1 #监听file descriptor
    	bind "fdGs{FD_APP1y"
    	
    示例:
    frontend wEB_PORT
    	bind :80,:8088
    	bind 192.168.188.102:10080,:8801-8810,192.168.188.101:9001-9010
    	mode http/tcp	# 指定负载协议类型
    	use_backend backend_name # 调用的后端服务器组名称
    

    Proxies配置-backend

    定义一组后端服务器,backend服务器将被frontend进行调用。

    mode http/tcp	#指定负载协议类型
    option	#配置选项
    server	#定义后端real server
    
    • 注意:option后面加httpchk,smtpchk, mysql-check, pgsql-check,ssl-hello-chk方法,可用于实现更多应用层检测功能。
    check	# 对指定real进行健康状态检查,默认不开启
    addr IP	# 可指定的健康状态监测IP
    port num	# 指定的健康状态监测端口
    inter num	 # 健康状态检查间隔时间,默认2008 ms
    fall num	# 后端服务器失效检查次数,默认为3
    rise num	# 后端服务器从下线恢复检查次数,默认为2
    weight 	# 默认为1。最大值为256,0表示不参与负载均衡
    backup 	# 将后端服务器标记为备份状态
    disabled 	# 将后端服务器标记为不可用状态
    redirect prefix http://www.maomao.com/	# 将请求临时重定向至其它URL,只适用于http模式
    maxconn <maxconn>:当前后端server的最大并发连接数
    backlog <backlog>:当server的连接数达到上限后的后援队列长度
    
    示例:
    frontend WEB_PORT
      bind :80
      use_backend linux88-host
    
    backend linux88-host
      server web1 192.168.188.101:80 check  inter 2s fall 3 rise 5
      server web2 192.168.188.188:8080 check  inter 2s fall 3 rise 5
    
    

    在这里插入图片描述
    刷新页面会变

    frontend WEB_PORT
      bind :80
      use_backend linux88-host
    
    backend linux88-host
      server web1 192.168.188.101:80 check  inter 2s fall 3 rise 5
      server web2 192.168.188.188:8080 check addr 192.168.188.188 port 8080 inter 2s fall 3 rise 5
    
    

    frontend+backend配置实例

    #官网业务访问入口==============================
    frontend WEB_PORT_80
    	bind 192.168.188.10:80
    	mode http
    	use_backend web_prot_http_nodes
    	
    backend web_prot_http_nodes
    	mode http
    	option forwardfor
    	server 192.168.188.100 192.168.188.100:8080 check inter 3000 fall 3 rise 5
    	server 192.168.188.101 192.168.188.101:8080 check inter 3000 fall 3 rise 5
    

    Proxies配置-listen替代frontend+backend

    listen的方式是最常用的

    使用listen替换frontend和backend的配置方式:
    #官网业务访问入口=====================================
    listen WEB_PORT_80
    	bind 192.168.188.10:80
    	mode http
    	option forwardfor
    	server webi 192.168.188.100:80  check inter 3000 fall 3 rise 5
    	server web2 192.168.188.101:80  check inter 3000 fall 3 rise 5
    

    在这里插入图片描述

    HAProxy调度算法

    HAProxy通过固定参数balance指明对后端服务器的调度算法,该参数可以配置在listenbackend选项中。
    HAProxy的调度算法分为静态动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换。

    静态算法

    • 静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和响应速度等,且无法实时修改权重,只能靠重启HAProxy生效。

    服务器动态权重调整:

    yum install socat  
    Socat 是 Linux下的一个多功能的网络工具,名字来由是Socket CAT,
    Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。
    如IP、TCP、UDP、IPv6、Socket文件等。
    
    echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
    
    echo "get weight web_host/web1" | socat stdio /var/lib/haproxy/haproxy. sock1 (initial 1)
    
    echo "set weight web_host/web1 2"  socat stdio /var/lib/haproxy/haproxy.sockBackend is using a static LB algorithm and only accepts weights ' e%' and '100%"
    

    static-rr

    static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制

    listen web_host
    	bind 192.168.188.10:80,:8801-8810,192.168.188.10:9001-9010
    	mode http
    	log global
    	balance static-rr
    	server web1 192.168,188.100:80 weight 1 check inter 3000 fall 2 rise 5
    	server web2 192.168.188.101:80 weight 2 check inter 3000 fall 2 rise 5
    

    动态算法

    动态算法:基于后端服务器状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整 无需重启

    roundrobin

    roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不完全等于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个realserver,roundrobin为默认调度算法,且支持对real server权重动态调整。

    listen web_host
    	bind 192.168.188.10:80,:8801-8810,192.168.188.10:9001-9010
    	mode http
    	log global
    	balance roundrobin
    	server web1 192.168.188.100:80 weight 1 check inter 3000 fall 2 rise 5
    	server web2 192.168.188.101:80 weight 2 check inter 3000 fall 2 rise 5
    

    leastconn

    leastconn 加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度(新客户端连接),比较适合长连接的场景使用,比如MySQL等场景。

    listen web_host
    	bind 192.168.188.10:80,:8801-8810,192.168.188.10:9001-9010
    	mode http
    	log global
    	balance leastconn
    	server web1 192.168.188.100:80 weight 1 check inter 3000 fall 2 rise 5
    	server web2 192.168.188.101:80 weight 1 check inter 3000 fall 2 rise 5
    

    其他算法

    其他部分算法即可作为静态算法,又可以通过选项成为动态算法

    source

    源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至一个后端web服务器,比较适用于session保持/缓存业务等场景

    源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法和一致性hash

    map-base取模法

    map-based:取模法,基于服务器总权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变。
    所谓取模运算,就是计算两个数相除之后的余数,10%7=3,7%4=3,基于权重取模:(2^32-1)%(1+1+2)

    取模法配置示例:

    listen web_host
    	bind 192.168.188.10:80, :8801-8810,192.168.188.10:9001-9010
    	mode tcp
    	log global
    	balance source
    	server web1 192.168.188.100:80 weight 1 check inter 3000 fall 2 rise 5
    	server web2 192.168.188.101:80 weight 1 check inter 3000 fall 2 rise 5
    

    一致性hash

    一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,厨调度结果影响是局部的,不会引起大的变动,hash (o)mod n。

    hash对象
    hash对象到后端服务器的映射关系
    在这里插入图片描述
    配置示例

    listen web_host
    	bind 192.168.188.10:80,:8801-8810,192.168.188.10:9001-9010
    	mode tcp
    	log global
    	balance source
    	hash-type consistent
    	server web1 192.168.188.100:80 weight 1 check inter 3000 fall 2 rise 5
    	server web2 192.168.188.101:80 weight 1 check inter 3000 fall 2 rise 5
    

    HAProxy搭建集群

    详细的HAProxy搭建集群可以参考我另一篇文章:
    AProxy+Keepalived 负载均衡高可用配置

    展开全文
  • Haproxy搭建Web群集 对Haproxy以及部署环境的了解 Haproxy是一种比较流行的调度工具 Haproxy与LVS、Nginx比较 LVS:LVS性能最好,抗负载能力强,但是配置起来较复杂 Nginx:对群集节点健康检查功能不强,性能...

    Haproxy搭建Web群集

    对Haproxy以及部署环境的了解

    Haproxy是一种比较流行的调度工具

    Haproxy与LVS、Nginx比较

    LVS:LVS性能最好,抗负载能力强,但是配置起来较复杂

    Nginx:对群集节点健康检查功能不强,性能没有Haproxy好,安装配置简单,测试方便,但是仅支持http和emil的调度

    Haproxy:性能比Nginx好,支持url检测后端的服务器(mysql服务器超过10台不如LVS)

    算法(跟LVS一样)

    rr(轮询):调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载

    wrr(加权轮询):调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值

    lc(最少连接):调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上,如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载

    wlc(加权最少连接):在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值

    部署环境(如下图所示)

    通过访问192.168.1.20来实现后面两台服务器网页的跳转

    安装配置Haproxy

    1.安装依赖软件

    yum install -y pcre-devel bzip2-devel

    2.下载解压编译并安装源码包

    make TARGET=linux26

    然后make install

    3.建立配置文件

    创建目录并把配置模板复制到该目录

    mkdir /etc/haproxy

    cp examples/haproxy.cfg /etc/haproxy/

    mkdir -p /usr/share/haproxy

    4.优化路径

    cp examples/haproxy.init /etc/init.d/haproxy

    chmod +x /etc/init.d/haproxy

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

    5.修改配置文件启动服务即可

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

    global
    log 127.0.0.1    local0                \\配置日志记录,local0为日志设备,默认存放到系统日志
    log 127.0.0.1    local1 notice       \\notice为日志级别,通常有24个级别
    #log loghost    local0 info
    maxconn 4096                            \\最大连接数
    chroot /usr/share/haproxy
    uid 99                                   \\用户uid
    gid 99                                    \\用户gid
    daemon
    #debug
    #quiet
    defaults
    log    global                   \\定义日志为global配置中的日志定义
    mode    http                   \\模式为http
    option    httplog              \\采用http日志格式记录日志
    option    dontlognull         \\不记录健康检查的日志信息
    retries    3                        \\检查节点服务器失败次数
    #    redispatch                    \\如果后端有服务器宕机,强制切换到正常服务器
    maxconn    2000                \\最大连接数
    contimeout    5000              \\连接超时时间
    clitimeout    50000              \\客户端超时时间
    srvtimeout    50000             \\服务器超时时间
    listen    web1 0.0.0.0:80
    option    httpchk /index.html    \\检查服务器的index.html文件
    balance    roundrobin              \\算法
    #    cookie    SERVERID insert indirect nocache
    server    inst1 192.168.1.21:80 check inter 2000 fall 3        \\定义在线节点
    server    inst2 192.168.1.22:80 check inter 2000 fall 3        \\定义备份节点

    配置文件详解

    布局大致分为三部分

    1.global(全局配置部分)

    2.defaults(默认配置部分)

    3.listen(应用组件部分)

    全局配置global (参数是进程级的,通常和操作系统(OS)相关)

    maxconn 20480:默认最大连接数 

    log 127.0.0.1 local0:日志输出配置,所有日志都记录在本机系统日志,通过local0输出

    log 127.0.0.1 local1 notice:notice 为日志级别,通常有24个级别(error warringinfo debug)

    chroot /var/haproxy:chroot运行的路径 

    uid 99:所属运行的用户uid 

    gid 99:所属运行的用户组 

    daemon:以后台形式运行haproxy 

    nbproc 1:进程数量(可以设置多个进程提高性能) 

    pidfile /var/run/haproxy.pid:haproxy的pid存放路径,启动进程的用户必须有权限访问此文件 

    ulimit-n 65535:ulimit的数量限制 

    默认设置配置defaults(这些参数可以被利用配置到frontend,backend,listen组件)

    log global:定义日志为global配置中日志定义

    mode http:所处理的类别 (#7层 http;4层tcp  ) 

    maxconn 20480:最大连接数 

    option httplog:日志类别http日志格式 

    option httpclose:每次请求完毕后主动关闭http通道 

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

    option forwardfor:如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip  

    option redispatch:serverId对应的服务器挂掉后,强制定向到其他健康的服务器  

    option abortonclose:当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接 

    stats refresh 30:统计页面刷新间隔 

    retries 3:3次连接失败就认为服务不可用,也可以通过后面设置 

    balance roundrobin:默认的负载均衡的方式,轮询方式 

    balance source:默认的负载均衡的方式,类似nginx的ip_hash 

    balance leastconn:默认的负载均衡的方式,最小连接 

    contimeout 5000:连接超时 

    clitimeout 50000:客户端超时 

    srvtimeout 50000:服务器超时 

    timeout check 2000:心跳检测超时 

    配置监控页面的设置

    listen admin_status:Frontend和Backend的组合体,监控组的名称,按需自定义名称 

    bind 0.0.0.0:65532:监听端口 

    mode http:http的7层模式 

    log 127.0.0.1 local3 err:错误日志记录 

    stats refresh 5s:每隔5秒自动刷新监控页面 

    stats uri /admin?stats:监控页面的url 

    stats realm itnihao\ itnihao:监控页面的提示信息 

    stats auth admin:admin:监控页面的用户和密码admin,可以设置多个用户名 

    stats auth admin1:admin1:监控页面的用户和密码admin1 

    stats hide-version:隐藏统计页面上的HAproxy版本信息  

    stats admin if TRUE:手工启用/禁用,后端服务器(haproxy-1.4.9以后版本) 

    errorfile 403 /etc/haproxy/errorfiles/403.http 

    errorfile 500 /etc/haproxy/errorfiles/500.http 

    errorfile 502 /etc/haproxy/errorfiles/502.http 

    errorfile 503 /etc/haproxy/errorfiles/503.http 

    errorfile 504 /etc/haproxy/errorfiles/504.http 

    配置HAProxy的日志记录内容设置

    capture request  header Host           len 40 

    capture request  header Content-Length len 10 

    capture request  header Referer        len 200 

    capture response header Server         len 40 

    capture response header Content-Length len 10 

    capture response header Cache-Control  len 8 

    网站监测listen配置(监控haproxy后端服务器的监控状态)

    listen site_status 

    bind 0.0.0.0:1081:监听端口 

    mode http:http的7层模式 

    log 127.0.0.1 local3 err:[err warning info debug] 

    monitor-uri /site_status:网站健康检测URL,用来检测HAProxy管理的网站是否可以用,正常返回200,不正常返回503 

    acl site_dead nbsrv(server_web) lt 2:定义网站down时的策略当挂在负载均衡上的指定backend的中有效机器数小于1台时返回true 

    acl site_dead nbsrv(server_blog) lt 2 

    acl site_dead nbsrv(server_bbs)  lt 2  

    monitor fail if site_dead:当满足策略的时候返回503,网上文档说的是500,实际测试为503 

    monitor-net 192.168.1.21/32:来自192.168.1.21的日志信息不会被记录和转发 

    monitor-net 192.168.1.22/32 :来自192.168.1.22的日志信息不会被记录和转发 

    frontend配置(frontend配置里面可以定义多个acl进行匹配操作)

    frontend http_80_in:定义访问端口

    bind 0.0.0.0:80:监听端口,即haproxy提供web服务的端口,和lvs的vip端口类似 

    mode http:http的7层模式 

    log global:应用全局的日志配置 

    option httplog:启用http的log 

    option httpclose:每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式 

    option forwardfor:如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP 

    acl策略配置

    acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$:如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写 

    acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn:如果请求的域名满足www.itnihao.cn返回true -i是忽略大小写 

    acl itnihao    hdr(host) -i itnihao.cn:如果请求的域名满足itnihao.cn返回true -i是忽略大小写 

    acl file_req url_sub -i  killall=:在请求url中包含killall=,则此控制策略返回true,否则为false 

    acl dir_req url_dir -i allow:在请求url中存在allow作为部分地址路径,则此控制策略返回true,否则返回false 

    acl missing_cl hdr_cnt(Content-length) eq 0:当请求的header中Content-length等于0时返回true 

    acl策略匹配响应

    block if missing_cl:当请求中header中Content-length等于0阻止请求返回403 

    block if !file_req || dir_req:block表示阻止请求,返回403错误,当前表示如果不满足策略file_req,或者满足策略dir_req,则阻止请求 

    use_backend  server_web  if itnihao_web:当满足itnihao_web的策略时使用server_web的backend 

    use_backend  server_blog if itnihao_blog:当满足itnihao_blog的策略时使用server_blog的backend 

    redirect prefix http://blog.itniaho.cn code 301 if itnihao:当访问itnihao.cn的时候,用http的301挑转到http://192.168.16.3 

    default_backend server_bbs:以上都不满足的时候使用默认server_bbs的backend 

    backend的设置(server_web、server_blog、server_bbs)

    backend server_web

    backend server_web:服务器类型

    mode http:http的7层模式 

    balance roundrobin:负载均衡的方式,roundrobin平均方式 

    cookie SERVERID:允许插入serverid到cookie中,serverid后面可以定义 

    option httpchk GET /index.html:心跳检测的文件 

    server web1 192.168.1.21:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1:服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用, fall 3是3次失败认为服务器不可用,weight代表权重 

    server web2 192.168.1.22:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2:服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用, fall 3是3次失败认为服务器不可用,weight代表权重 

    backend server_blog

    backend server_blog 

    mode http:http的7层模式 

    balance roundrobin:负载均衡的方式,roundrobin平均方式 

    cookie SERVERID:允许插入serverid到cookie中,serverid后面可以定义 

    option httpchk GET /index.html:心跳检测的文件 

    server blog1 192.168.1.21:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1:服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重 

    server blog2 192.168.1.22:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2:服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重 

    backend server_bbs

    backend server_bbs

    mode http:http的7层模式 

    balance roundrobin:负载均衡的方式,roundrobin平均方式 

    cookie SERVERID:允许插入serverid到cookie中,serverid后面可以定义 

    option httpchk GET /index.html:心跳检测的文件 

    server bbs1 192.168.16.21:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1:服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重 

    server bbs2 192.168.1.22:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2:服务器定义,cookie 1表示serverid为web2,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重

    展开全文
  • Haproxy搭建Web群集

    2020-11-02 19:15:55
    Haproxy搭建Web群集1. Haproxy搭建Web群集概述1.1 简介1.2 请求方式1.3 POST方式1.4 返回状态码2. 负载均衡常用调度算法3. 常见的WEB群集调度器4. 使用Haproxy搭建Web群集4.1 调试存储服务器 192.168.100.204.2 ...

    1. Haproxy搭建Web群集概述

    1.1 简介

    1、Haproxy是目前比较流行的一种集群调度工具
    2、Haproxy 与LVS、Nginx的比较
    LVS性能最好,但是搭建相对复杂
    Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,性能没有Haproxy好
    3、本案例介绍使用Haproxy及Nginx搭建一套Web集群

    1.2 请求方式

    GET方式:从指定的服务器上获取数据
    GET请求能被缓存
    GET请求会被保存在浏览器记录里
    GET请求有长度的限制
    主要用于获取数据
    查询的字符串会显示在URL中,不安全

    1.3 POST方式

    提交数据给指定的服务器处理
    POST请求不能被缓存
    POST请求不会保存在浏览器记录里
    POST请求没有长度限制
    查询字符串不会显示在URL中,比较安全

    1.4 返回状态码

    正常的状态码为2××、3××
    异常的状态码为4××、5××

    2. 负载均衡常用调度算法

    1. RR(Round Robin):轮询调度

    有三个节点A、B、C 第一个用户会被指派到节点A,第二个用户会被指派到节点B,第三个
    用户会被直白到节点C,第四个用户会被指派到节点A,轮询分配访问,请求实现负载均衡效果,
    此算法还有一种加权轮询,即根据每个节点的权重轮询分配请求。

    1. LC(Least Connections):最小连接数

    根据后端的节点连接数大小动态的分配前端请求,列如,有三个节点A、B、C,连接数是
    A:4 B:5 C:6 第一个用户请求会被分配到A上,连接数会变为
    A:5 B:5 C:6 第二个用户请求会被分配到A上,连接数会变为
    A:6 B:5 C:6 第三个用户请求会被分配到B上,连接数会变为
    A:6 B:6 C:6
    此算法比较RR有很大的改进,是目前用的比较多的算法

    1. SH(Source Hashing):基于来源访问调度

    此算法用于一些有Session回话记录在服务器端的场景,可以基于源IP,cookie等做群集调度,
    列如,使用基于源IP的调度算法,有三个节点A、B、C,
    第一个用户第一次访问被指派到A,第二个用户第一次访问被指派到B,当地一个用户第二次访问
    时都会被指派到A,第二个用户访问都会被指派到B。实现群集的调度。此调度算法好处会实现会话保持。
    但某些IP访问量非常大的时候会引起负载不均衡,部分节点访问量超大,影响业务使用

    3. 常见的WEB群集调度器

    目前常见的WEB群集调度器分别为软件和硬件,软件通常使用开源的LVS、Haproxy、Nginx

    硬件一般使用比较多的F5,也有很多人使用国内一些产品,如梭子鱼、绿盟等

    4. 使用Haproxy搭建Web群集

    实验环境
    Haproxy服务器 192.168.100.50
    Nginx服务器1 192.168.100.40
    Nginx服务器2 192.168.100.30
    存储服务器 192.168.100.20

    4.1 调试存储服务器 192.168.100.20

    rpm -q nfs-utils    ###如果没装,yum -y install nfs-utils
    rpm -q rpcbind      ###如果没装,yum -y install rpcbind
    [root@localhost ~]# systemctl start nfs
    [root@localhost ~]# systemctl start rpcbind
    
    [root@localhost ~]# vi /etc/exports
    /opt/51xit 192.168.100.0/24 (rw,sync)
    /opt/52xit 192.168.100.0/24 (rw,sync)
    
    [root@localhost ~]# systemctl restart nfs
    [root@localhost ~]# systemctl restart rpcbind
    [root@localhost ~]# systemctl enable nfs
    [root@localhost ~]# systemctl enable rpcbind
    [root@localhost ~]# mkdir /opt/51xit /opt/52xit
    [root@localhost ~]# echo "this is www.51xit.com" >/opt/51xit/index.html
    [root@localhost ~]# echo "this is www.52xit.com" >/opt/52xit/index.html

    4.2 Nginx服务器1 192.168.100.40

    1、编译安装 Nginx

    Nginx 安装文件可以从官方网站 http://www.nginx.org/下载。
    下面以稳定版 Nginx 1.12.2为例   上传至/opt下
    [root@localhost ~]#yum -y install pcre-devel zlib-devel gcc-c++
    [root@localhost ~]# useradd -M -s /sbin/nologin nginx
    [root@localhost ~]# cd /opt
    [root@localhost ~]# tar zxvf nginx-1.12.2.tar.gz
    [root@localhost ~]# cd nginx-1.12.2
    [root@localhost nginx-1.12.2]# 
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx
    
    [root@localhost nginx-1.12.2]# make && make install
    
    [root@localhost nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    [root@localhost nginx-1.12.2]# ls -l /usr/local/sbin/nginx
    lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx
    

    2、Nginx 的运行控制
    检查配置文件
    与 Apache 的主程序 httpd 类似, Nginx 的主程序也提供了“-t”选项用来对配置文件进行
    检查, 以便找出不当或错误的配置。 配置文件 nginx.conf 默认位于安装目录下的 conf/子目
    录中。 若要检查位于其他位置的配置文件, 可使用“-c”选项来指定路径

    启动、 停止 Nginx
    killall -1 nginx                                                     ####安全重启
    killall -3 nginx                                                     ###停止服务
    注意点:如果出现: -bash: killall: command not found
    
    解决方案;yum -y install psmisc  
    [root@localhost ~]# nginx                                ####启动
    [root@localhost ~]# netstat -anpt | grep nginx
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
    7180/nginx: master

    3、添加 Nginx 系统服务

    [root@localhost ~]# vim /lib/systemd/system/nginx.service
    [Unit]
    Description=nginx                                                 ####描述
    After=network.target                                            ####描述服务类别
    [Service]
    Type=forking                                                          ####后台运行形式
    PIDFile=/usr/local/nginx/logs/nginx.pid                ####PID 文件位置
    ExecStart=/usr/local/nginx/sbin/nginx                  ####启动服务
    ExecReload=/usr/bin/kill -s HUP $MAINPID         ####根据 PID 重载配置
    ExecStop=/usr/bin/kill -s QUIT $MAINPID           ####根据 PID 终止进程
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    [root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
    [root@localhost ~]# systemctl enable nginx.service
    Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
    /usr/lib/systemd/system/nginx.service.
    这样一来, 就可以 systemctl 命令来启动、 停止、 重启、 重载 Nginx 服务器了, 方法是
    在执行时添加相应的 start、 stop、 restart、 reload 参数
    killall -3 nginx                                                     ###停止服务
    systemctl start nginx.service
    
    systemctl start nginx.service
    systemctl stop nginx.service
    systemctl reload nginx.service
    systemctl restart nginx.service
    systemctl status nginx.service

    4、安装httpd 挂载测试页

    [root@localhost ~]# showmount -e 192.168.100.20     ####如果还没发布,请到存储服务器发布下,exportfs -rv
    Export list for 192.168.100.20:
    /opt/51xit  (everyone)
    /opt/52xit  (everyone)
    
    [root@localhost ~]# mount 192.168.100.20:/opt/51xit /usr/local/nginx/html/
    [root@localhost ~]# vi /etc/fstab 
    192.168.100.20:/opt/51xit/ /usr/local/nginx/html/ nfs     rw,tcp,intr     0 1        ###开机自动挂载,注意格式对齐
    
    [root@localhost nginx-1.12.2]# systemctl restart nginx
    
    

    5、使用 elinks 浏览器测试挂载网页是否正常

    [root@localhost ~]# yum -y install elinks
    [root@localhost ~]# elinks http://localhost       #####使用 elinks 浏览器      ####显示“this is www.51xit.com”页面,表明 Nginx 服务已经正常运行

    4.3 Nginx服务器1 192.168.100.30

    配置方式和Nginx服务器1 192.168.100.40的方式一样

    4.4 配置Haproxy 服务器 192.168.100.50

    1、编译安装 Haproxy

    上传 haproxy-1.4.24.tar.gz 到/opt目录下
    [root@localhost ~]# yum -y install pcre-devel bzip2-devel gcc gcc-c++
    [root@localhost ~]# cd /opt
    [root@localhost opt]# tar xzvf haproxy-1.4.24.tar.gz 
    [root@localhost opt]# cd haproxy-1.4.24/
    [root@localhost haproxy-1.4.24]# make TARGET=linux26
    [root@localhost haproxy-1.4.24]# make install

    2、配置Haproxy 服务

    [root@localhost haproxy-1.4.24]# mkdir /etc/haproxy
    [root@localhost haproxy-1.4.24]# cp examples/haproxy.cfg /etc/haproxy/
    [root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg 
    global
            log 127.0.0.1   local0
            log 127.0.0.1   local1 notice
            #log loghost    local0 info
            maxconn 4096
            #chroot /usr/share/haproxy
            uid 99
            gid 99
            daemon
            #debug
            #quiet
    
    defaults
            log     global
            mode    http
            option  httplog
            option  dontlognull
            retries 3
            #redispatch
            maxconn 2000
            contimeout      5000
            clitimeout      50000
            srvtimeout      50000
    
    listen  webcluster 0.0.0.0:80
            option httpchk GET /index.html
            balance roundrobin
            server inst1 192.168.100.42:80 check inter 2000 fall 3
            server inst2 192.168.100.43:80 check inter 2000 fall 3

    ####上述配置文件解释###
    1、Haproxy配置文件通常分为三个部分
    global:为全局配置
    defaults:为默认配置
    listen:为应用组件配置
    global配置参数
    log 127.0.0.1 local0:配置日志记录,配置日志记录,local0为日志设备,默认存放到系统日志
    log 127.0.0.1 local1 notice:notice为日志级别,通常有24个级别
    maxconn 4096:最大连接数
    uid 99:用户uid gid 99:用户gid

    2、defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置
    log global:定义日志为global配置中的日志定义
    mode http:模式为http
    option httplog:采用http日志格式记录日志
    option dontlognull :保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
    retries 3:检查节点服务器失败连续达到三次则认为节点不可用
    maxconn 2000:最大连接数
    contimeout 5000:连接超时时间
    clitimeout 50000:客户端超时时间
    srvtimeout 50000:服务器超时时间

    3、listen配置项目一般为配置应用模块参数
    listen appli4-backup 0.0.0.0:10004:定义一个appli4-backup的应用
    option httpchk /index.html:检查服务器的index.html文件
    option persist :强制将请求发送到已经down掉的服务器
    balance roundrobin:负载均衡调度算法使用轮询算法
    server inst1 192.168.114.56:80 check inter 2000 fall 3:定义在线节点
    server inst2 192.168.114.56:81 check inter 2000 fall 3 backup:定义备份节点

    [root@localhost haproxy-1.4.24]# cp examples/haproxy.init /etc/init.d/haproxy
    [root@localhost haproxy-1.4.24]# chmod 755 /etc/init.d/haproxy
    [root@localhost haproxy-1.4.24]# chkconfig --add haproxy
    [root@localhost haproxy-1.4.24]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
    [root@localhost haproxy-1.4.24]# service haproxy start
    [root@localhost haproxy-1.4.24]# systemctl stop haproxy.service 
    [root@localhost haproxy-1.4.24]# systemctl start haproxy.service 

    4.5 测试

    浏览器登录192.168.100.50 切换 会发现不同的网站页面 说明已经实现了负载均衡

    5. Haproxy日志

    [root@localhost haproxy-1.4.24]# vi /etc/haproxy/haproxy.cfg
    global                       ####下面log开头的 统统去掉换下面的配置
            log /dev/log    local0 info
            log /dev/log    local1 notice
    [root@localhost haproxy-1.4.24]# systemctl restart haproxy.service        
            
    [root@localhost haproxy-1.4.24]# touch /etc/rsyslog.d/haproxy.conf
    [root@localhost haproxy-1.4.24]# vi /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
    & ~
    
    [root@localhost haproxy-1.4.24]#  systemctl restart rsyslog.service 
    
    [root@localhost haproxy-1.4.24]# tail -f /var/log/haproxy/haproxy-info.log 
    Sep 27 00:08:33 localhost haproxy[13864]: 192.168.32.1:57172 [27/Sep/2018:00:07:43.232] webcluster webcluster/inst1 1/0/1/2/50006 404 726 - - cD-- 2/2/1/0/0 0/0 "GET /favicon.ico HTTP/1.1"
    Sep 27 00:08:40 localhost haproxy[13864]: 192.168.32.1:57223 [27/Sep/2018:00:07:47.477] webcluster webcluster/inst2 0/0/1/2/52806 200 750 - - cD-- 0/0/0/0/0 0/0 "GET / HTTP/1.1"
    
    网页打开:192.168.100.20网站 然后查看日志文件不断生成情况

    6. Haproxy参数优化

    随着企业网站负载增加,haproxy参数优化相当重要
    maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10240
    daemon:守护进程模式,Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
    nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
    retries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次

    option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
    timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
    timeout http-request:http请求超时时间,建议将此时间设置为5~10s,增加http连接释放速度
    timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了

    展开全文
  • Haproxy搭建web群集

    2021-02-01 17:14:48
    Haproxy搭建web群集

    一、常见的Web集群调度器

    目前常见的Web集群调度器分为软件和硬件
    软件通常使用开源的LVS、Haproxy、Nginx

    LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好

    硬件一般使用的比较多的是F5,也有很多人使用梭子鱼、绿盟等国内产品

    二、Haproxy应用分析

    LVS在企业应用中抗负载能力很强,但存在不足
    LVS不支持正则处理,不能实现动静分离
    对于大型网站,LVS的实施配置复杂,维护成功相对较高

    Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
    适用于负载大的Web站点
    运行在硬件上可支持数万计的并发连接的连接请求

    三、Haproxy调度算法原理

    Haproxy支持多种调度算法,最常用的有三种

    (1)、RR (Round Robin)

    RR算法是最简单常用的一种算法,即轮询调度

    (2)、LC(Least Connections)

    最小连接数算法,根据后端的节点连接数大小动态分配前端请求。

    (3)、SH(Source Hashing)

    基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度

    四、Haproxy搭建 Web 群集

    实验所需安装包
    微云链接:Haproxy、Nginx安装包
    haproxy-1.5.19.tar.gz
    nginx-1.12.0.tar.gz

    1、部署haproxy服务器(192.168.246.10)

    (1)、关闭防火墙,将安装Haproxy所需软件包传到/opt目录下

    systemctl stop firewalld
    setenforce 0
    
    cd /opt
    haproxy-1.5.19.tar.gz
    

    (2)、编译安装 Haproxy

    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
    make install
    

    参数说明
    在这里插入图片描述

    使用uname -r查看内核,如:2.6.18-371.el5,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628

    (3)、Haproxy服务器配置

    mkdir /etc/haproxy
    cp examples/haproxy.cfg /etc/haproxy/
    
    cd /etc/haproxy/
    vim haproxy.cfg
    global
    

    ----4~5行–修改,配置日志记录,local0为日志设备,默认存放到系统日志-----------------

    log /dev/log   local0 info		
    log /dev/log   local0 notice
    #log loghost    local0 info
    maxconn 4096					#最大连接数,需考虑ulimit-n限制
    

    ----–8行–注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉-------------

    #chroot /usr/share/haproxy
    uid 99							#用户UID
    gid 99							#用户GID
    daemon							#守护进程模式
    
    defaults        
    log     global					#定义日志为global配置中的日志定义
    mode    http					#模式为http
    option  httplog					#采用http日志格式记录日志
    option  dontlognull				#不记录健康检查日志信息
    retries 3						#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
    redispatch						#当服务器负载很高时,自动结束当前队列处理比较久的连接
    maxconn 2000					#最大连接数
    contimeout      5000			#连接超时时间
    clitimeout      50000			#客户端超时时间
    srvtimeout      50000			#服务器超时时间
    

    –----删除下面所有listen项–,添加-----------------------------------------------------------------------

    listen  webcluster 0.0.0.0:80		
    option httpchk GET /test.html	#检查服务器的test.html文件
    balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
    server inst1 192.168.80.100:80 check inter 2000 fall 3		#定义在线节点
    server inst2 192.168.80.101:80 check inter 2000 fall 3
    

    2、编译安装Nginx服务器(192.168.246.20、192.168.246.30)

    systemctl stop firewalld
    setenforce 0
    
    yum install -y pcre-devel zlib-devel gcc gcc-c++ make 
    
    useradd -M -s /sbin/nologin nginx
    
    cd /opt
    tar zxvf nginx-1.12.0.tar.gz -C /opt/
    
    cd nginx-1.12.0/
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
    
    make && make install
    
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    
    nginx      #启动nginx 服务
    

    -----------------192.168.246.20-----------------------------------------------------------------------------------

    echo "this is kgc web" > /usr/local/nginx/html/test.html
    

    ---------------192.168.246.30--------------------------------------------------------------------------------------

    echo "this is benet web" > /usr/local/nginx/html/test.html
    

    ----------------------启动Haproxy服务(192.168.24610)------------------------------------------------

    cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
    cd /etc/init.d/
    ls
    chmod +x haproxy
    service haproxy start
    

    3、测试 Web集群

    在客户端使用浏览器打开 http://192.168.246.10/test.html ,不断刷新浏览器测试负载均衡效果
    在这里插入图片描述
    在这里插入图片描述

    五、日志定义

    默认haproxy的日志是输出到系统的syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。

    vim /etc/haproxy/haproxy.cfg
    global
    log /dev/log local0 info
    log /dev/log local0 notice
    
    service haproxy restart
    

    需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。

    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
    &~
    

    说明:
    这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

    systemctl restart rsyslog.service
    
    tail -f/var/log/haproxy/haproxy-info.log		#查看haproxy的访问请求日志信息
    
    展开全文
  • haproxy群集搭建web群集

    2017-04-24 21:20:18
    haproxy群集调度器搭建web群集1:haproxy调度器是目前市场上比较流行的群集调度器,当然调度器有好多种类:lvs、nginx、和haproxy,接下来对它们进行比较看看它们的优缺点:lvs:工作在七层模型的4层传输层:根据ip+...
  • haproxy的web群集

    2021-05-25 09:42:09
    haproxy的web群集一、haproxy1、haproxy的作用和特点2、常见的软件负载均衡工具3、http请求的方式和常见的http协议请求代码4、安装haproxy 一、haproxy 1、haproxy的作用和特点 1)haproxy的作用 负载均衡调度工具...
  • Haproxy搭建 Web 群集实验

    千次阅读 2021-02-07 23:09:03
    这里写目录标题Haproxy搭建 Web 群集实验实验环境Haproxy服务器部署(192.168.199.10)关闭防火墙,将软件包传到/opt目录下编译安装 HaproxyHaproxy服务器配置Nginx节点服务器部署(192.168.199.20、192.168.199.30...
  • 使用Haproxy搭建Web群集

    2020-11-27 16:23:30
    使用Haproxy搭建你Web群集 技能展示:: 熟悉Haproxy功能及常用群集调度算法 学会Haproxy常用配置 学会Haproxy参数优化 简介 在前面已经学习了使用Nginx. LVS做负载均衡群集,它们都具有各自的特点,本章将要介绍另、一...
  • 一、常见的Web群集调度器: 1、分为软件和硬件。 2、软件通常使用开源的LVS(4层)、Haproxy(4层)、Nginx(4、7层一身)。 3、硬件一般使用比较多的是F5,也有很多人使用国内一些产品,如梭子鱼、绿盟。 4、四层...
  • Haproxy搭建 Web 群集

    2021-04-26 19:29:37
    文章目录一、常见的web集群调度器二、Haproxy应用分析三、Haproxy调度算法原理四、Haproxy搭建web群集1、编译安装Nginx服务器2、部署Haproxy服务器3、测试web集群五、日志定义六、Haproxy参数优化 一、常见的web集群...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,412
精华内容 1,364
关键字:

web群集