zoukankan      html  css  js  c++  java
  • [记录]HAproxy负载均衡配置教程

    HAproxy负载均衡配置教程

     

    一、简介

       haproxy是一个开源的高性能负载均衡软件;支持双机热备、虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能;支持TCP(四层)、HTTP(七层)应用代理功能;多用于PV很大,但是又需要七层应用代理的业务

    二、工作原理

      1、基于TCP负载均衡工作原理:

             使用NAT方式接收和返回请求报文,只单纯对请求流量和返回流量做转发;RS不

             用配置公网IP

      2、基于HTTP负载均衡工作原理:

             使用NAT方式接收和返回请求报文,在接收请求报文后会检查报文头信息,根据

             报文头信息匹配Frontend(ACL规则)再转发给Backend(server池);RS不用配

             置公网IP

            

    三、安装HAproxy

      1、下载haproxy源码包  

         下载地址:http://download.chinaunix.net/download.php?id=40475&ResourceID=12508

      2、tar  xf  haproxy-1.4.22.tar.gz  -C /home

      3、cd /home/haproxy-1.4.22

      4、make  TARGET=linux26  ARCH=x86_64

      5、make install PREFIX=/usr/local/haproxy

      6、ln  -s /usr/local/haproxy  /usr/haproxy

      7、cd /usr/local/haproxy

      8、mkdir -p bin  conf  logs  var/run  var/chroot

      9、cd  examples/

     10、cp haproxy.cfg /usr/local/haproxy/etc

     11、cp  haproxy.init/etc/init.d/haproxy

     12、chmod 700 /etc/init.d/haproxy

     13、chkconfig  --add haproxy

     14、chkconfig  haproxy on

    四、配置基于四层负载均衡

      1、vim haproxy.cfg

    ##全局配置信息###

        global 

            chroot /usr/local/haproxy/var/chroot    #chroot运行路径

            daemon                           #以后台形式运行harpoxy

            group  haproxy                     #启动程序所用组,随便写,只要下面我们

            创建这个组即可

            user   haproxy                     #启动程序所用用户,随便写,只要下面我

            们创建这个用户即可

            log 127.0.0.1:514 local0 warring        #定义haproxy 日志存放设备及级别

            pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pid

            maxconn 20480                         #默认最大连接数

            spread-checks  3

            nbproc  8                             #进程数量,一般为CPU核数2倍

    ####默认配置选项#######

     

    defaults

            log    global

            mode  tcp         #所处理的类别(7层代理http,4层代理tcp)

            retries 3            #3次连接失败就认为服务器不可用,也可以通过后面设置

            option redispatch    #serverID 对应的服务器挂掉后,强制定向到其他健康的服务

            器

            contimeout 5000      #设置默认连接超时时间

            clitimeout 50000      #设置客户端连接超时时间

            srvtimeout 50000      #设置服务器连接超时时间

     

    #########设置图形化监控页面######

     listen  admin_status            #定义实例名为admin_status,实例名可以随意起

            bind 0.0.0.0:81          #设置Frontend和Backend的组合体,监控组的名称,按

            需要自定义名称

            mode tcp               #设置模式;tcp为四层http为7 层

            stats enable             #激活图形化管理界面

            stats  uri  /admin?stats  #设置图形管理界面url打开路径

            stats auth admin:admin   #设置监控页面的用户和密码:admin

            balance  roundrobin     #设置对RS的调度算法,这里设置的是轮询方式

            option  httpclose

            option  forwardfor      #让RS节点记录客户端的真实IP,如果不加这条,RS节

            点只记录负载均衡服务器的IP

            option  httpchk  HEAD /test.html  HTTP /1.0  #定义通过URL方式进行对RS的健

            康检查,不加这条,默认是通过IP+端口的方式进行健康检查;如果想通过URL进

            行健康检查,后端RS节点上的web定义存放网页的目录下必须有test.html这个页

            面,否则健康检查会失败 

            server www01 10.0.0.8:8080 check inter 1500 fall 3 rise 3 check port 8080 maxconn    

            3000 weight 1

            server www02 10.0.0.9:8080 check inter 1500 fall 3 rise 3 check port 8080 maxconn

            3000 weight 1

            #定义server地址池,server是规定的server地址池字段,不能变;后面www01

            是名字,随便写;10.0.0.X:8080是定义的RS的IP和端口,端口最好不要用80;check

            inter 1500是定义健康检查间隔为1.5秒,不定义默认为2秒检查一次;fall 3是定

            义检查三次后端RS都失败就把该节点踢掉,不定义默认也是检查三次;rise 3是定 

            义当RS节点从故障到恢复,健康检查三次才会认为该节点真正正常;check  port

            8080是指定健康检查的端口号为8080;maxconn 3000是定义单个节点最大连接数

            为3000pv;具体要安装服务器硬件状况配置,否则很可能会因为pv过大把服务器

            压垮;weight 1是定义权重,权重值越大,承载的任务越多

      2、useradd  haproxy  -s  /sbin/nologin  -M

    五、配置基于七层负载均衡

      1、vim haproxy.cfg

    ##全局配置信息###

        global 

            chroot /usr/local/haproxy/var/chroot    #chroot运行路径

            daemon                           #以后台形式运行harpoxy

            group  haproxy                     #启动程序所用组,随便写,只要下面我们

            创建这个组即可

            user   haproxy                     #启动程序所用用户,随便写,只要下面我

            们创建这个用户即可

            log 127.0.0.1:514 local0 warring        #定义haproxy 日志存放设备及级别

            pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pid

            maxconn 20480                         #默认最大连接数

            spread-checks  3

            nbproc  8                             #进程数量,一般为CPU核数2倍

    ####默认配置选项#######

     

    defaults

            log    global

            mode  tcp         #所处理的类别(7层代理http,4层代理tcp)

            retries 3            #3次连接失败就认为服务器不可用,也可以通过后面设置

            option redispatch    #serverID 对应的服务器挂掉后,强制定向到其他健康的服务

            器

            contimeout 5000      #设置默认连接超时时间

            clitimeout 50000      #设置客户端连接超时时间

            srvtimeout 50000      #设置服务器连接超时时间

    ##### 设置frontend#########

     

    frontend http_80_in

          bind 10.0.0.7:80          #设置监听端口,即haproxy提供的web服务端口和VIP,

          和lvs的vip 类似

    ####acl 策略配置######

    acl  frank_web hdr_reg(host)  -i ^(www.test.com.sh|news.test.com.sh)$

          mane 如果请求的域名 不区分大小写为这两个域名

          #如果请求的域名满足正则表达式中的2个域名则把该条请求匹配给frank_web这条

          acl ;-i 是忽略大小写

     

          redirect prefix http://192.168.151.249 code 301 if fran_web

          #如果请求的域名满足正则表达式中的2个域名则把该条请求匹配给frank_web这条

          acl 并用301跳转给http://192.168.151.249这台服务器处理;最后的fran_web一定

          要和acl上的frank_web一样,也就是 name处是什么,这里就写什么

    default_backend  wwwpools  #定义了默认的请求交由wwwpools这个地址组处理

    backend  wwwpools         #定义地址组,取名为wwwpools

            balance  roundrobin     #定义调度算法为轮询模式

            server  www  10.0.0.8:8080  check inter 1500 rise 3 fall 3 weight 1 

            #定义一个地址RS节点,取名为www,健康检查间隔为1.5秒,检查三次则把RS                  

            节点剔除;故障恢复后健康检查3次则认为真正正常

    六、在301跳转的基础上做ACL分流

           1、acl  web_www  path_beg  /www/  #把后缀带/www/的请求定义为名字为

              web_www的acl列表

           2、acl  web_bbs   path_beg  /bbs/    # #把后缀带/bbs/的请求定义为名字为

              web_bbs的acl列表

           3、use_backend  wwwpools  if  web_www  #调用web_www acl,只要请求后缀

              有/www/字符就交由wwwpools这个地址组处理

           4、usr_backend   wwwbbs  if   web_bbs   #调用web_bbs acl,只要请求后缀有

              /bbs/字符就交由wwwbbs这个地址组处理

          注意:操作之前先要配置wwwpools和wwwbbs这两个地址组

     

  • 相关阅读:
    asp.net 读取Excel文档
    ASP.NET实现IE下禁用浏览器后退按钮办法
    asp.net 追加文本(追加写入记事本)
    Sql Server中charindex、patindex的区别
    css3 简单动画
    ie6下兼容问题
    IE6下 input 背景图滚动问题及标签规范
    css2---必须学的经典---定位问题
    EF 用CallContext上下文管理
    EF查询分页
  • 原文地址:https://www.cnblogs.com/wsjhk/p/8351057.html
Copyright © 2011-2022 走看看