haproxy配置

Posted huxl1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了haproxy配置相关的知识,希望对你有一定的参考价值。

 

第一节

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件  类似于nginx功能

官方网站:http://cbonte.github.io/haproxy-dconv/

HAproxy服务器ip:192.168.1.102(这里若隐藏后端服务器的ip,这需要设定两个ip,一个公网,一个私网)

后端服务器:192.168.1.104      192.168.1.105

再 后端服务器安装http服务

yum   install   http  -y

设定一个网站:

# vim /var/www/html/index.html

   <h1>server 1 </h1>

systemctl start httpd.service     启动服务

2  在haproxy 端设置

安装haproxy

yum install haproxy –y

rpm  -ql   haproxy     查看安装后产生的一些目录文件

配置文件:/etc/haproxy/haproxy.cfg

  1  全局配置段 global  (设置自己的特性) 

    进程及安全配置

              性能参数配置

  2 代理配置段  proxy   几段配置段有

           default: 提供默认配置

           frented: 对前端服务器的配置

           backend: 对后端服务器的配置

           listen:设定两者是一一对应的,这段同时拥有前端和后端的配置

日志:它本身没有日志功能,日志需要rsyslog日志服务来配合

日志设定:  log         127.0.0.1 local2      指定本地日志服务器local2

技术分享图片

这需要在rsyslog配置文件中做配置

vim   /etc/rsyslog.conf

     $ModLoad imudp

     $UDPServerRun 514                 基于udp

local2.*                                                /var/log/boot.log

重启日志服务器:systemctl restart rsyslog.service

 haproxy配置文件:

(:.,[email protected]^[^#]@#&@g )

技术分享图片

启动服务:systemctl start haproxy.service

curl http://192.168.1.102     访问测试

负载均衡:

backend websrvs

        balance roundrobin                                   轮询

        server srv1 192.168.1.104:80 check

        server srv2 192.168.1.105:80 check

重启服务: # systemctl restart haproxy.service

访问: curl  http://192.168.1.102

在global 设置参数

      1 chroot: 与安全相关

      2  ca-base  若基于ssh回话的ca认证相关

      3 cpu-wap  cpu绑定类似于nginx的worker进程与cpu的绑定

      4 log  指定日志

      5 maxconn  最大单进程并发连接数

      6 maxconnrate  速率

      7 noepoll   不使用epoll机制

第二节参数配置

1 bind  :用于来指定监听的地址和端口  配置在frontend 和listen段之中

监听在80端口

技术分享图片

bind  :443    ssl    crt   /etc/haproxy/site.pem

2 balance 用于后端服务器的调度算法

技术分享图片

几种调度算法有:

        1) roundrobin    轮询是动态的,指这种算法支持权重的运行时调度,

            同时支持man启动(man启动是指,当在后端轮询的服务器中,再添加一个服务器,他会慢           慢的将前两台服务器上的请求慢慢移到这台上,不会一下子一堆的请求,否则容易将服务器瞬        间压死)

         2) static-rr  是静态轮询调度,不支持权重运行时调度, 不支持man启动

         3)leastconn最小连接 加权最小连接,计算后端服务器连接数时,要先除以它的权重得到的最小数将处理下一次请求

         4)first :请求会先请求第一台,把第一台服务器请求满了,才会请求第二台

         5)source  原地址哈希

3  hash-type     哈希类型有两种

      1 取模法 : 是指将后端服务器按照权重虚拟为多个节点,当请求的哈希值对应第几个节点,就对应做映射

      缺点:一但服务器的位置发生变动,它会影响全局的取模结果

      2 一致性哈希:服务器变动只会影响局部

4 uri :是指不管前端的那个客户端请求,只要访问相同的uri就分发给同一台服务器上

5 uri_param   基于paraneter 绑定,将同一个key的值发往到同一个服务器上

6 hdr (<name>)将http首部的名称做哈希计算,将相同的发往相同的服务器上

      如 hdr(cookie)  是基于cookie做绑定

举例:

1 基于first

backend websrvs

        balance first

        server srv1 192.168.1.104:80 check   maxconn  3

        server srv2 192.168.1.105:80 check

压测:ab  -c  10   -n  10000   http://192.168.1.102

for    I   in  {1..10} ; do   curl   http://192.168.1.102; done

用 uri

backend websrvs

        balance  uri

        server srv1 192.168.1.104:80 check

        server srv2 192.168.1.105:80 check

        hash-type   consistent

 

7 compression  压缩

      compression  algo   gzip       压缩算法

      compression  algo   deflate

      compression    type   <text/html>     只对那些类型做压缩

 

 技术分享图片

技术分享图片

8 server 用于backend  后端中指定后端主机,后面可以跟相应的参数

  1) backup  指备用

      2)check  健康检测 默认是向服务器对应端口做健康检查

           检查的方法有:

                 addr:检测使用ip地址

                 port:针对端口检测

                 inter  <delay>  连续两次的检测之间的时间间隔默认为2000ms

                 rise  <count> 连续检测多少次,结果成功则服务器标记ok 默认2次

      fall  <count> 连续检测多次,结果为失败,则标记不可用默认3次

 

 

option   httpchk     对http主页进行检测

option  httpchk  OPTIONS  *  HTTP/1.1 Host:  www

技术分享图片

查看日志:

tail  -f   /var/log/httpd/access.log

9 maxconn  最大并发连接数

10 maxqueue 队列,:若一个服务器最大请求是3000 ,当有3500是将多的500暂存于队列中

11 minconn  最小连接,当设定了最小连接,他的最大连接是动态计算得出的

12 no-error  : 在后端服务器故障时的策略

              fastinter :快速探测

              fail-check: 故障检测

              sudden-death: 告知故障

               mark-down:标记为不可用

13 no-mark-down: 标记为不可用的操作

      shutdown-sessions: 将之前的该服务器上的所有请求切断

 14 no-mark-up: 当服务器标记为可用是操作

 

15 redir :重定向 访问时转接到百度

 技术分享图片

16  weight  权重

 

第三节统计接口启用相关参数

 stats  enable    启用统计页

技术分享图片

访问http://192.168.1.102/haproxy?stats

技术分享图片

stats值设定:

      stats   uri  : /haproxy?stats

      stats  realm :  haproxy    认证提示信息

      stats  auth : no  authentication

      stats  scope:  no  restriction

      stats  admin     条件设定

 技术分享图片

技术分享图片

mode 定义haproxy的工作模式

      tcp:基于layer4实现代理代理mysql,ssh,ssl等协议

      http:仅当http协议代理用

      health: 工作健康状态的响应模式,当连接请求到达时回应ok后即断开连接

如:定义一个ssh协议的调度

技术分享图片

ssh [email protected] -P 22322

会话绑定机制:会话绑定几种方法

  

session  sticky:

      1) hash : 

           source  ip   原地址hash

           cookie  基于cookie的绑定

           uri  基于uri,相同的uri 访问相同的服务器

       2) 会话集群

      3)会话服务器 memcached     redis

haproxy 基于cookie的会话绑定,定义在backend   listen  段中

键值对:在请求报文的cookie中插入建 在后对找到cookis对应的值进行绑定

  rewrite:重写cookie

        insert: 插入值

技术分享图片

errorfile :自定义错误页面只能针对响应码为(200 ,400,403,408 ,500,502 ,503 ,504)

如:errorfile  400  /etc/haproxy/errorfiles/[email protected]    本地一个路径

errorloc   :基于uri 定义  可以定义在frontend   backend   listen

如: errorloc  403  http://www.magedu.com/error_pagrs/403.html

reqadd   向请求报文中添加首部

      reqadd  x-proxy-By:   haproxy

rspadd 向响应报文中添加首部

      rspadd  x-proxy-By:   haproxy

reqdel    向请求报文中删除

rspdel   响应报文中删除

      rspdel   ^server:  .*       删除以server开头的所有的

第四节参数配置

连接超时时长设定:

      timeout   client  <timeout>: 客户端的超时时间,这指tcp的连接

       timeout   server  <timeout>:服务端的超时时长

      timeout  http-keep-alive  <timeout> :持久连接的持久时长

      timeout   http-request  <timeout> 请求报文的连接时长,

      timeout  connect <>     创建链接的超时时长,连接后端

      timeout   client-fin  <> : 面向客户端半关闭连接的超时时长

      timeout   server-fin  <> : 面向服务端半关闭连接的超时时长

 

访问控制匹配后操作:

use_backend   <backend> [if | unless] <condtion>当符合条件使用指定的backen  

block : 拒绝某些连接请求

1 基于7层的http访问控制

http-request  {allow | deny} [ {if | unless } <condition>]

2 基于4层的访问控制

tcp-request  connection  {accept | reject } [ {if |unless } <condition>]

如:

      acl   invalid_src  src   172.168.1.104           定义一个acl

      blocl   if    invalid_src              将acl的定义拒绝

      errorfile    403  /etc/fstab        给它一个错误页

 

如:ssh的访问控制:

listen  ssh

      bind  :22022

      balance   leastconn

      acl  incalid_src  src  192.168.1.104

      tcp-request  connection  reject   if  incalid_src

      mode  tcp

      server   sshsrvs1   192.168.1.104:22  check

      server   sshsrvs2   192.168.1.105:22  check

 

acl 控制定义

acl  <name>  <criterion> [flags] [operation] [<value>]

    criterion: 检查内容条件:

                dst: ip   目标ip

                dst-conn  目标 主机上套接字连接数

                dst_port   目标端口

                src:ip     源ip地址

                src_port    源端口

    flags:

              -i:忽略大小写

             -n 禁止ip地址反解

             -u : acl名不能重复

  operation: 

             eq    ge   gt  le   lt

        value :

             boolean:布尔值

             ip address / network  :  ip地址

             string   : 字符串

             integer or  interger  range   整数 或整数范围

如:

      acl   allowstats  src  192.168.1.104

      http-request  allow   if  allowstats

      acl   all   src 0.0.0.0/0.0.0.0

      http-request   deny   if   all

path 基于path的匹配

    path   /imgs/logos/logo.jpg             精确匹配这个路径

         path_beg   /imgs        以imgs 开头的都匹配

        path_end    .jpg          以jpg结尾的都匹配

        path_sub      logos         子串匹配

        path_dir    logos/logo.jpg          子路径匹配

        path_req   ^/imgs/.*               以正则匹配模式匹配

        path_len                       字符串长度匹配

如   acl   statis  path_end  .jpg   .png

  http-request  allow  if  statis

url  的配置与path类似但它包含的信息更多

hdr  匹配报文的某个首部

如:  acl   bad.browsers   hdr_reg  (user-agent)   .*curl.*  当首部包含curl  以curl名访问拒绝

         block   if   bad.browers

 

haproxy   example  config    配置文档实例

 

以上是关于haproxy配置的主要内容,如果未能解决你的问题,请参考以下文章

配置haproxy负载均衡群集

HAProxy日志配置

HAProxy详解:HAProxy基础配置与应用实例

Haproxy的配置

Haproxy配置文件(haproxy.cfg)

HAProxy安装配置SSL