精选文章 haproxy详解

haproxy详解

作者:weixin_34245169 时间: 2021-02-07 01:39:21
weixin_34245169 2021-02-07 01:39:21
【摘要】HAProxy使用C语言编写的开放源代码软件,提供高可用性、负载均衡,以及基于TCP(4层)和HTTP(7层)的应用程序代理;借助HAProxy可以快速并可靠的提供基于TCP和HTTP应用的代理解决方案,并支持虚拟主机;HAProxy实现了一种时间驱动,单一进程模型,此模型支持非常大的链接数;HAProxy支持拒绝连接:维护连接开销低,可以限制***蠕虫(attack bots),该功能拯救...

HAProxy

  • 使用C语言编写的开放源代码软件,提供高可用性、负载均衡,以及基于TCP(4层)和HTTP(7层)的应用程序代理;

  • 借助HAProxy可以快速并可靠的提供基于TCP和HTTP应用的代理解决方案,并支持虚拟主机;

  • HAProxy实现了一种时间驱动,单一进程模型,此模型支持非常大的链接数;

  • HAProxy支持拒绝连接:维护连接开销低,可以限制***蠕虫(attack bots),该功能拯救了很多被DDos***的小型站点;

  • HAProxy支持全透明代理(具备防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。

HAProxy的主要功能
  • 1 - route HTTP requests depending on statically assigned cookies

  • 2 - spread load among several servers while assuring server persistence

  • 3 - through the use of HTTP cookies

  • 4 - switch to backup servers in the event a main server fails

  • 5 - accept connections to special ports dedicated to service monitoring

  • 6 - stop accepting connections without breaking existing ones

  • 7 - add, modify, and delete HTTP headers in both directions

  • 8 - block requests matching particular patterns

  • 9 - report detailed status to authenticated users from a URI intercepted by the application


程序环境

主程序:/usr/sbin/haproxy 
配置文件: /etc/haproxy/haproxy.cfg 
Unit file: /usr/lib/systemd/system/haproxy.service

配置段
  • global:全局配置段\

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

  • proxies:代理配置段

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

简单的配置示例:
		frontend web
		bind *:80
		default_backend websrvs backend websrvs
		balance roundrobin
		server srv1 172.16.100.6:80 check
		server srv2 172.16.100.7:80 check
global配置详解
  • 全局配置段

  • 1 Process management and security

* 1.1 ca-base
* 1.2 chroot
* 1.3 crt-base
* 1.4 deamon:守护进程;
* 1.5 gid 用户组ID,需设置;
* 1.6 uid 用户ID,需设置;
* 1.7 group
* 1.8 log:
 [len  [max level] [min level] * 1.8.0 至多可以使用两次log功能 * 1.8.1 length:收集日志服务器的地址; * 1.8.2 address:最长为1024个字节; * 1.8.3 facility:共24种:kern,user,mail,deamon,auth,syslog,lpr,news,uucp,cron,ftp,ntp..... * 1.8.4 level:emerg、alert、crit、error、warning、notice、info、dubeg; * 1.9 log-send-hostname * 1.10 nbproc:小于等于CPU核心数即可,官方建议采用默认值; * 1.11 ulimit-n:设定当前用户可以打开多少文件数,可以自动设定,官方建议无需设定该值; * 1.12 user * 1.13 stats * 1.14 ssl-server-verify * 1.15 node * 1.16 description * 1.17 unix-bind

设置log,需开启本机的rsyslog服务,可编辑/etc/rsyslog.conf进行定义,配置以下两行

$InputTCPServerRun 514local2.* /var/log/haproxy.log
  • Performance tuning

  • 系统调整

- max-spread-checks- maxconn:最大并发链接数,一般需要调整;- maxconnrate:每个进程每秒钟可以生成的最大链接数;即每秒钟可以接受最多的链接;- maxcomprate- maxcompcpuusage:最大CPU使用量- maxpipes- maxse***ate:最大会话速率,一旦达到最大速率不在接受新的请求;- maxsslconn:每个进程的最大ssl连接数;- maxsslrate:ssl连接速率;- noepoll- nokqueue- nopoll- nosplice- nogetaddrinfo- spread-checks:<0..50 in percent> 状态检查分散开- tune.bufsize- tune.chksize- tune.comp.maxlevel- tune.http.cookielen- tune.http.maxhdr- tune.idletimer- tune.maxaccept- tune.maxpollevents- tune.maxrewrite- tune.pipesize- tune.rcvbuf.client- tune.rcvbuf.server- tune.sndbuf.client- tune.sndbuf.server- tune.ssl.cachesize- tune.ssl.lifetime- tune.ssl.force-private-cache- tune.ssl.maxrecord- tune.ssl.default-dh-param- tune.zlib.memlevel- tune.zlib.windowsize
  • Debugging

- debug:调试模式- quiet:静默模式

Proxies配置详解
  • 代理配置段

  • Proxy configuration can be located in a set of sections :

  • defaults

  • frontend

  • backend

  • listen

A "defaults" section sets default parameters for all other sections following
its declaration. Those default parameters are reset by the next "defaults"section. See below for the list of parameters which can be set in a "defaults"section. The name is optional but its use is encouraged for better readability.

A "frontend" section describes a set of listening sockets accepting clientconnections.

A "backend" section describes a set of servers to which the proxy will connectto forward incoming connections.

A "listen" section defines a complete proxy with its frontend and backend
parts combined in one section. It is generally useful for TCP-only traffic.

All proxy names must be formed from upper and lower case letters, digits,'-' (dash), '_' (underscore) , '.' (dot) and ':' (colon). ACL names arecase-sensitive, which means that "www" and "WWW" are two different proxies.
  • bind

绑定ip及端口
bind [

]: [, ...] [param*]
bind / [, ...] [param*]
Define one or several listening addresses and/or ports in a frontend.

sections :
defaults	frontend	listen	backend  no yes yes no
  例:listen http_proxy bind :80,:443 bind 10.0.0.1:10080,10.0.0.1:10443 bind /var/run/ssl-frontend.sock user root mode 600 accept-proxylisten http_https_proxy bind :80 bind :443 ssl crt /etc/haproxy/site.pemlisten http_https_proxy_explicit bind ipv6@:80 bind ipv4@public_ssl:443 ssl crt /etc/haproxy/site.pem bind unix@ssl-frontend.sock user root mode 600 accept-proxylisten external_bind_app1 bind fd@${FD_APP1}
  • balance

  • 定义调度类型

balance [ ]
balance url_param [check_post]
Define the load balancing algorithm to be used in a backend.

May be used in sections :
defaults	frontend	listen	backendyes no yes yes

1 roundrobin:轮询;
2 static-rr:根据权重轮流使用,但是静态的,对服务器数量无限制,不支持平滑切换;
3 leastconn:连接数量最少的服务器优先,当连接数相同时使用roundrobin,不适用http;
4 frist:将第一台连接满,开始连接第二台,第二台连接满连接第三台;
5 source:基于源IP的绑定,相当于Nginx的hash_ip,相当于LVS的Source ip hashing;
6 URI:对URI进行hash,将同一个URI发送至同一个服务器,适用于缓存服务器,hash方式取决于hash_type;
7 url_param:根据指定参数进行调度,对参数进行hash,将统一用户的信息都发送至同一台服务器,hash方式取决于hash_type;
8 hdr(name):在每个HTTP请求中查找HTTP头,然后根据hash HTTP头的name来进行调度,hash方式取决于hash_type;
9 rdp-cookie(name):查询每个进来的TCP请求并hash,该机制用于退化的持久连接,hash方式取决于hash_type;

  • hash-type:哈希算法

  • hash-type

  • Specify a method to use for mapping hashes to servers

May be used in sections :
defaults	frontend	listen	backend
  yes no yes yes 
 map-based:除权取余法,哈希数据结构是静态的数组; consistent:一致性哈希,哈希数据结构是一个树;
 is the hash function to be used : 哈希函数
	sdbm
	djb2
	wt6
 avalanche
  • default_backend

  • default_backend \

Specify the backend to use when no "use_backend" rule has been matched.

May be used in sections :
defaults	frontend	listen	backend  yes yes yes no
  例
use_backend dynamic  if  url_dyn
use_backend static   if  url_css url_img extension_img
default_backend dynamic
  • server

  • server

    [:[port]] [param*]

Declare a server in a backend 定义后端主机及其各种选项

May be used in sections :
defaults	frontend	listen	backend no no yes yes


转载于:https://blog.51cto.com/guoruilin198/1905687

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:常见的html面试题

下一篇:下拉列表的搬移

您可能感兴趣

  • classpath详解

    设置类路径结构可通过对 JDK 工具使用 -classpath 选项(首选方法)或设置 CLASSPATH 环境变量来设置类路径。     C:> jdkTool -classpath path1;path2...    C:> set CLASSPATH=path1;path2...

  • 面试问答详解(一)

    面试问答详解(一)王言玲 01-4-27 下午 01:34:55面试是求职者跟招聘单位第一次面对面的交流。一般而言,什么事情的第一次都很重要,面试也不例外。求职者在回答招聘方问题时,应掌握其中的技巧进而能够有的放矢地作答,这是应聘成功的第一步。从这期开始,我们将分5次,系列刊登这些问题的详解,希望给应聘者一个参考。第一类:闯劲与热情成功的企业均得力于敢做敢为、热情努力的员工,有关闯劲与热情的...

  • java关键字详解(abstract.double.int.switch)

    语法图解语法图解使用了下列规则: 从左到右、从上到下、顺着行的路径读语法图解。 在语法图解中使用了下列符号:>>- 指示了一个语句的开始->  指示该语句在下一行继续>-  指示该语句从前一行继续->< 指示该语句的终止 句法单元而不是完整语句的图以 |- 开始并以 -|结束。 要求的项在主要路径上。  >>-required-item---------------------><可选的项...

  • 正则表达式使用详解(二)

    本博客停止更新,新家地址 http://ashun.cnblogs.com/ 正则表达式使用详解(二) 使用实例   在对正则表达式有了较为全面的了解之后,我们就来看一下如何在Perl,PHP,以及JavaScript中使用正则表达式。   通常,Perl中正则表达式的使用格式如下:   operator / regular-expression / string-to-replace / ...

  • Java中文问题详解

    Java中文问题详解我来说一下tomcat如何实现JSP的你就明白了。 预备知识:  1.字节和unicode   Java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式   是使用字节流的。 因此Java要对这些字节流经行转化。char是unicode的,而byte是字节.   Java中byte/char互转的函数在sun.io的包中间有。其中Byt...

  • Windows下Ping命令详解及使用小技巧

    对于Windows下ping命令相信大家已经再熟悉不过了,但是能把ping的功能发挥到最大的人却并不是很多,当然我也并不是说我可以让ping发挥最大的功能,我也只不过经常用ping这个工具,也总结了一些小经验,现在和大家分享一下。  现在我就参照ping命令的帮助说明来给大家说说我使用ping时会用到的技巧,ping只有在安装了TCP/IP协议以后才可以使用:  ping [-t] [-a]...

  • 处理Windows 95的长文件名中断详解

    处理Windows 95的长文件名中断详解 很多朋友在DOS环境下写过程序,而且有许多和文件处理有关。众所周知, DOS下的文件名为8.3的格式,而Windows 95开始使用长文件名格式,以前的 DOS下的程序只能按8.3格式来处理这些长文件名,读取文件或目录名时还好, 最多只是看起来有些不顺眼(都变成PROGRA~1、MYPROD~3.EXE这样的文件名 了),要创建新的目录和文件时就麻...

  • 报表式CListCtrl的使用详解初稿

    严格说来本文是别人成果的集合,加入了本人使用的一点心得,而且文章内容是本人在实际开发中试验过可以使用的。这只是初稿,还有很多内容没有加入,原因是没有经过验证,以后会陆续加入,形成一个CListCtrl的使用完全指南。 创建图形列表并和CListCtrl关联: m_image_list.Create(IDB_CALLER2, 16, 10, RGB(192,192, 192)); m_imag...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
haproxy详解介绍:华为云为您免费提供haproxy详解在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多haproxy详解的相关内容。| 移动地址: haproxy详解 | 写博客