Haproxy高可用

HAProxy - Wikipedia

HAProxy概述

简介
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql的均衡负载。
拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
和nginx的异同
相同点:在功能上,Haproxy通过反向代理方式实现 WEB均衡负载。和 Nginx,ApacheProxy,lighttpd,Cheroke 等一样。
不同点:Haproxy 仅仅是一款的用于均衡负载的应用代理。其自身并不能提供web服务。

HAProxy负载均衡算法

source 根据请求源IP
static-rr 根据权重
leastconn 最少连接者先处理
uri 根据请求的uri
url_param 根据请求的url参数
rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
roundrobin 轮询方式

实验流程

结构

Haproxy高可用

基础实验

实验环境:10端作为haproxy服务器,11端作为http1,12端作为http2

11、12http客户端下载httpd,并创建默认网站页面

Haproxy高可用

10服务器端

yum -y install haproxy
vim /etc/haproxy/haproxy.cfg
修改端口和需要轮询的服务器

Haproxy高可用
Haproxy高可用

检测配置文件
haproxy -f /etc/haproxy/haproxy.cfg -c

Haproxy高可用

systemctl start haproxy

netstat -anput | grep haproxy

Haproxy高可用

服务器端curl 本机IP

Haproxy高可用

配置文件详解

#---------------------------------------------------------------------
# Example configuration for a possible web application.  See the
# full configuration options online.
#
#   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------

#---------------------------------------------------------------------
# Global settings   #全局配置
#---------------------------------------------------------------------
global	
    # to have these messages end up in /var/log/haproxy.log you will
    # need to:
    #
    # 1) configure syslog to accept network log events.  This is done
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
    #    /etc/sysconfig/syslog
    #
    # 2) configure local2 events to go to the /var/log/haproxy.log
    #   file. A line like the following can be added to
    #   /etc/sysconfig/syslog
    #
    #    local2.*                       /var/log/haproxy.log
    #
    log         127.0.0.1 local2	 #日志文件的输出定向。产生的日志级别为local3. 系统中local1-7,用户自己定义

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000		#最大连接数
    user        haproxy		#用户名
    group       haproxy	        #用户组
    daemon	#以后台形式运行haproxy

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#其他配置段设置默认参数,会覆盖之前的配置。
#---------------------------------------------------------------------
defaults
    mode                    http	#工作模式,所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
    log                     global	#应用全局的日志配置
    option                  httplog		#日志类别,记载http日志
    option                  dontlognull	# 启用该项,日志中将不会记录空连接。
    option http-server-close	 #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
    option forwardfor       except 127.0.0.0/8	#如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
    option                  redispatch	#当serverid对应的服务器挂掉后,强制定向到其他健康服务器
    retries                 3	#3次连接失败就认为服务器不可用,主要通过后面的check检查
    timeout http-request    10s		#http请求超时时间
    timeout queue           1m		#一个请求在队列里的超时时间
    timeout connect         10s		#连接超时时间
    timeout client          1m	 #客户端连接超时时间
    timeout server          1m	#服务器端连接超时时间
    timeout http-keep-alive 10s	#连接保持
    timeout check           10s		 #检测超时
    maxconn                 3000	#最大连接数(局部配置)

#---------------------------------------------------------------------
# main frontend which proxys to the backends
# 描述了一组监听的套接字,它们接受客户端连接
#---------------------------------------------------------------------
frontend  main *:80		#监听地址为80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js	#这里定义了一个acl规则

    use_backend static          if url_static	#如果匹配到了acl,则访问后端的static模块
    default_backend             app	#定义一个名为app前端部分。此处将对应的请求转发给后端

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#使用了静态动态分离(如果url_path匹配 .jpg .gif .png .css .js静态文件则访问此后端)
#---------------------------------------------------------------------
backend static
    balance     roundrobin
    server      static 127.0.0.1:80 check	#静态文件部署在本机(也可以部署在其他机器或者squid缓存服务器)

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app	#定义一个名为app后端部分,需要与frontend里面配置项default_backend 值相一致
    balance     roundrobin
    server  app1 192.168.1.11:80  weight 1 check	#默认为wrr算法,默认权重为1:1
    server  app2 192.168.1.12:80 weight 2 check
# server  web03 172.31.2.35:80  check inter 2000 fall 3 weight 30              #定义的多个后端

haproxy健康检测

选项
server node1 192.168.179.131:8081 check inter 2000 rise 3 fall 3 weight 30
check:启动健康检测
inter 2000 健康检查时间间隔2秒
rise 3 检测多少次才认为是正常的
fall 3 失败多少次才认为是不可用的
weight 30 权重

Haproxy高可用
Haproxy高可用
Haproxy高可用

发布者:LJH,转发请注明出处:https://www.ljh.cool/6087.html

(0)
上一篇 2021年9月11日 下午5:16
下一篇 2021年11月6日 下午3:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注