haproxy 基础详解 及 动静分离的实现

haproxy 介绍

1 工作在ISO 七层 根据http协议(或者工作在ISO四层 根据tcp协议) 提供web服务的负载均衡调度器

负载均衡调度器分类
工作在四层:
#  lvs
工作在七层:
#  nginx   (web,http reverse proxy,cache)
#  haproxy (http reverse proxy,tcp proxy)
#     tcp:  实现MySQL的读写中读的负载均衡
#  ats     (apache traffic  server)
#  perlbal
#  pound
#  squid
#  varnish
  以上程序都可以实现服务的向外拓展;

haproxy特性

haproxy 当前版本为1.3  1.4,下面我们介绍1.4版本的特性

# 客户端侧的长连接(client-side keep-alive)
# TCP加速(TCP speedups)
#  响应池(response buffering)
#  RDP协议
#  基于源的粘性(source-based stickiness)
#  更好的统计数据接口(a much better stats interfaces)
#  更详细的健康状态检测机制(more verbose health checks)
#  基于流量的健康评估机制(traffic-based health)
#  支持HTTP认证
#  服务器管理命令行接口(server management from the CLI)
#  基于ACL的持久性(ACL-based persistence)
#  日志分析器

官网站点:haproxy.1wt.eu

haproxy 架构图

haproxy.cfg 配置文件详解

安装

#yum -y inistall haproxy

配置文件路径

/etc/haproxy/haproxy.cfg

(1)配置由两部分组成
 #global settings: 对haproxy进程自身属性的设定----------全局设定段
 #proxies: 对代理的设定 -----------------代理设定段
  defaults
  frontend
  backend
  listen
  其中defaults为proxies提供默认属性,frontend接受客户端的请求,backend连接后端的上游服务器(类似于nginx的upstream),listen是特定的frontend与backend的组合
(2)定义一个完整的代理的方式:
  frontend
  backend
  listen
(3)defaults段分析

#  option   httpclose:使用短连接
#  option   redispath:使用cookie保持会话,如果后端的server宕机,则使用redispath 重定向另一个路径继续保持会话;
#  option   http-server-close  :当keep-alive超时时,使用该选项在服务器上关闭会话
#  timeout  connect  :haproxy转发到后边upstream server 时等待的时长
#  timeout  client   :客户端非活动状态的超时时长
#  timeout  server   :  haproxy和后边的服务器段保持一个会话,当后台服务器down掉后,haproxy等待的超时时间
#  timeout-keep-alive:定义保持连接模式的超时时长
#  timeout-check     : 建立状态检测时间的超时时间
#  maxconn           :每一个server最大并发连接数
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

负载均衡调度方法

格式:balance  roundrobin| static-rr| leastconn | source | uri | uri_param | hdr(<name>) | rdp-cookie(name)
调度方法解析
#roundrobin :属于加权轮询 (动态)  支持服务器活动时修改其权重,服务器下线后重新上线时支持慢启动
#static-rr :  属于加权轮询(静态)不支持服务器活动时修改,需要重启服务才能生效
#             老服务器重新上线上时,立刻会收到大批量的请求
#leastconn :支持动态修改权重,慢启动
#source    :默认为(静态)方法,hash/ 源ip 取模算法,支持hash-type调整为动态
#uri       :默认为(静态)方法,hash/weight 取模算法,支持hash-type来调整
#url-params:默认为(静态)方法,hash/wgith 算法,支持hash-type调整
#hdr (<name>):默认为静态方法, 先对<name>做hash计算然后 hash/weight 计算,支持hash-type调整
调度方法的使用总结
#1、调度众多的MySQL从服务器,用什么调度方法?
   leastconn
#2、调度web图片服务器组,用什么调度方法?
   roundrobin
#3、调度web图片服务器组,用什么调度方法?
   source 或者 cookie
#4、调度web缓存服务器组,用什么调度方法?
   uri
    hash-type:
      map-based (默认的静态的hash表)
      consistent(动态的一致性hash) ---------在后端的cache服务器上使用,否则会导致服务器的加入或者退出时 服务器群瘫痪

haproxy 的工作模式 (使用mode参数)

http :http协议  --------haproxy的价值体现于此
#      对应用层数据做深入分析,因此支持7层的过滤、处理、转换等机制;

tcp  :haproxy在客户端和upstream server之间建立一个全双工的连接
#      不会对应用层协议做任何检查
#      SSL 、MySQL、SSL等都应该使用此模式;
#      默认模式!

指定haproxy日志

# log global : 使用全局配置中定义的日志服务器;
# log <address> <facility> [<level>  [<minlevel>]]
# capture request header <HEADER>  len <LENGTH>
# capture resopense header <HEADER>  len <LENGTH>
实例:在frontend中定义一个日志
(1)编辑rsyslog.conf
#vim  /etc/rsyslog.conf  在日志服务器上先定义一个日志
 local3.*    /var/log/hawebsrv.log
#service rsyslog restart
(2)编辑haproxy.cfg
 #vim /etc/haproxy/haproxy.cfg
  frontend websrv
  log 127.0.0.1 local3
  bind *:80
  default_backend  webservers
 #serivce  haproxy reload
(3)haproxy服务器测试
  #tail /var/log/hawebsrv.log

haproxy中的ACL

格式:acl <aclname>  <criterion> [flags] [oprator] <value>     

      value:   支持整数或者整数范围
                支持字符串
                支持正则表达式
                支持ip地址和网络地址
ACL例子
# acl url_static  path_beg  /static /images  /img /css
# acl url_static  path_end  .gif  .png  .jpg  .css .js
# acl host_www    hdr_beg(host) -i  www
# acl  host_static  hdr_beg(host) -i  img. video. download. ftp.
# use_backend   static  if  host_static  or host_www or url_static
# use_backend   www  if  host_www
实现访问控制
http-request:7层过滤   (借助于定义好的acl实现)
tcp-request: 4层过滤    (借助于定义好的acl实现)

haproxy 动静分离的实现

架构图

1、 环境配置

haproxy服务器配置
 外网网卡
#ifconfig eth0 172.16.13.2/16 up
#route add default gw 172.16.0.1
 内网网卡
#ifconfig eth1 192.168.20.1/24 up
两台上游服务器配置
server1 配置
#ifconfig eth0 192.168.20.11/24
#route add default gw 192.168.20.1
 提供页面
#vim /var/www/html/index.html
 <h1>node1.linux.com</h1>
#service httpd start
server2配置
#ifconfig eth0 192.168.20.12/24 up
#route add default gw 192.168.20.1
 提供页面
#vim  /var/www/html/index.html
  <h1>node2.linux.com<h1>
#service  httpd start

2、  安装配置haproxy

# yum -y install haproxy  安装haproxy
#vim /etc/haproxy/haproxy.cfg  编辑配置文件自定义一个backend和frontend,注释原有的内容
frontend  websrv *:80
  default_backend   webservers
backend   webservers
  balance   roundrobin
  server     node1  192.168.20.11:80  check
  server     node2   192.168.20.12:80   check 

3、 客户端测试

此时说明 haproxy服务器将客户的请求以roundrobin算法 反向代理给后端的服务器!

4、启用全局日志功能

(一)编辑rsyslog.conf
#vim  /etc/rsyslog.conf  开启如下行
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
添加日志
local2.*           /var/log/haproxy.log

#service rsyslog restart 重启服务
(二)编辑haproxy.cfg
 # vim  /etc/haproxy/haproxy.cfg 开启如下行
  log         127.0.0.1 local2
 # service  haproxy restart  重启服务
(三)日志查看
 #tail -f /var/log/haproxy.log

接下来让我们来拓展haproxy的功能

5 、调度算法 uri的实现

1)后端服务器 server1 与 server2 同时创建多个页面
server1
#cd /var/www/html/
# for i in {1..10}; do echo "<h1>node1.test$i</h1>"  >  test$i.html; done
server2 方法同server1
 2)更改haproxy.cfg的配置文件中的调度算法
  balance uri
 3)客户端测试
# http://172.16.13.2/test1.html

基于172.16.13.2/test1.html 该uri,haproxy服务器反向代理至后台服务器至同一台服务器server2

6、基于cookie实现会话绑定

1)编辑haproxy.cfg配置文件
#vim  /etc/haproxy/haproxy.cfg  内容如下
frontend websrv
   bind *:80
   default_backend  webservers
backend  webservers
   cookie node insert nocache
   balance roundrobin
   server  node1  192.168.20.11:80 check  cookie node1
   server  node2  192.168.20.12:80 check  cookie node2
2)客户端测试
#http://172.16.13.2/test1.html

上图可见,基于cookie实现了客户端的请求与后端服务器server2的会话绑定

7、haproxy管理界面---stats enable

#vim /etc/haproxy/haproxy.cfg 增加一个listen段,如下所示
listen statspage
   bind *:8009    -------侦听端口
   stats enable   -------开启stats
   stats hide-version -----隐藏版本
   stats auth admin:admin ----登录验证信息
   stats admin if TRUE    ----实现在管理界面上对所有backend服务器管理
   stats uri /admin?stats ----登录的uri路径

8、haproxy动静分离的实现

1)server2 服务器安装php
#yum -y install php php-mysql
提供php动态页面
#vim /var/www/html/index.php
<h1>node2.linux.com</h1>
<?php
     phpinfo();
?>

2)重新配置haproxy配置文件
#vim  /etc/haproxy/haproxy.cfg   定义frontend  和 backend
frontend websrvs
    bind *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js .html
    acl host_static      hdr_beg(host)  -i img. video. download. ftp. imags. videos.
    acl url_php          path_end       -i .php
    use_backend static          if url_static or host_static
    use_backend dynamic         if url_php
    default_backend             dynamic
         backend static
    balance     roundrobin
    server      node1 192.168.20.11:80  check maxconn 30000    

         backend dynamic
    balance     roundrobin
    server  node2 192.168.20.12:80 check maxconn  1000
# service haproxy restart
3) 客户端测试 动静分离

如图所示:静态页面代理至server1服务器,动态页面代理至server2 服务器,实现

PS: 个人水平有限,不足之处请指出。关于更多信息请参考haproxy官方网站。

haproxy 基础详解 及 动静分离的实现

时间: 2024-10-26 16:32:26

haproxy 基础详解 及 动静分离的实现的相关文章

HAPorxy详解及动静分离实例

一.HAProxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.   HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.    并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动.单一进程模型,此模型支持非常大的并发连接

HAProxy:基础详解

一.简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上. HAProxy实现了一种事件驱动.单一进程模型,此模型支持非常大的并发连接数.多进程或多线程模型受内存

Swift学习——Swift基础详解(五)

上回书说道:灰常灰常基本的数据类型 下面咱们来点高级的: Tuples    元组 元组存储一对键值,并且没有类型限制 let http404Error = (404, "Not Found") // http404Error is of type (Int, String), and equals (404, "Not Found") 书上废话一堆,反正元组就是这么写,上面的例子还是(Int,String)类型的元组,而且元组里面的类型随便你定义 也可以将元组的变

HAproxy指南之haproxy配置详解(理论篇)

一.haproxy配置文件详解 haproxy配置分为五部分,分别如下: 1 global:  (全局配置主要用于设定义全局参数,属于进程级的配置,通常和操作系统配置有关) 2 default : (配置默认参数,这些参数可以被用到frontend,backend,Listen组件) 在此部分中设置的参数值,默认会自动引用到下面的frontend.backend.listen部分中,因引,某些参数属于公用的配置,只需要在defaults部分添加一次即可.而如果frontend.backend.l

Swift学习——Swift基础详解(四)

A:小儿编程很不好! B:多半是不爱学,从看英文版开始,让你爱上编程! Type Aliases    类型重定义(typedef) Swift中重定义类型的关键字是typealias,至于怎么用,应该不必多说了,看例子: typealias AudioSample = UInt16 //定义了一个类型名称AudioSample,代表UInt16类型 var maxAmplitudeFound = AudioSample.min // maxAmplitudeFound is now 0 Boo

CentOS 6.5 HAProxy+apache实现web服务动静分离

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露

Swift学习——Swift基础详解(一)

注:由于基础部分在Swift Tour 中已经大体的说明了,所以在详解中不会达到100%的原文释义 Constants and Variables  常量和变量 常量和变量都需要声明名称和类型(作为程序员,这些基础也就不说了),常量一次赋值不能改变,变量的值可以改变 Declaring Constants and Variables   声明常量和变量 常量和变量在使用之前必须要声明,使用let关键字定义常量,var关键字定义变量 下面的例子可以用来定义用户登录的时候最大的尝试次数: let m

Swift学习——Swift基础详解(二)

上节说了没有营养的变量和常量,这玩意,都差不多,自己稍微看下就好了 Integers    整型 整数就是整数了,没有小数,整数有符号(+,-,0)或者无符号(0,+) Swift提供了8,16,32,64位的有符号和无符号的整数,命名使用C的方式,比如,8位无符号的整型UInt8,32位有符号的整型就是Int32 Integer Bounds    整型范围 可以使用min 和 max获取整数类型的最大值和最小值 let minValue = UInt8.min // minValue is

HAProxy+apache实现web服务动静分离

HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露