HAProxy是高性能的企业级负载均衡调度器,同时支持四层TCP和七层HTTP协议的负载均衡调度,以及支持基于cookie的持久性,支持正则表达式及web状态统计、自动故障切换等优点,因此广泛被应用于企业内业务系统集群的入口作为负载均衡调度器。

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

global:全局配置段

1、进程及安全配置相关的参数

2、性能调整相关参数

3、Debug参数

global配置参数官方文档:https://cbonte.github.io/haproxy-dconv/2.0/intro.html

global   # 全局段配置
chroot #(安全配置选项)锁定haproxy用户运行目录。 deamon #以后台守护进程运行 stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin #socket文件路径、文件权限及管理级别 user haproxy # 设置运行haproxy的用户(非登录用户),也可使用uid关键字替代。 group haproxy # 设置运行haproxy的用户组,也可使用gid关键字替代。 nbproc <number> #开启的haproxy进程数,通常与CPU核心数保持一致,开启多进程提高并发处理能力。 cpu-map 1 0 #将第1个子进程绑定到0号CPU核心,以此类推(优化配置项,haproxy开启了多进程时,绑定haproxy子进程至指定CPU核心上,避免多个子进程在不同CPU核心上切换,提升性能) nbthread <number> #指定每个haproxy进程开启的线程数,默认为每个进程一个线程,与nbproc互斥,即开启多进程时无法开启多线程,通常适合单核心CPU开启此项提升处理能力。 maxconn <number> #单haproxy进程的最大并发连接数,需要调整优化系统最大文件描述符数(ulimit -n)。 maxconnrate <number> #单个haproxy进程的连接每秒的创建速率上限 maxsslconn <number> #单个haproxy进程的ssl连接最大并发连接数,用于haproxy配置了证书的场景下。需要调整优化系统最大文件描述符数(ulimit -n)。 maxsslrate <number> #单haproxy进程的ssl连接每秒的创建速率上限,用于haproxy配置了证书的场景下。 spread-checks #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间。 pidfile /var/lib/haproxy/haproxy.pid #指定pid文件路径 log 127.0.0.1 local3 info #定义全局的syslog服务器到本机rsyslog服务的local3设备上,最多可以定义两个。

proxies:代理配置段

官方文档:https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#4

defaults [name] #默认配置项,针对以下的frontend、backend和lsiten生效,可以多个name

frontend [name] #前端servername,类似于Nginx的一个虚拟主机server{}

backend [name] #后端服务器组,等于nginx的upstream{}

listen [name] #将frontend和backend合并在一起配置

注意:name字段只能使用"-"、"_"、"."、":",并且严格区分大小写,例如:Web和web是完全不同的两组服务器。

Proxies配置-defaults

defaults # 默认部分的定义

    option redispatch # 当使用了cookie会话保持时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。

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

    option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来

    option httpclose #使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除,如果该值为空将会添加为:Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关闭,连接就会一直处于打开,直到超时。

    option http-keep-alive #开启与客户端的会话保持

    option forwardfor #透传客户端真实IP至后端web服务器方便访问日志统计

    mode http #默认工作类型(mode {http|tcp|health} 。http是七层模式,tcp是四层模式,health是健康检测,返回OK)

    timeout connect 120s #客户端请求到后端server的最长连接等待时间(TCP三次握手之前)

    timeout server 600s #客户端请求到后端服务端的超时超时时长(TCP三次握手之后)默认单位是毫秒

    timeout client 600s #与客户端的最长非活动时间,默认单位是毫秒

    timeout http-keep-alive 120s #session会话保持超时时间,范围内会转发到相同的后端服务器,默认单位是毫秒。

    timeout check 5s #对后端服务器的检测超时时间

haproxy状态监控web页配置

listen status # 定义一个名为status的部分作为web状态监控页面
bind 0.0.0.0:9999 # 定义监听的网络套接字地址 mode http # 定义为HTTP模式 log global # 继承global中log的定义 stats refresh 30s # stats是haproxy的一个统计页面的套接字,该参数设置统计页面的刷新间隔为30s stats uri /admin?stats # 设置统计页面的uri为/admin?stats stats realm Private lands # 设置统计页面认证时的提示内容 stats auth admin:password # 设置统计页面认证的用户和密码,如果要设置多个,另起一行写入即可 stats hide-version # 隐藏统计页面上的haproxy版本信息

Proxies配置-frontend

bind:指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中

listen http_proxy #监听http的多个IP的多个端口和sock文件
bind :80,:443,:8801-8810
bind 10.0.0.1:10080,10.0.0.1:10443
bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy listen http_https_proxy #https监听
bind :80
bind :443 ssl crt /etc/haproxy/site.pem #https证书路径 listen http_https_proxy_explicit #监听ipv6、ipv4和unix sock文件
bind ipv6@:80
bind ipv4@public_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 "fd@${FD_APP1}"

frontend配置生产示例:

frontend WEB_PORT  #定义一个名为WEB_PORT的前端部分
bind :80,:8080
bind 192.168.7.102:10080,:8801-8810,192.168.7.101:9001-9010 #可同时监听多个IP和端口范围
mode http/tcp #指定负载协议类型
use_backend backend_name #调用的后端服务器组名称

Proxies配置-backend:

mode http/tcp #指定负载协议类型
option #配置选项
server #定义后端real server check #对指定real进行健康状态检查,默认不开启 addr IP #可指定的健康状态监测IP port num #指定的健康状态监测端口 inter num #健康状态检查间隔时间,默认2000 ms fall num #后端服务器失效检查次数,默认为3 rise num #后端服务器从下线恢复检查次数,默认为2 weight #默认为1,最大值为256,0表示不参与负载均衡 backup #将后端服务器标记为备份状态 disabled #将后端服务器标记为不可用状态 redirect prefix http://www.magedu.net/ #将请求临时重定向至其它URL,只适用于http模式。 maxconn num #当前后端server的最大并发连接数 backlog num #当server的连接数达到上限后的后援队列长度

注意:option后面加httpchk,smtpchk,mysql-check,pgsql-check,ssl-hello-chk方法,可用于实现更多应用层检测功能。

frontend+backend配置实例

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

Proxies配置-listen

listen方式写法代码更加简洁,推荐使用listen替换frontend和backend,listen配置方式举例如下:

#官网业务访问入口=====================================
listen WEB_PORT_80
bind 192.168.7.248:80
mode http
option forwardfor
server web1 192.168.7.101:80 check inter 3000 fall 3 rise 5
server web2 192.168.7.102:80 check inter 3000 fall 3 rise 5

注意:通常为了解决单点失败问题,HAProxy会结合Keepalived实施双机热备高可用,因此listen段bind监听的IP地址通常应该配置为虚拟VIP地址,因此需要打开系统内核参数net.ipv4.ip_nonlocal_bind=1,允许harpoxy及keepalived程序监听当前状态下本机不存在的IP地址(当VIP漂移到另外节点时)。

HAProxy的基础配置详解的更多相关文章

  1. Java进阶知识15 Spring的基础配置详解

    1.SSH各个的职责 Struts2:是web框架(管理jsp.action.actionform等).Hibernate:是ORM框架,处于持久层.Spring:是一个容器框架,用于配置bean,并 ...

  2. Java进阶知识04 Struts2的基础配置详解

    1.Struts2的原理/流程步骤 简单的理解:    1.客户端发送一个request请求,Tomcat服务器接收到的请求经过web.xml配置文件去处理,进入struts2的核心过滤器,从而进入s ...

  3. Java进阶知识03 Hibernate的基础配置详解

    1.Hibernate的原理/流程步骤 1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象 ...

  4. nginx 基础配置详解

    #本文只对nginx的最基本配置项做一些解释,对于配置文件拆分管理,更详细的集群健康检查的几种方式,检查策略等在此不做详细解释了. #运行用户user nobody;#启动进程,通常设置成和cpu的数 ...

  5. Hibernate游记——装备篇《一》(基础配置详解)

    Hibernate配置文件可以有两种格式,一种是 hibernate.properties ,另一种是 hibernate.cfg.xml 后者稍微方便一些,当增加hbm映射文件的时候,可以直接在 h ...

  6. haproxy 安装与配置文件详解

    本文主要阐述haproxy的安装配置详解,对于它的概念,作用,功能,和其它LB软件的区别,优点,缺点等不再进行说明. 一. haproxy 的安装配置 # cat /etc/redhat-releas ...

  7. keepalived原理(主从配置+haproxy)及配置文件详解

    下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1.web2.web3.img1.img2.但是由于haproxy会存在单点故障问题,因此使 ...

  8. 负载均衡之Haproxy配置详解(及httpd配置)

    下图描述了使用keepalived+Haproxy主从配置来达到能够针对前段流量进行负载均衡到多台后端web1.web2.web3.img1.img2.但是由于haproxy会存在单点故障问题,因此使 ...

  9. 2-4、nginx特性及基础概念-nginx web服务配置详解

    Nginx Nginx:engine X 调用了libevent:高性能的网络库 epoll():基于事件驱动event的网络库文件 Nginx的特性: 模块化设计.较好扩展性(不支持模块动态装卸载, ...

随机推荐

  1. display:none和visibility:hidden

    w3school学习网:https://www.w3school.com.cn/tiy/t.asp?f=hdom_style_display_none display: none----将元素的显示设 ...

  2. Beta/Gamma事后分析

    目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 对照敏捷开发的原则, 你觉得你们小组做得最好的是哪几个原则? 请列出具体的事例. 照片 设想和目标 我们的 ...

  3. Azure DevOps Server 2019 第一个补丁包(2019.0.1 RTW)

    在Azure DevOps Server 2019正式发布后的2周左右时间,微软快速发布了第一个补丁包Azure DevOps Server 2019.0.1 RTW.Azure DevOps Ser ...

  4. Shell脚本之七 选择、循环结构

    一.if else if 语法格式 if condition then command1 command2 ... commandN fi 写成一行(适用于终端命令提示符): if [ $(ps -e ...

  5. [.Net,C#]三类资源:流对象Stream,字节数组byte[],图片Image

    三类资源:流对象Stream,字节数组byte[],图片Image 关系:Stream<=>byte[],byte[]<=>Image Stream 与Image相互转化的媒介 ...

  6. Appium 滑动踩坑记

    前言 对于不同java-client版本,很多的API已经产生大的变化,所以一些API大家会发现已经失效或者使用方式发生了变化,滑动就是其中一项,这篇文章对滑动在不同的java-client版本以及不 ...

  7. CentOS7安装RabbitMQ,并设置远程访问

      如果网速慢 可以直接到百度云分享中下载,然后拉到centerOS中,进行第二步即可    两个人安装包地址,提取码:z1oz 1.安装erlang环境 wget http://www.rabbit ...

  8. SpringBoot系列教程web篇Servlet 注册的四种姿势

    原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势 前面介绍了 java web 三要素中 filter 的使用指南与常见的易错事项,接下来我们来看一下 Serv ...

  9. Windows下安装 Linux 下vim编辑器

    Windows下安装vim编辑器 下载传送门 https://vim.en.softonic.com/download# 开始安装 这是下载后的可执行文件 双击(或单击)运行软件,选择同意继续进行安装 ...

  10. - Git常用命令 基础 总结 MD

    目录 目录 Git常用命令 帮助 help 常用操作 初始化 clone init 提交 push 暂存 更新 撤销修改 分支 branch 查看分支 创建分支 切换分支 checkout 删除分支 ...