HAProxy的功能概述

反向代理

1. mode http,https: 七层反向代理(仅支持http,https七层协议)

2. mode  tcp:         (伪)四层反向代理

调度器

四层调度和七层调度的区别

1.四层调度服务器仅仅起到的是管道的作用,tcp连接是客户端和真实的后端服务器之间来建立的,调度器只起到一个转发作用(不受套接字数量限制)

2.七层调度表示调度服务器既要充当客户端的服务器(和客户端建立完整连接)又要充当后端服务器的客户端,向后端服务器发送建立连接请求

各种调度算法介绍balance

1.roundrobin  加权轮询  (适合短连接)

根据后端服务器的权重额度,生成对应的主机对象个数 存放到一个数组中  然后轮询这个数组  比如 有两台后端服务器(node1,node2)权重为2:1

总权重就为2+1=3  生成的轮询数组为  [node1,node1,node2]  然后直接轮询此数组即可实现加权轮询

动态轮询:支持服务器数量的总权重动态改变  支持慢启动     支持最大的节点数是4095

2.static-rr 静态轮询

静态轮询:修改权重和后台节点数量后 必须重启服务才能生效    不支持慢启动    无节点数量限制

3.leastconn 加权最少连接数  (适合长连接)

把当前任务调度到后台主机连接数是最少的上面

4.frist 先到先得

第一个服务器的并发连接数满额了后才会往第二台主机上调度 串行调度 设置权重无效

5.source 源地址hash

将同一个IP发送的所有请求发往同一个后台服务器进行处理

实现方式:

1.把每个IP和第一次调度处理的后台服务器的对应关系映射成hash表存放在内存中

2.map-based:  静态数组取模法   除权取余数法  哈希数据结构是一个静态的数组

3.consistent:   一致性hash算法   一致性哈希  哈希数据结构是一个树

问题:

1.将大量的SNAT的主机识别成一个IP

2.后端服务器宕机

把所有的session存放在一台单独的redis服务器中

6.uri算法

不管客户端只要访问的是同一个URL,就始终发给后端同一个缓存服务器 提高缓存利用率

7.uri_param算法

www.a.com/index;username=jack 对 jack字符串进行hash计算然后调度到某个服务器,以后只要是jack发起的请求都会被调度到同一个服务器

8.hdr(<name>) 算法

对于每个http请求,取出指定的http首部的值做hash计算,然后相同的http首部的值被调度到同一个后端服务器

HAProxy的安装

已经被集成到base仓库,直接使用yum install haproxy即可

HAProxy配置文件说明

分为两个配置段       global全局配置段和proxies代理配置段

global

proxies

defaults 为fronted   backend     listen 提供默认配置

fronted        前端配置      类似于 nginx   server {}

backend      后端配置      类似于 nginx   upstream {}

listen           同时拥有前端和后端

HAproxy配置实例

前端配置
frontend main *:
mode http
#mode只能在frontend和listen中定义 标识此代理是七层还是四层代理
#bind *:
default_backend webserver 后端配置
backend webserver
balance roundrobin
server webserver1 172.20.127.177: check
server node2 172.20.127.178: check weight backend webserver
balance uri
hash-type consistent
server webserver1 172.20.127.177: check
server node2 172.20.127.178: check weight backend webserver
balance hdr(User-Agent)
hash-type consistent
server webserver1 172.20.127.177: check
server node2 172.20.127.178: check weight backend webserver
balance roundrobin
cookie WEBSRCOOKIE insert nocache indirect
server webserver1 172.20.127.177: check cookie ck1
server node2 172.20.127.178: check cookie ck2 #七层状态检测后端服务器
backend webserver
balance roundrobin
option httpchk GET /test11.html
server webserver1 172.20.127.177: check
server node2 172.20.127.178: check #四层代理
listen ssh
bind :
mode tcp
balance leastconn
server srv1 172.20.127.177: check
server srv2 172.20.127.178: check ssh 172.20.127.175 -p errorfile 文件路径
errorloc url #操作http请求头和响应头
#响应头
frontend main *:
mode http
default_backend webserver
stats enable
rspidel ^Server:.*
rspadd laozide:\ tianhuangwansui #请求头
frontend main *:
mode http
default_backend webserver
stats enable
reqdel ^Server:.*
reqadd laozide:\ tianhuangwansui ACL实现访问控制和动静分离
访问控制
frontend main *:
mode http
default_backend webserver
acl mynet src 172.20.20.0/
http-request allow if mynet
#http-request deny if mynet
acl badip src 172.20.20.222
block if badip
errorfile /etc/haproxy/errorfile
errorloc http://www.baidu.com 动静分离
url > http://www.yxh.com:80/static/images/a.jpg
path > /static/images/a.jpg(url去掉协议,主机名,端口)
path_beg /images/ 以/images/开始
path_end .jpg .jpeg .png
path_sub images 包含images子字符串
path_dir jpegs 包含jpegs子目录
path_dom jd 包含jd子域名 url示例 http://www.yxh.com:80/static/images/a.jpg
url_beg
url_end
url_sub
url_dir
url_dom [root@localhost html]# find /usr/share -iname "*.jpg" -exec cp {} ./images \;
frontend main *:
mode http
default_backend webserver
stats enable
acl url_img path_beg /images
acl url_img path_end .jpg .png .jpeg .gif
use_backend imgsrvs if url_img backend imgsrvs
balance roundrobin
server imgsrv1 172.20.127.177: check backend webserver
balance roundrobin
server webserver1 172.20.127.177: check
server node2 172.20.127.178: check

基础配置实例

代理服务调试步骤

从七层架构底层向上层一层一层分析
        1.  先检查服务器的链路层 查看远程主机是否在线
        2.  然后在服务器的网络层 ping 远程主机
        3.  查看远程主机的相关服务是否启动 相应端口是否处于监听

HAProxy基础原理介绍的更多相关文章

  1. Sql注入基础原理介绍

    说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...

  2. DNS服务基础原理介绍

    FQDN 全称域名 localhost(主机名或者是别名).localdomain(域名)    FQDN=主机名.域名 根域               . 顶级域名       .com   .n ...

  3. Hadoop基础-Hdfs各个组件的运行原理介绍

    Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...

  4. 云小课|MRS基础原理之MapReduce介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...

  5. 03 Yarn 原理介绍

    Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理   Hadoop的1.X架构的介绍   在1.x中的NameNodes只可能有一个,虽然可以通过Se ...

  6. 液晶常用接口“LVDS、TTL、RSDS、TMDS”技术原理介绍

    液晶常用接口“LVDS.TTL.RSDS.TMDS”技术原理介绍 1:Lvds Low-Voltage Differential Signaling 低压差分信号 1994年由美国国家半导体公司提出之 ...

  7. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

  8. 《分布式系统原理介绍》【PDF】下载

    内容简介 分布式系统理论体系非常庞大,涉及知识面也非常广博,本文精心选择了部分在工程实践中应用广泛.简单有效的分布式理论.算法.协议加以介绍.全文分为两大部分,第一部分介绍了分布式系统的一些基本概念并 ...

  9. Kylin系列之二:原理介绍

    Kylin系列之二:原理介绍 2018年4月15日 15:52 因何而生 Kylin和hive的区别 1. hive主要是离线分析平台,适用于已经有成熟的报表体系,每天只要定时运行即可. 2. Kyl ...

随机推荐

  1. ThinkingInJava 学习 之 0000006 复用类

    1. 组合语法 将对象引用置于新类中. 2. 继承语法 衍生类自动获得基类中所有的域和方法 super关键字表示基类. 1. 初始化基类 当创建一个衍生类的对象时,该对象创建一个基类的子对象并包含子对 ...

  2. IOS-一步一步教你自定义评分星级条RatingBar

    本文转载至 http://blog.csdn.net/hanhailong726188/article/details/42344131 由于项目的需要,需要设计能评分.能显示评分数据的星级评分条,但 ...

  3. linux相关(3)

    1. shell环境变量 能够存在于本shell进程及其子shell进程的变量.变量可以从父shell进程传递给子shell进程,而不能反过来,因此环境变量在子shell进程中无论如何修改都不会影响到 ...

  4. WMware 安装 Mac OSX

    1,下载unlock.zip工具,破解VMware没有mac选项情况 2. 下载OS X 10.11.1(15B42).cdr 3.MWare虚拟机提示:“锁定文件失败,打不开磁盘或快照所依赖的磁盘” ...

  5. 命名空间与Autoload

    命名空间是为了防止函数名冲突 当php编译器找到未定义类时,就会自动去调用__autoload($class)这个函数,$class就代表这个未定义的类名相对于当前项目根目录所在路径   php5.3 ...

  6. Flask web开发之路六

    紧接着上篇文档,写模板继承和block,URL链接和加载静态文件 模板继承和block 项目结构 主app文件代码: from flask import Flask,render_template a ...

  7. NFS使用autofs自动挂载

    NFS自动挂载设置在/etc/fstab和/etc/rc.local可能挂载不成功,假如是服务端NFS宕机还可能导致客户端无法启动,可以使用autofs实现自动挂载 安装autofs yum -y i ...

  8. CentOS和Redhat单用户模式

    当系统无法启动时,可能是/etc/fstab挂载错误导致这时候可以进入单用户模式修改配置文件后重启 重启系统出现以下界面按e 选择第二栏按e健 在后面输入1回车回到上一个页面按b健启动 进入单用户模式 ...

  9. 记一次treegrid checkbox 选择问题

    最后选择 select 方法来实现 checkRow checked 属性也不行 getChecked 方法并不能取到这两种方法的行数据

  10. sql里的ROW_NUMBER() OVER是啥意思?

    是一个分析函数,生成一个排序列select row_number(XX) over(partition by XXX order by XX [desc/asc]) frou table;partit ...