HAProxy介绍及配置文件详解

一、HAProxy简介

HAProxy是一个开源的、高性能的、基于TCP和HTTP应用的负载均衡软件,借助HAProxy可快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案

二、HAProxy优点

1) 可靠性和稳定性非常好,可以与硬件的F5相媲美
2) 最高可以同时维护40000--50000个并发连接,单位时间内处理的最大请求数为20000个,最大数据处理能力可达10Gbps
3) 支持多于8种负载均衡算法 ,同时也支持session保持
4) 支持虚拟主机功能
5) 从HAProxy 1.3版本后开始支持连接拒绝、全透明代理等功能
6) HAProxy拥有一个功能强大的服务器状态监控页面
7) HAProxy拥有功能强大的ACL支持

三、HAProxy配置文件详解

根据功能用途不同,其配置文件主要由五个部分组成,分别为global部分,defaults部分,frontend部分,backend部分,listen部分

1)global部分

用于设置全局配置参数,属于进程级的配置,通常与操作系统配置相关

2) defaults部分

默认参数的配置部分。在些部分设置的参数,默认会自动引用到下面的frontend, backend和listen部分

3) frontend部分

用于设置接收用户请求的前端虚拟节点。frontend可以根据ACL规则直接指定要使用的后端backend

4) backend部分

用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求

5) listen部分

此部分是frontend和backend部分的结合体

配置项说明

1)global部分

globallog 127.0.0.1 local1 infomaxconn 4096user nobodygroup nobodydaemonnbproc 1pidfile /usr/local/haproxy/logs/haproxy.pid 

log

全局的日志配置,local0是日志设备,info表示日志级别。其中日志级别有err, warning, info, debug 4种。这个配置表示使用127.0.0.1上的rsyslog服务中的local0日志设备,记录日志等级为info

maxconn

设置每个HAProxy进程可接受的最大并发连接数

nbproc

设置HAProxy启动时可创建的进程数,此参数要求将HAProxy运行模式设置为daemon,默认只启动一个进程;建议该值设置时小于CPU核数

daemon

设置HAProxy进程进入后台运行,这是推荐的运行模式

user/group

设置启动HAProxy进程的用户和组

pidfile

指定HAProxy进程ID的存放位置

2) defaults部分

defaults mode httpretires 3timeout connect 10stimeout client 20stimeout server 30stimeout check 5s

mode

设置HAProxy实例默认的运行模式,有tcp, http, health三个可选值
tcp模式:
在此模式下,客户端和服务器端间将建立一个全双工的连接,不会对七层报文做任何检查,为默认的模式;经常用于SSL, SSH, SMTP等应用
http模式
在此模式下,客户端请求在转发至后端服务器前将会被深度分析,所有不与RFC格式兼容的请求都会被拒绝
health模式
目前已经被废除

retires

设置连接后端服务器的失败重试次数,如果连接失败的次数超过该数值,HAProxy会将对应的后端服务器标记为不可用

timeout connect

设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀

timeout client

设置连接客户端发送数据时最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀

timeout server

设置服务器端回应客户端数据发送的最长等待时间,默认单位是毫秒,但也可以使用其他时间单位作后缀

timeout check

设置对后端服务器的检测超时时间,默认单位是毫秒,但也可以使用其他时间单位作后缀

3) frontend部分

frontend wwwbind *:80mode http option httplog option forwardforoption httpcloselog globaldefault_backend htmpool

通过frontend关键字定义了一个名为"www"的前端虚拟节点

bind

此选项用于定义一个或者几个监听的套接字,只能在frontend和listen中定义
格式如下:
bind [<address>:[port_range]] [interface]

option httplog

默认情况下,HAProxy日志是不记录HTTP请求的,此选项的作用是启用日志记录HTTP请求

option forwardfor

此选项的作用是保证后端服务器可记录客户端真实的IP

option httpclose

此选项表示客户端和服务端完成一次连接请求后,HAProxy将主动关闭此TCP连接。这是对性能非常有帮助的一个参数

log global

表示使用global段中定义的日志格式

default_backend htmpool

此选项用于指定后端默认的服务器池

4) backend部分

backend htmpoolmode http option redispatchoption abortonclosebalance roundrobincookie SERVERIDoption httpchk GET /index.php server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3server web2 10.1.1.2:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3

backend用于定义一个名称为htmpool的后端服务器组,根据需要可以定义多个

option redispatch

此参数用于cookie保持的环境中。在默认情况下,HAProxy会将其请求的后端服务器的serverID插入cookie中,以保证会话的session持久性。而如果后端服务器出现故障,客户端的cookie是不会刷新的,这就会造成无法访问。此时,如果设置了此参数,就会将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常

option abortonclose

此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接

balance roundrobin

指定负载均衡算法

HAProxy支持的负载均衡算法:

roundrobin
基于权重进行轮叫调度的算法

static-rr
基于权重进行轮叫调度的算法,不过此算法为静态算法,在运行时调整其服务器权重不会生效

source
基于请求源IP的算法。此算法先对请求的源IP进行HASH运算,然后将结果与后端服务器的权重总数相除后转发至某台匹配的后端服务器。这种方式可以使同一个客户端IP的请求始终转发到某特定的后端服务器

leastconn
此算法会将新的连接请求转发到具有最少连接数目的后端服务器。在会话时间较长的场景中推荐使用此算法 ,例如数据库负载均衡

uri
此算法会对部分或整个URI进行HASH运算,再经过与服务器的总权重相除,最后转发到某台匹配的后端服务器上

uri_param
此算法会根据URL路径中的参数进行转发,这样可保证在后端真实服务器数据不变时,同一个用户的请求始终分发到同一台机器上

hdr
此算法根据HTTP头进行转发,如果指定的HTTP头名称不存在,则使用roundrobin算法 进行策略转发

cookie SERVERID

表示允许向cookie插入SERVERID,每台服务器的SERVERID可在下面的server关键字中使用cookie关键字定义

option httpchk

此选项表示启用HTTP的服务状态检测功能
格式如下:
option httpchk <method> <uri> <version>

method

表示HTTP请求的方式,常用的有OPTIONS,HEAD, GET几种方式。一般的健康检查可以采用HEAD方式进行,而不是采用GET方式,这是因为HEAD方式没有数据返回,仅检查响应报文的状态码是不是200.因此相对于GET, HEAD的方式更简单、更快

uri

表示要检测的URL地址

version

指定心跳检测时的HTTP的版本号

server web1 10.1.1.1:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3

server用于定义多台后端真实服务器,不能用于frontend和listen段

格式如下:

server <name> <address>:[port] [param*]

name

为后端真实服务器指定一个内部名称,随便定义一个即可

address:port

指定后端服务器的IP地址及端口

param*参数

常用的参数:
check 表示启用对此后端服务器执行健康状态检查
inter 设置健康状态检查的时间间隔,单位是毫秒
rise 检查多少次认为服务器可用
fall 检查多少次认为服务器不可用
weight 设置服务器的权重,默认为1, 最大为256。 设置为0表示不参与负载均衡
backup 设置备份服务器,用于所有后端服务器全部不可用时
cookie 为指定的后端服务器设置cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的后端服务器将在后续的请求中一直被选中,其目的在于实现持久连接的功能

5) listen部分

listen admin_statusbind 0.0.0.0:9188mode http log 127.0.0.1 local0 errstats refresh 30sstats uri /haproxy-status                           stats realm Welcome login stats auth admin:admin stats hide-version stats admin if TRUE

listen部分用于配置HAProxy监控页面相关的参数

stats refresh 30s

设置HAProxy监控统计页面自动刷新的时间

stats uri /haproxy-status

设置HAProxy监控页面访问的URI路径

stats realm Welcome login

设置登录监控页面时,密码框上的提示信息

stats auth admin:admin

设置登录监控页面的用户名,密码。用户密码用冒号隔开,可以设置多个,每行一个

stats hide-version

设置在监控页面上隐藏HAProxy的版本号

status admin if TRUE

设置此选项,可在监控页面上启用、禁用后端服务器,仅在1.4.9版本以后生效

转载于:https://blog.51cto.com/12244079/2125384

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unbutu安装搜狗输入法【转载】

安装支持库 sudo apt-get install fcitx libssh2-1 如果安装过程中出现错误失败&#xff0c;运行apt-get -f install 查看支持库是否安装成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下载搜狗输入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相机标定

目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1&#xff1a;halcon是否只能使用halcon专用的标定板&#xff1f;问题2&#xff1a;halcon标定板如何生成&#xff1f;问题3&#xff1a;halcon标定板如何摆放&#xff0c;拍照数量有无限制&#xff1f;标定步…

halcon模板匹配干扰边缘消除办法(最硬核方式)

目录halcon手绘形状匹配模板手绘形状匹配模板主要算子解析draw_nurbs 绘制平滑曲线参数解释create_shape_model_xld 使用XLD轮廓创建模板参数解释实例演示与解析实例代码展示与解析运行过程与处理展示读入图像绘制模板使用绘制的XLD创建模板查找模板博主写作不容易&#xff0c;…

往文件中写数据--增量

有的功能需要打印日志文件&#xff0c;但是日志文件太多不方便查看&#xff0c;我就把信息输出到一个TXT文件中了。 下面就是我将要说的&#xff0c;往文件中写数据&#xff08;增量&#xff09;&#xff0c;代码很简单&#xff0c;也可以放在你的代码中运行一下&#xff1a; /…

SQL Server 数据库查找重复记录的几种方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列&#xff08;或多列&#xff09;的重复值。&#xff08;只可以查出重复记录的值&#xff0c;不能查出整个记录的信息&#xff09; 例如:查找stuid&#xff0c;stuname重复的记录&#xff1a; select stuid&#xff0c;s…

xvid 数据编码和解码

由于视频开发的需求&#xff0c;封装xvid c调用接口&#xff0c;使之优雅易用 我已经对pc camera视频流(RGB)进行尝试&#xff0c;编码之后传输到远程主机进行解码回放&#xff0c;效果不错 具体的xvid的参数可以进一步优化&#xff0c;这里只是提供简单的范例 1. xvid 解码 …

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍&#xff0c;现在我们开始写一个最初级的脚本写脚本的工具有很多&#xff0c;有文本文档&#xff0c;有PowerShell ISE&#xff0c;PowerShell Studio等&#xff0c;这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行&#xff0c;否则…

C#精准定时

文章目录简介StopWatch类例子1&#xff0c;用作延时例子2&#xff0c;用作算法耗时评估博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在自动化上位机编写过程中&#xff0c;上位机的定时应用在很多地方。对于工业上位机程序设计起…

联合体(union)和结构体(struct)的区别

1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈&#xff0c;单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的&#xff0c;WEB自动化测试一时半会还没有什么进展&#xff0c;所以决定先学习一下网站用的MVC架构&#xff0c;跟着教程写了一个小网站&#xff0c;大概也找到了WEB测试…

prototype与_proto_

1、prototype与_proto_ ①prototype&#xff1a;是函数才有的属性&#xff0c;这个属性是一个指针。当一个构造函数被创建时&#xff0c;该构造函数会自动生成一个prototype指针&#xff0c;该指针指向构造函数的原型。这个原型会有其他实例共享的一些属性和方法。 ②_proto_&a…

Halcon求取矩形顶点坐标

文章目录简介Halcon源码博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在使用Halcon画矩形时&#xff0c;并不能得到矩形四角顶点坐标。但是我们可以通过数学计算得到矩形定点坐标的位置。 我们在计算过程中需要知道矩形的长轴与短…

kafka常用的shell命令

kafka常用shell命令&#xff1a; ------------------------------------ 1、创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看创建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django报错

报错&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多线程实例(_beginThreadex创建多线程)

C多线程&#xff08;二&#xff09;(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例&#xff08;来自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主线程创建2个线程t1和t2&#xff0c;创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据&#xff0c;需要将数据导入数据库中&#xff0c;又不能一个一个手工录入&#xff0c;可以生成SQL&#xff0c;来批量操作。1.首先在第二行的H列&#xff0c;插入函数&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

题目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;现在给出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;问你x^(g[n*y]) mod (s 1)的值为多少。 解题思路&#xff1a; 首先可以得到的是g[n…

C#的两种类据类型:值类型和引用类型

目录什么是值类型&#xff0c;什么是引用类型概念&#xff1a;值类型和引用类型区别什么是值类型&#xff0c;什么是引用类型 概念&#xff1a; 值类型直接存储其值&#xff0c;而引用类型存储对其值的引用。部署&#xff1a;托管堆上部署了所有引用类型。 引用类型&#xf…

ring0 ring3 kernel driver

intel cpu的权限访问控制&#xff1a;ring0 ~ ring5. window、linux操作系统都只用了ring0&#xff0c;ring3&#xff0c;对应内核态和用户态. 驱动程序工作在内核态&#xff0c;没有main函数入口&#xff0c;而应用程序工作在用户态。转载于:https://www.cnblogs.com/yiii/p/6…