设为首页 收藏本站
查看: 2336|回复: 0

[经验分享] Hapoxy--基础篇

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-24 09:00:17 | 显示全部楼层 |阅读模式
主要用于为tcp和基于http应用提供,高可用,负载均衡和代理服务器的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点
wKiom1Qgv4LhIMSwAAFlCyGwkIY558.jpg

工作原理如上图所示
当客户端请求到达时,经过层层解封装得到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     {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  同于定义所有的其他配置段使用的默认彩塑,这个配置的默认配置参数可有下一个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  定义一系列的监听套接字,这些套接字可以接受客户端的请求并与之建立连接
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  用于定义一系列的后端服务器,代理会叫对应客户端的请求转发至这些服务器
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   通过关联前端和后端定义一个完整的代理,通常只对TCP流量有用
所有的代理的名称只能使用大小写字母,数字 - _ .:此外ACL名称会分字母大小写
简单应用实验:
wKioL1Qgv9HjPMhSAAE6Qzo5018522.jpg


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而后启动
下面查看负载均衡的效果
wKiom1QgwAaivVn_AAFtGuwcoEs748.jpg


代理段参数详解
Bind []: [,.....]
例如
Listen http_proxy
Bind :80,:443
Bind 10.0.0.1:10080,10.0.0.1:10443
Balance  []
Balance url_param  [check_post[]]
Aglo:
Roundrobin 轮询   支持权重 后端服务器权重可以动态调整 支持节点慢启动方式 例如后端新加入一个服务器,那么所有客户多的分配不是一下子全部加入此服务器而是慢慢均衡
stratic-rr  静态轮询
Leatconn 最少连接 适用于长连接的应用 支持慢启动
Source 源地址哈希 建议用于TCP模式调整,且不支持使用的cookie插入模式时使用:由hash-type参数决定其是否支持慢启动或是static
Uri 基于请求的uri的左半部分[query之前]或全部进行hash常用于backend为cache server 有hash type决定其是否支持慢启动
url_param 基于params的值进行哈希 即为=后面的值常用语后端服务器要对用户进行认证的场景
Url的语法://:@:/;?#

Hdr () 根据用户请求报文中指定的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  len <#>

hash-type : map-base[取模法]不支持慢启动和consistent[一致性hash]支持慢启动
推荐cacahe servers负载均衡调度时的配置
Balance uri
hash-type consistent

Server  [:port] [params]
[paramas]
Backup 备用节点
Check:健康状态检测
可跟 inter   设定检测时时间间隔,单位为ms默认2000 也可使用fastinter和downinter来根据服务器端状态优化时间延迟
      Rise  :恢复时的确认次数
      Fall  :失时的确认次数
Maxconn:超出此数放入队列
Maxque
Observe :观察方式检测后端服务器健康状态 layer4 layer7
Redir
示例:server srv2 172.16.100.6:80 redir http://www.baidu.com
Weight
Option使健康状态的检测个精细
语法:option httpchk   
示例
Backend http
Mode tcp
Option httpchk OPTIONS * HTTP/1.1Host: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
下面未启用后的页面

wKioL1QgwEmQP9ixAAP4Rm0GGXs743.jpg


ACL 访问控制列表
使用方式
定义列表---------->使用列表
Acl   匹配标准  [flags] [operator]  ......
[flags] -i 不区分大小写 -f 从指定的文件加载模式
Value 支持以下四种
整数或范围 如1024:65535 支持的操作符eq ge gt le lt
正则表达式

be_sess_rate  用于测试指定的backend上会话的创建速率
示例
Acl xyz be_sess_rate gt 50
Fe_sess_rate 用于测试指定的frontnd 上会话的创建的速率
Hdr(header)
Hdr(connection) -i close 请求报文测试 shdr则是响应报文
Method
Path_beg 用于测试请求的URL是否已指定的模式开头
Acl url_static  path_beg -i /static /javescript
Path_end
Acl url_static  path_end -i .jpg .png .css .js
hadr_beg
Acl host_static hdr_beg(host) -i img. Video. Download ftp.
hdr_end  同上
Url
Url_beg
url_reg

示例
Acl static_graph url_reg.*.(jpj|gif|js|css|ico|swf)$
use_backend varnish if static_graph

四层的ACL匹配标准
Dst  目标地址
Dst_port  目标端狗
Src  源地址
src_port  源端口
示例:
Acl good src 10.0.0.0/24
tcp-request content accept if good
tcp-request conetent reject

其他参数
Redirect location |prefix [code ]  [{if|unless}]
.location重写整个url prefix只重写前缀
示例
Redirect prefix https://centod.com if login_page !secure
Redirect location http://www.centod.com/ if !login_page secure
Reqadd|rspadd  [{if|unless} ]
示例
Acl is-ssl dst_port 81
Reqadd x-proto: SSl  if is-ssl
请求报文的首部的尾部添加一个首部
Option forwardfor [except ] [header ] [if-none]将真实客户端的地址加在发往后端服务器的请求首部的X-Fowarded-For中
Option |no option http-server-close 是否使用长连接的在客户端侧
Option |no option httpclose 被动关闭连接,即客户端主动关闭连接是否被允许
Option |no option redispatch 是否在后端server发生故障时将同一个用户的请求定向至其他的server
Block {if|unless}
阻塞用户请求
Errorfile  自定义错误页
示例
Errorfile 400 /etc/haproxy/errorfiles/400.html
http-request {allow|deny|auth[realm ]} [{if|unless} ] 基于7层做访问控制
示例
Acl nagios src 192.168.129.2
http-request allow if nagios


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25245-1-1.html 上篇帖子: varnish详解及安装 下篇帖子: HAProxy动静分离实验
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表