设为首页 收藏本站
查看: 997|回复: 0

[经验分享] Haproxy的使用和配置文件详解

[复制链接]

尚未签到

发表于 2019-1-1 09:59:51 | 显示全部楼层 |阅读模式
HAProxy的概述:
  HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
  配置文件:   /etc/haproxy/haproxy.cfg   #yum安装haproxy的主配置文件
  代理配置段:分四个区段: defaults、frontend、listen、backend;


  •   defaults name 用于为listen/frontend/backend提供默认值,其name是可选参数,只是为了更好的阅读。

  •   listen name 通过关联前后端定义一个完整的代理服务器

  •   frontend name 定义监听的套接字,用于接收客户端请求并与之连接

  • backend name 定义后端服务器组,用于处理frontend转发来的请求 注:name可使用大小写字母、数字、

Global段说明

global
log         127.0.0.1 local2
chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon
stats socket /var/lib/haproxy/stats

  •   maxconn conns
    设定一个前端的最大并发连接数,因此其不能用于backend区段。对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,从而避免无法应答用户请求。当然,此最大值不能超出“global”段中的定义。此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间。这意味着经过适当优化后,有着1GB的可用RAM空间时将能维护40000-50000并发连接。
    如果为conns指定了一个过大值,极端场景下,其最终占据的空间可能会超出当前主机的可用内存,这可能会带来意想不到的结果;因此,将其设定了一个可接受值方为明智决定。其默认为2000。

  •   log address facility [level [ minlevel ]]
    为每个实例启用事件和流量日志,因此可用于所有区段。每个实例最多可以指定两个log参数,不过,如果使用了“log global”且"global"段已经定了两个log参数时,多余了log参数将被忽略。

  •   global:当前实例的日志系统参数同"global"段中的定义时,将使用此格式;每个实例仅能定义一次“log global”语句,且其没有任何额外参数;

  •   address:定义日志发往的位置,其格式之一可以为IPv4_address:PORT,其中的port为UDP协议端口,默认为514;格式之二为Unix套接字文件路径,但需要留心chroot应用及用户的读写权限;

  •   facility:可以为syslog系统的标准facility之一;

  • level:定义日志级别,即输出信息过滤器,默认为所有信息;指定级别时,所有等于或高于此级别的日志信息将会被发送;

Defaults 段说明

defaults
mode http     #默认的模式mode{tcp|http|health},health只会返回OK
#retries 2        #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch      #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose       #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
timeout connect 5000ms       #连接超时
timeout client 30000ms        #客户端超时
timeout server 30000ms       #服务器超时
#timeout check 2000        #心跳检测超时
log 127.0.0.1 local0 err       #[err warning info debug]
balance roundrobin          #负载均衡算法
option httplog        #日志类别,采用httplog
option httpclose  #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
option dontlognull
option forwardfor  #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip

  •   mode { tcp|http|health } 设定实例的运行模式或协议。当实现内容交换时,前端和后端必须工作于同一种模式(一般说来都是HTTP模式),否则将无法启动实例。

  •   tcp:实例运行于纯TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查;此为默认模式,通常用于SSL、SSH、SMTP等应用;

  •   http:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝;

  • health:实例工作于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息;此模式将用于响应外部组件的健康状态检查请求;目前业讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成类似功能;

Listen段说明

listen stats
bind 0.0.0.0:8888   #监听端口
option httplog   #采用http日志格式
stats enable   #开启stats统计页面
stats uri /   #统计页面访问的前缀,后通常要加上?stats
stats realm "Haproxy Auth"   #开启认证功能
stats auth admin:admin   #认证时的账号和密码
stats admin if TRUE   #在制定条件下开启admin功能
stats refresh 3s   #统计页面自动刷新时间间隔
stats show-desc demo   #统计页面显示的相关描述信息
stats hide-version   #隐藏haproxy的版本号
  bind 绑定监听地址
语法:bind [address]:port_range [, ...] interface interface
此指令仅能用于frontend和listen区段,用于定义一个或几个监听的套接字。

Frontend段说明

frontend  main *:80
default_backend    apache_groups

  •   use_backend: 调用指定的后端主机(定义在frontend和listen中);
    语法: use_backend backend [{if | unless} condition]

  •   condition 条件多为acl的名称

  • default_backend: 默认调用的后端主机;(定义在frontend,defaults,listen中)
    语法:default_backend backend

Backend段说明

backend apache_groups
balance   roundrobin
cookie SERVERID insert indirect
server slave2 192.168.1.3:80 check inter 1s rise 2 fall 3 cookie A maxconn 1000
server slave3 192.168.1.4:80 check inter 1s rise 2 fall 3 cookie B maxconn 1000
balance 定义负载均衡算法(可用于“defaults”、“listen”和“backend”)。
  语法:balance algorithm [ arguments ]
algorithm用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。
支持的算法有:


  •   roundrobin:基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接;

  •   static-rr:基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;

  •   leastconn:新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,可以在运行时调整其权重;

  • source:将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使hash-type修改此特性;

server 定义后端服务器
  语法: server name address [param ]


  •   name:为此服务器指定的内部名称,其将出现在日志及警告信息中;如果设定了"http-send-server-name",它还将被添加至发往此服务器的请求首部中;

  •   address:此服务器的的IPv4地址,也支持使用可解析的主机名,只不过在启动时需要解析主机名至相应的IPv4地
    址;

  • param:为此服务器设定的一系参数;其可用的参数非常多,具体请参考官方文档中的说明,下面仅说明几个常用的参数:
  disabled:此服务器禁用;
  backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server;
  check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定。
  inter delay: 设定监控状态检查的时间间隔,单位为毫秒,默认为2000,也可以使用fastinter和downinter来根据服务器端专题优化此事件延迟
  rise count:设定检查状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数
  fall count:设定检查状态检查中,某server从正常状态转换至离线状态需要成功检查的次数
  cookie value:为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;
  maxconn maxconn:指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;
  maxqueue maxqueue:设定请求队列的最大长度;0表示无上限;
  weight weight:权重,默认为1,最大值为256,0表示不参与负载均衡;

yum安装haproxy
  [root@Haproxy ~]# yum install -y haproxy #直接使用RPM来安装
  [root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg   #haproxy的主配置文件

https代理的示例:

listen proxytofirehose :443
mode tcp
balance roundrobin
stick-table type ip size 200k expire 30m
stick on src
server firehose 192.168.122.2:443 check
  curl -x 192.168.122.172:80 www.wo.com.cn 此命令使用192.168.122.172:80这个代理服务器IP和端口访问站点www.wo.com.cn参数说明 -x 设置代理,格式为host[:port],port的缺省值为1080
wget -Y on -e "http_proxy=http://192.168.122.172:9201" "www.wo.com.cn" 此命令使用192.168.122.172:9201这个代理服务器IP和端口访问站点www.wo.com.cn 参数说明 -Y 是否使用代理 -e 执行命令




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658165-1-1.html 上篇帖子: Haproxy部署网站LB集群 下篇帖子: Rabbitmq集群部署Haproxy
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表