Hapoxy--基础篇

主要用于为tcp和基于http应用提供,高可用,负载均衡和代理服务器的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点

工作原理如上图所示

当客户端请求到达时,经过层层解封装得到httpd的报文,然后hapoxy按照事先的配置文件对报文进行处理,而后,层层封装,传到后端,响应报文同样的也会解封装再封装最后到达客户端

Haproxy的配置结构

Global setting :全局配置段

Proxies:代理配置段

Backend:后端服务器组的定义

Frontend:定义面向客户的监听的地址和端口,以及关联的后端的服务器组

Listen:组合的方式直接定义frontend及相关的backend

Defaults:默认的配置

Global配置中的参数为进程级别参数,且通常与其运行的OS有关

进程与安全相关的查宿

Chroot [dir]:修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot(),以提高安全级别,注意要确保指定的目录为空目录且任何用户不能有写权限

Daemon:以守护进程的方式工作于后台,其等同于-D选项的功能

Gid:指定GID

Group:同GID不过指明的是组名

Log  <address> <facility>  {Max level [min level]]:定义全局的syslog服务器,最多两个

Log-send-hostname :子syslog的信息的***添加当前主机名,可以为后面的字符串指定的名称,也可以缺省使用当前的主机名

Nbproc :指定进程个数,只能用于守护进行模式的haproxy:默认只启动一个进程,鉴于调试困难等原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式

Pidfile

Uid:指定UID

Ulimit-n:设定没进程所能打开的最大的文件描述符的个数,默认情况下会自动计算,一次不必修改此项

User:同UID,但是用的是用户名

Stats

Node:定义当前节点的名称,用于HA场景中多haproxy进程共享一个IP地址时

Description:当前实例的描述信息

性能调整的相关参数

Maxconn:设定每个haproxy进程所接受的最大并发连接数其等同于命令行选项-n;

Maxpipes:使用pipe完成没和的tcp报文重组

noepoll: 禁用epoll机制

Nokqueue:禁用kqueue

Nopoll:禁用poll

Nosepoll:禁用启发式的epoll

Nosplice:禁止在linux套接字上使用tcp重组

Tune.bufsize :设定buffer的大小,同样的内存条件,较小的值可以让haproxy有能力接受更多的并发连接,较大的值可以使某些程序使用较大的cookie信息:默认为16384,其可在编译时修改,不过强烈建议使用默认值

Tune.maxaccept:设定内核调度运行时一次性可以接受的连接个数,较大的值可以带来较大的吞吐率,默认在单进程模式下为100多进程下为8 设定为-1可以禁止此设置一般不建议修改

Tune.maxpollevents:设定一次系统调用可以处理的最大事件数,默认取决于OS:其值小于200时可节约贷款淡水略微增大网络延迟,而大于200时会降低延迟,但会 稍稍增加网络带宽 的占用量

Tune.maxrewrite:设置首部重写或是追加而预留的缓冲空间,建议值为1024左右:在需要使用更大的空间是,haproxy会自动增加其值

Tune.rcvbuf.client

Tune,rcbuf.server 设定内核套接字中服务端和客户端接受缓存的大小,单位为字节,强烈建议使用默认值

Debug相关的参数

Debug

Quiet

代理段的定义

Defaults <name> 同于定义所有的其他配置段使用的默认彩塑,这个配置的默认配置参数可有下一个defaults重新设定

defaults

mode                    http

log                     global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor       except 127.0.0.0/8

option                  redispatch

retries                 3

timeout http-request    10s

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                 3000

Frontend <name> 定义一系列的监听套接字,这些套接字可以接受客户端的请求并与之建立连接

frontend  main *:5000

acl url_static       path_beg       -i /static /images /javascript /stylesheets

acl url_static       path_end       -i .jpg .gif .png .css .js

use_backend static          if url_static

default_backend             app

Backend <name> 用于定义一系列的后端服务器,代理会叫对应客户端的请求转发至这些服务器

backend app

balance     roundrobin

server  app1 127.0.0.1:5001 check

server  app2 127.0.0.1:5002 check

server  app3 127.0.0.1:5003 check

server  app4 127.0.0.1:5004 check

Listen  <name> 通过关联前端和后端定义一个完整的代理,通常只对TCP流量有用

所有的代理的名称只能使用大小写字母,数字 - _ .:此外ACL名称会分字母大小写

简单应用实验:

Yum install haproxy

修改配置文件如下

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

defaults

mode                    http

log                     global

option                  httplog

option                  dontlognull

option http-server-close

option forwardfor       except 127.0.0.0/8

option                  redispatch

retries                 3

timeout http-request    10s

timeout queue           1m

timeout connect         10s

timeout client          1m

timeout server          1m

timeout http-keep-alive 10s

timeout check           10s

maxconn                 3000

frontend weserver 172.16.101.200:80

default_backend httpdserver

backend  httpdserver

balance roundrobin

server httpd1 192.168.1.101:80 check

server httpd2 192.168.1.102:80 check

编辑Vim /etc/rsyslog.conf添加如下内容

local2.*                                                /var/log/haproxy.log

后端节点分别安装httpd而后启动

下面查看负载均衡的效果

代理段参数详解

Bind [<address>]:<port_range> [,.....]

例如

Listen http_proxy

Bind :80,:443

Bind 10.0.0.1:10080,10.0.0.1:10443

Balance <algo> [<arguments>]

Balance url_param <pram> [check_post[<max_wait>]]

Aglo:

Roundrobin 轮询   支持权重 后端服务器权重可以动态调整 支持节点慢启动方式 例如后端新加入一个服务器,那么所有客户多的分配不是一下子全部加入此服务器而是慢慢均衡

stratic-rr  静态轮询

Leatconn 最少连接 适用于长连接的应用 支持慢启动

Source 源地址哈希 建议用于TCP模式调整,且不支持使用的cookie插入模式时使用:由hash-type参数决定其是否支持慢启动或是static

Uri 基于请求的uri的左半部分[query之前]或全部进行hash常用于backend为cache server 有hash type决定其是否支持慢启动

url_param 基于params的值进行哈希 即为=后面的值常用语后端服务器要对用户进行认证的场景

Url的语法<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

Hdr (<name>) 根据用户请求报文中指定的http首部进行调度 例如:hdr(host) 根据主机名进行哈希 use_domain_only:在进行哈希时仅使用域名

rdp-cookie

rdp-cookie(name)

这两种主要用于ms远程桌面的不常用

基于cookie的session绑定机制

backend中定义cookie

Cookie node insert nocache

Server name IP:port  cookie name

HAProxy的工作模式分为http和tcp 调度时发生的协议层次

http:仅用于调度httpd协议的服务器 会对应用层数据做深入分析,因此支持7层过滤 处理 转换的处理

Tcp:非http协议的服务器调度 包括https

Mode {tcp|http|health} 默认模式不定义的话就是tcp模式

指定代理服务器使用的日志

Log global :使用全局中的定义

No log

Log + 格式  参考配置文件段解释

Capture request header host len 15

Capture rsponse header <name> len <#>

hash-type : map-base[取模法]不支持慢启动和consistent[一致性hash]支持慢启动

推荐cacahe servers负载均衡调度时的配置

Balance uri

hash-type consistent

Server <name> <address>[:port] [params]

[paramas]

Backup 备用节点

Check:健康状态检测

可跟 inter <delay>  设定检测时时间间隔,单位为ms默认2000 也可使用fastinter和downinter来根据服务器端状态优化时间延迟

Rise <count> :恢复时的确认次数

Fall <count> :失时的确认次数

Maxconn:超出此数放入队列

Maxque

Observe <mode>:观察方式检测后端服务器健康状态 layer4 layer7

Redir <prefix>

示例:server srv2 172.16.100.6:80 redir http://www.baidu.com

Weight <weight>

Option使健康状态的检测个精细

语法:option httpchk <method> <uri> <version>

示例

Backend http

Mode tcp

Option httpchk OPTIONS * HTTP/1.1\r\nHost:\www.baidu.com

状态页

启用stats enable  stats auth user:password  stats hide-version  stats uri /ha?ststus  stats scope . 有效的范围 . 为但前页  stats realm string 登陆提示

管理接口启用的方式

Stats admin  if LOCALHOST|TURE

下面未启用后的页面

ACL 访问控制列表

使用方式

定义列表---------->使用列表

Acl  <aclname> <criterion>匹配标准  [flags] [operator] <value> ......

[flags] -i 不区分大小写 -f 从指定的文件加载模式

Value 支持以下四种

整数或范围 如1024:65535 支持的操作符eq ge gt le lt

正则表达式

<critersion>

be_sess_rate  用于测试指定的backend上会话的创建速率

示例

Acl xyz be_sess_rate gt 50

Fe_sess_rate 用于测试指定的frontnd 上会话的创建的速率

Hdr(header) <string>

Hdr(connection) -i close 请求报文测试 shdr则是响应报文

Method <string>

Path_beg <string>用于测试请求的URL是否已指定的模式开头

Acl url_static  path_beg -i /static /javescript

Path_end <string>

Acl url_static  path_end -i .jpg .png .css .js

hadr_beg <string>

Acl host_static hdr_beg(host) -i img. Video. Download ftp.

hdr_end <string> 同上

Url <string>

Url_beg <string>

url_reg <string>

示例

Acl static_graph url_reg.*\.(jpj|gif|js|css|ico|swf)$

use_backend varnish if static_graph

四层的ACL匹配标准

Dst <ip_adress> 目标地址

Dst_port <interger> 目标端狗

Src <ip_adress> 源地址

src_port <integer> 源端口

示例:

Acl good src 10.0.0.0/24

tcp-request content accept if good

tcp-request conetent reject

其他参数

Redirect location |prefix<to> [code<code> ] <option> [{if|unless}<condition>]

.location重写整个url prefix只重写前缀

示例

Redirect prefix https://centod.com if login_page !secure

Redirect location http://www.centod.com/ if !login_page secure

Reqadd|rspadd <string> [{if|unless} <aclname>]

示例

Acl is-ssl dst_port 81

Reqadd x-proto:\ SSl  if is-ssl

请求报文的首部的尾部添加一个首部

Option forwardfor [except <network>] [header <name>] [if-none]将真实客户端的地址加在发往后端服务器的请求首部的X-Fowarded-For中

Option |no option http-server-close 是否使用长连接的在客户端侧

Option |no option httpclose 被动关闭连接,即客户端主动关闭连接是否被允许

Option |no option redispatch 是否在后端server发生故障时将同一个用户的请求定向至其他的server

Block {if|unless} <condition>

阻塞用户请求

Errorfile <code> <file>自定义错误页

示例

Errorfile 400 /etc/haproxy/errorfiles/400.html

http-request {allow|deny|auth[realm <realm>]} [{if|unless} <condition>] 基于7层做访问控制

示例

Acl nagios src 192.168.129.2

http-request allow if nagios

时间: 2024-08-04 23:18:59

Hapoxy--基础篇的相关文章

oracle(sql)基础篇系列(五)&mdash;&mdash;PLSQL、游标、存储过程、触发器

  PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是为了补充SQL语言的,是带有了分支和循环的语言. PL/SQL 语法 基本数据类型声明 declare v_name varchar2(20); v_temp number(1); v_count binary_integer := 0; v_sal number(7,2) := 4000.00

Hybrid APP基础篇(四)-&gt;JSBridge的原理

说明 JSBridge实现原理 目录 前言 参考来源 前置技术要求 楔子 原理概述 简介 url scheme介绍 实现流程 实现思路 第一步:设计出一个Native与JS交互的全局桥对象 第二步:JS如何调用Native 第三步:Native如何得知api被调用 第四步:分析url-参数和回调的格式 第五步:Native如何调用JS 第六步:H5中api方法的注册以及格式 进一步完善JSBridge方案 思路 实现 注意 完整的JSBridge 完整调用流程图 另外实现:不采用url sche

网络基础篇----计算机网络基本概述(1)

享受生活  热爱挑战                                                                刘明远分享    一   计算机网络基本概述(1) 每章一段话: 不要让自己闲下来,给自己找些事情做.哪怕是看看书. 正文   (提示:本章内容比较无聊,最好当看故事一样来看,不必记下只需了解,内容基础) 1什么是计算机网络 号称新的"电力火花"是以计算机.通信.信息技术为支撑的计算机网络技术. 计算机网络将两台或多台计算机通过电缆或网络设

js调试系列: 源码定位与调试[基础篇]

js调试系列目录: - 如果看了1, 2两篇,你对控制台应该有一个初步了解了,今天我们来个简单的调试.昨天留的三个课后练习,差不多就是今天要讲的内容.我们先来处理第一个问题:1. 查看文章下方 推荐 这个功能所调用的函数源码其实非常简单,点放大镜选中那个推荐即可.这个  votePost(cb_entryId,'Digg')  就是推荐按钮所调用的函数了,是不是非常简单. 第二个问题,定位到函数所在文件位置.其实也是非常简单的,当然,不熟悉控制台的朋友也许不知道怎么看.我在控制台输入 voteP

DOM系列---基础篇

DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) .DOM 描绘了一个层次化的节点树,运行开发人员添加.移除和修改页面的某一部分.DOM 产生于 网景公司及微软公司创始的 DHTML(动态 HTML) ,但现在它已经成为表现和操作页面标记的真正跨平台.语言中立的方式. DOM 中的三个字母: D(文档)可以理解为整个 Web 加载的网页文档: O(对象)可以理解为类似 window 对象之类的东西,可以调用属性

深入理解iPhone数据持久化(手把手教你iphone开发 – 基础篇)

在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相应的磁盘目录中和数据库中.symbian中因为权限认证的原因,在3rd上大多数只能访问应用程序的private目录或其它系统共享目录.在iphone中,apple博采众长,提供了多种数据持久化的方法,下面笔者会逐个进行详细的讲解. iphone提供的数据持久化的方法,从数据保存的方式上讲可以分为三大部分:属性列表.对象归档.嵌入式数据库(SQLite3).其他方法. 一.属

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

php面试题汇总二(基础篇附答案)

介绍一些php常见面试题及答案,都是平时面试的时候经常会遇到的,小伙伴们仔细了解下吧.接着上一篇php面试题汇总一(基础篇附答案) 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中:而链接到当前页面的URL记录在预定义变量(2)中. 答:echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"]; 2:数组函数 arsort 的作用是(6):语句 error_reporting(2047)的作用是(7

shell脚本编程之基础篇(二)

shell脚本编程之基础篇(二) ============================================================================== 概述: ============================================================================== 退出状态 ★进程使用退出状态来报告成功或失败 ◆0 代表成功,1-255代表失败 ◆$? 变量保存最近的命令退出状态 (查看:echo $?)

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /