HAPROXY安装及配置详解与算法
HAProxy负载均衡原理及企业级实例部署haproxy集群
![HAProxy负载均衡原理及企业级实例部署haproxy集群](https://img.taocdn.com/s3/m/1a20bdff5ff7ba0d4a7302768e9951e79b896992.png)
HAProxy负载均衡原理及企业级实例部署haproxy集群⼀ HAProxy简介HAProxy是⼀种⾼效、可靠、免费的⾼可⽤及负载均衡解决⽅案,⾮常适合于⾼负载站点的七层数据请求。
客户端通过HAProxy代理服务器获得站点页⾯,⽽代理服务器收到客户请求后根据负载均衡的规则将请求数据转发给后端真实服务器。
同⼀客户端访问服务器,HAProxy保持回话的三种⽅案:1 HAProxy将客户端ip进⾏Hash计算并保存,由此确保相同IP访问时被转发到同⼀真实服务器上。
2 HAProxy依靠真实服务器发送给客户端的cookie信息进⾏回话保持。
3 HAProxy保存真实服务器的session及服务器标识,实现会话保持功能。
haproxy拓扑结构图⼆配置⽂件解析Haproxy安装后默认没有配置⽂件,需要⼿动创建/etc/haproxy.cfg。
启动haproxy时⽤-f指定配置⽂件路径。
haproxy的配置⽂件包含全局设置段与代理段,global是全局段,defaults、listen、frontend、backend为代理段。
frontend⽤来匹配客户端请求的域名或者URL;backend 定义后端服务器集群haproxy配置⽂件参数详细解析配置项描述global chroot<jail dir>将⼯作⽬录切换到<jail dir>并执⾏chrootdaemon后台⼯作模式uid进程账户id,建议设置为haproxy专⽤账户gid进程组id,建议设置为haproxy专⽤组log<address><facility>配置全局syslog,可以设置两台⽇志服务器nbproc<number>指定后台进程数量pidfile<file>指定pid⽂件ulimit-n<number>设置每个进程最⼤⽂件描述符数量maxconn<number>每个进程⽀持的最⼤并发数tune.bufsize<number>设置buffer⼤⼩,默认16384Bmode可选tcp、http、healthtimeout check<timeout>设置检查超时时间contimeout<timeout>设置连接超时时间balance roundrobin设置轮询负载bind<address>:port定义⼀个或者多个监听地址和端⼝stats auth admin:admin设置监控界⾯的⽤户名和密码stats refresh<number>统计页⾯刷新间隔时间option httplog使⽤http⽇志cookie<name>启⽤cookie的保持连接功能option forwardfor允许插⼊这种数据包头,可以让后端服务器获取客户端ip option abortonclose负载⾼时,⾃动关闭处理时间长的请求option allbackups后端服务器宕机,是否激活全部备机,默认启动第⼀个备机option dontlognull不记录空连接⽇志,主要⽤于不记录健康检查⽇志代理设置option redispatch后端某个机器宕机,强制把请求转发给健康机器monitor-uri<URi>检查uri⽂件是否存在,依次判断主机的健康状态monitor-fail if site_dead服务器宕机时,返回503代码option httpchk<uri>使⽤http协议检查服务器健康状态retries<value>服务器连接失败后的重试次数timeout client客户端最⼤超时时间,单位毫秒timeout server服务器最⼤超时时间,单位毫秒timeout connect最⼤连接超时时间,单位毫秒default_backend默认后端服务器组use_backend当条件满⾜时,指定后端服务器组acl<name><criterion>定义访问控制列表三 Haproxy实例部署本例使⽤listen定义⼀个监控端⼝;使⽤frontend定义⼀个前端80端⼝;通过backend定义名为inside_servers 和 external_servers的服务器组;使⽤default_backend定义默认服务器组external_servers;external_servers包括和 两台服务器inside_servers包含 ⼀台服务器服务器名称⽹络配置 eth0:10.10.10.10eth1:192.168.1.2 eth0:192.168.1.3 eth0:192.168.1.4 eth0:192.168.1.51 ⾸先配置web服务器在web1 web2 web3上安装httpd并配置⽹卡vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=staticIPADDR=192.168.1.3NETMASK=255.255.255.0GATEWAY=192.168.1.2ONBOOT=yesTYPE=Ethernetservice network restartyum install -y httpdiptables -Fiptables -Xservice iptables savesetenforce 0sed -i s/enforcing/disabled/g /etc/sysconfig/selinuxecho "web1 192.168.1.3" > /var/www/html/index.html service httpd restartchkconfig httpd onweb2 web3机器上执⾏与web1相同步骤,注意修改部分参数2 接着haproxy服务器配置设置两块⽹卡vim /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=staticIPADDR=10.10.10.10NETMASK=255.0.0.0ONBOOT=yesTYPE=Ethernetvim /etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=staticIPADDR=192.168.1.2NETMASK=255.255.255.0GATEWAY=192.168.1.1ONBOOT=yesTYPE=Ethernetservice network restartservice iptables stop内核调优,修改系统⽂件vim /etc/security/limits.conf* soft nofile 65535* hard nofile 65535配置⽇志⽂件,添加三⾏vim /etc/rsyslog.conf$ModLoad imudp $UDPServerRun 514local3.* /var/log/haproxy.logyum -y install gcctar zxf haproxy-1.6.11.tar.gz -C /usr/src/ cd /usr/src/haproxy-1.6.11/make TARGET=linux2628make installmkdir /var/haproxy3 创建配置⽂件vim /etc/haproxy.cfgglobalmaxconn 4096log 127.0.0.1 local3 infochroot /var/haproxyuid 99gid 99daemonnbproc 1pidfile /var/run/haproxy.pidulimit-n 65535stats socket /var/tmp/statsdefaultslog globalmode httpmaxconn 20480option httplogoption httpcloseoption dontlognulloption forwardforoption redispatchoption abortonclosestats refresh 30retries 3balance roundrobincookie SRVtimeout check 2000mstimeout connect 5000mstimeout server 50000mstimeout client 50000mslisten admin_status #定义haproxy的监控界⾯bind 0.0.0.0:6553mode httplog 127.0.0.1 local3 infostats enablestats refresh 5s #监控页⾯⾃动刷新时间5sstats realm Haproxy\ Statistics #登录监控页⾯提⽰符stats uri /admin?stats #监控页⾯URL路径stats auth admin:123456 #监控页⾯的账户密码stats hide-version #隐藏haproxy版本frontend web_service #定义前端服务器bind 0.0.0.0:80mode httplog globaloption httplogoption httpcloseoption forwardfor#acl inside_src src 192.168.1.0/24 #定义acl#use_backend inside_servers if inside_src #判断acl的源地址,把请求转发到inside_servers组default_backend external_servers #默认服务器组backend external_serversmode httpbalance roundrobin #轮询真实服务器option httpchk GET /index.html #检查index⽂件,判断服务器是否健康##定义后端真实服务器,向cookie中插⼊web1信息,check进⾏健康检查,检查时间间隔为2000ms,##连续两次健康则认为是正常开启的,连续三次检查失败则认为宕机,服务器权重1server web1 192.168.1.3:80 cookie web1 check inter 2000 rise 2 fall 3 weight 1server web2 192.168.1.4:80 cookie web2 check inter 2000 rise 2 fall 3 weight 1#backend inside_servers#mode http#balance roundrobin #轮询真实服务器#option httpchk GET /index.html #检查index⽂件,判断服务器是否健康#server web3 192.168.1.5:80 cookie web3 check inter 2000 rise 2 fall 3 weight 14 启动haproxy服务service rsyslog restart #重启系统⽇志服务haproxy -f /etc/haproxy.cfg #启动haproxy服务echo "/usr/local/sbin/haproxy -f /etc/haproxy.cfg" >> /etc/rc.local5 测试验证浏览器访问监控页⾯多次刷新访问将得到web1和web2 不同页⾯信息。
Haproxy配置项及配置实例-Haproxy入门教程
![Haproxy配置项及配置实例-Haproxy入门教程](https://img.taocdn.com/s3/m/1f1ab22330126edb6f1aff00bed5b9f3f90f7272.png)
Haproxy配置项及配置实例-Haproxy⼊门教程常⽤配置选项:OPTION 选项:option httpclose :HAProxy会针对客户端的第⼀条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略此cookie值会影响处理结果。
如果避免这种情况配置此选项,防⽌产⽣多余的cookie信息。
option forwardfor :如果服务器上的应⽤程序想记录发起请求的客户端的IP地址,需要在HAProxy上配置此选项,这样HAProxy会把客户端的IP信息发送给服务器,在HTTP请求中添加"X-Forwarded-For"字段。
option originalto :如果服务器上的应⽤程序想记录发起请求的原⽬的IP地址,需要在HAProxy上配置此选项,这样HAProxy 会添加"X-Original-To"字段。
option dontlognull :保证HAProxy不记录上级负载均衡发送过来的⽤于检测状态没有数据的⼼跳包。
BALANCE 选项:balance source :如果想让HAProxy按照客户端的IP地址进⾏负载均衡策略,即同⼀IP地址的所有请求都发送到同⼀服务器时,需要配置此选项。
balance roundrobin :HAProxy把请求轮流的转发到每⼀个服务器上,依据每台服务器的权重,此权重会动态调整。
最常见的默认配置。
COOKIE 选项:cookie JSESSIONID prefix :如果客户端只⽀持⼀个cookie,并且服务器上的应⽤程序已经对返回设置了cookie,HAProxy设置此选项可以改写应⽤程序设置的cookie信息,把服务器的信息添加到原cookie中去。
cookie SERVERID indirect :HAProxy会删除添加的cookie信息,避免此cookie信息发送到服务器。
haproxy参数
![haproxy参数](https://img.taocdn.com/s3/m/6e2fa011ac02de80d4d8d15abe23482fb4da02f7.png)
haproxy参数HAProxy是一款高性能、开源的负载均衡软件,支持TCP和HTTP 应用场景,它能够快速并且可靠地转发请求,将负载分散到多个服务器上,从而提高整体性能和可用性。
在使用HAProxy的过程中,不同的场景和需求需要使用不同的参数进行配置。
本文将从HAProxy的各个参数维度介绍相关的配置参数。
一、全局配置参数全局配置参数是一些全局的设置,包括进程数、用户账户、日志等级等,这些设置会影响整个HAProxy的行为。
具体的参数如下:1. daemon:设为1后HAProxy将在后台运行;2. nbproc:指定HAProxy使用的进程数;3. user/group:指定HAProxy运行的用户账号和组;4. chroot:指定HAProxy的chroot目录;5. log:指定运行HAProxy时的日志级别;6. maxconn:指定HAProxy对客户端的最大连接数;7. pidfile:指定HAProxy的pid文件;8. ulimit-n:指定HAProxy进程的最大打开文件数;9. stats socket:该参数允许您通过UNIX或TCP套接字控制HAProxy的运行。
二、默认配置参数所有frontend和backend的配置信息都可以包含在默认部分中。
这些信息在frontend或backend部分没有特别声明的情况下将应用于所有的部分。
默认配置参数还包括全局的一些设置(如timeout等)。
具体的参数如下:1. timeout connect:指定建立与后端服务器连接的超时时间;2. timeout client:指定客户端连接的超时时间;3. timeout server:指定从服务器接收数据的超时时间;4. timeout http-request:指定HTTP请求的超时时间;5. timeout http-keep-alive:指定HTTP keep-alive持续时间;6. timeout check:指定后端服务器健康检查的超时时间。
HAProxy详解
![HAProxy详解](https://img.taocdn.com/s3/m/1cfaa433580102020740be1e650e52ea5518ce1a.png)
HAProxy详解1. HAProxy概述1.1 HAProxy简介HAProxy提供负载均衡以及基于TCP和HTTP应⽤的代理HAProxy只是http协议的反向代理,不提供缓存功能,但额外⽀持对tcp层对基于tcp通信的应⽤做LBhttp协议的反向代理tcp层的LBHAProxy的特性:HAProxy实现了⼀种事件驱动、单⼀进程模型,此模型⽀持⾮常⼤的并发连接数HAProxy中保存了数据的数据结构为弹性⼆叉树结构代理服务器的调度算法:取模法⼀致性哈希算法LB负载均衡器:TCP:lvs,haproxy,nginxapplication layer:http:haproxy,nginx,ats,apachemysql:mysql-proxy1.2 HAProxy性能上的优势单进程、事件驱动模型显著降低了上下⽂切换的开销及内存占⽤O(1)事件检查器(event check)允许其在⾼并发连接中对任何连接的任何时间实现即时探测在任何可⽤的情况下,单缓冲(single buffering)机制能以不复制任何数据的⽅式完成读写操作,这会节约⼤量的CPU时钟周期及内存带宽借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调⽤,HAProxy可以实现零复制转发(Zero-copy forwarding)在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting)内存分配器在固定⼤⼩的内存池中可以实现即时内存分配,这能够显著减少创建⼀个会话的时长树型存储:侧重于使⽤弹性⼆叉树,实现了以O(log(N))的低开销来保持计数器命令、保持运⾏队列命令及管理轮询及最少连接队列优化的HTTP⾸部分析:优化的⾸部分析功能避免了在HTTP⾸部分析过程中重读任何内存区域精⼼地降低了昂贵的系统调⽤,⼤部分⼯作都在⽤户空间完成,如时间读取、缓冲聚合及⽂件描述符的启⽤和禁⽤等1.3 负载均衡器的性能评估1. 会话率:会话建⽴的速率2. 会话并发能⼒:整体服务器的会话并发能⼒3. 数据率:在所有会话上数据传输速率1.4 正向代理与反向代理正向代理中,proxy和client同属⼀个LAN,对server透明反向代理中,proxy和server同属⼀个LAN,对client透明1.5 代理和缓存的作⽤代理的作⽤:web缓存(加速)、反向代理、内存路由(根据流量及内容类型等将请求转发⾄特定服务器)、转码器有些CDN会在代理服务器上添加Via⾸部缓存的作⽤:减少冗余内容传输节省带宽、缓解⽹络瓶颈降低了对原始服务器的请求压⼒降低了传输延迟2. HAProxy配置⽂件详解2.1 配置⽂件格式2.1.1 配置⽂件配置⽂件:/etc/haproxy/haproxy.cfg主程序:/usr/sbin/haproxyHAProxy的配置处理3类来主要参数来源:最优先处理的命令⾏参数,global配置段,⽤于设定全局配置参数proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”2.1.2 简单的配置格式:frontend # 前端,指明它要监听在某个地址的某个端⼝上,能够接受客户端的请求的use_backend # 指明所调⽤的后端组default_backend # 指明的默认的后端组backend # 后端,定义后端服务器组balance # 指定调度算法server # 指定主机serverlisten:# 指明监听的地址和端⼝server # 然后直接指明地址default # 默认的2.1.3 简单的配置⽰例配置⼀个监听在所有接⼝的80端⼝上HTTP Proxy服务,它转发所有的请求⾄后端监听在127.0.0.1:8000上的"server" globaldaemonmaxconn 25600defaultsmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http-inbind *:80 # 监听在80端⼝上default_backend servers # 默认转发到后端的servers组内backend servers # 定义后端的servers组server server1 127.0.0.1:8080 maxconn 322.2 global配置内容详解2.2.1 简单的global配置# 这⾥⽇志只是转交给本地的local2设备,要在rsyslog中添加上local2的设备条⽬,记录到指定的⽂件中log 127.0.0.1 local2chroot /var/lib/haproxy # 切换根⽬录,haproxy是被切换到这个⽬录下以安全模式运⾏的pidfile /var/run/haproxy.pid # pid⽂件的保存位置maxconn 4000 # 最⼤连接数,这⾥⽐较保守,可以按需调整user haproxy # 进程启动时以haproxy⽤户的⾝份运⾏group haproxydaemon # 启动为守护进程# turn on stats unix socketstats socket /var/lib/haproxy/stats # 本地访问统计数据时可以基于共享内存的⽅式进程通信注意:记录⽇志时,要开启rsyslog服务,开启514/tcp和514/udp端⼝然后要加上对应设备的条⽬,以记录⽇志到指定的⽂件中:local2.* /var/log/haproxy.log2.2.2 global配置进阶进程管理及安全相关的参数:chroot <dir>修改haproxy的⼯作⽬录⾄指定的⽬录在放弃权限之前执⾏chroot()操作,可以提升haproxy的安全级别要确保指定的⽬录为空⽬录且任何⽤户均不能有写权限daemon:让haproxy以守护进程的⽅式⼯作于后台log <address> <facility> [max level [min level]]定义全局的syslog服务器,最多可以定义两个nbproc:指定启动的haproxy进程的个数,只能⽤于守护进程模式的haproxy默认只启动⼀个进程,鉴于调试困难等多⽅⾯的原因,⼀般只在单进程仅能打开少数⽂件描述符的场景中才使⽤多进程模式ulimit-n:设定每进程所能够打开的最⼤⽂件描述符数⽬,默认情况下其会⾃动进⾏计算,因此不推荐修改此选项性能调整相关的参数:maxconn <number>设定每个haproxy进程所接受的最⼤并发连接数,其等同于命令⾏选项 “-n”“ulimit -n” ⾃动计算的结果正是参照此参数设定的spread-checks <0..50, in percent>在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统⼀对众服务器进⾏健康状况检查可能会带来意外问题此选项⽤于将其检查的时间间隔长度上增加或减⼩⼀定的随机时长0到50是百分⽐,可以选择向前百分之五⼗或者向后百分之五⼗2.3 代理配置详解代理相关的配置可以如下配置段中defaults <name>“defaults”段⽤于为所有其它配置段提供默认参数,这配置默认配置参数可由下⼀个“defaults”所重新设定frontend <name>“frontend”段⽤于定义⼀系列监听的套接字,这些套接字可接受客户端请求并与之建⽴连接backend <name>“backend”段⽤于定义⼀系列“后端”服务器,代理将会将对应客户端的请求转发⾄这些服务器listen <name>“listen”段通过关联“前端”和“后端”定义了⼀个完整的代理,通常只对TCP流量有⽤Fronted和backend的组合体,⽐如haproxy实例状态监控部分配置组合的⽅式直接定义frontend及相关的backend代理名称的使⽤规则:所有代理的名称只能使⽤⼤写字母、⼩写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)ACL名称会区分字母⼤⼩写3. HAProxy配置⽂件中的关键字详解3.1 balance3.1.1 ⽤法balance <algorithm> [ <arguments> ]balance url_param <param> [check_post [<max_wait>]]3.1.2 作⽤定义负载均衡算法,可⽤于“defaults”、“listen”和“backend”<algorithm>⽤于在负载均衡场景中挑选⼀个server其仅应⽤于持久信息不可⽤的条件下或需要将⼀个连接重新派发⾄另⼀个服务器时指明调度算法:动态:权重可动态调整静态:调整权重不会实时⽣效3.1.3 ⽀持的算法roundrobin:动态基于权重进⾏轮询,动态算法,权重可以在运⾏时进⾏调整每个后端主机最多⽀持4128个连接static-rr:静态基于权重进⾏轮询,静态算法,在运⾏时调整其服务器权重不会⽣效每个后端主机⽀持的数量⽆上限leastconn:动态新的连接请求被被派发⾄具有最少连接数⽬的后端服务器较长时间会话的场景中推荐此算法,如LDAP,SQL等其不适⽤于较短会话的应⽤层协议,如HTTPsource:将请求的源地址进⾏hash运算,并由后端服务器的权重总数相除后发⾄某匹配的服务器这可以使得同⼀个客户端IP的请求始终被发派⾄特定的服务器但当服务器权重总数发⽣变化时,如果某服务器宕机,许多客户端的请求可能会被派发⾄与此前请求不同的服务器常⽤于负载均衡⽆cookie功能的基于TCP的协议其默认为静态,不过也可以使⽤hash-type修改此特性,hash-type如果是map-based则就是静态的,consistent则为动态使⽤⽰例:balance sourceserver web1 172.16.100.68:80 check weight 1server web2 172.16.100.69:80 check weight 3uri:对URI的左半部分或整个URI进⾏hash运算,并由服务器的总权重相除后派发⾄某匹配的服务器这可以使得对同⼀个URI的请求总是被派发⾄特定的服务器,除⾮服务器的权重总数发⽣了变化此算法常⽤于代理缓存或反病毒代理以提⾼缓存的命中率此算法仅应⽤于HTTP后端服务器场景其默认为静态算法,不过也可以使⽤hash-type修改此特性使⽤⽰例:balance urihash-type consistenturl_param:通过argument为Url指定的参数在每个HTTP GET请求中将会被检索如果找到了指定的参数且被赋予了⼀个值,那么此值将被执⾏hash运算并被服务器的总权重相除后派发⾄匹配的服务器在url中添加⼀个参数,然后把url中的url_param指定的那个参数的值做hash运算,并处除以总权重此算法可以通过追踪请求中的⽤户标识进⽽确保同⼀个⽤户ID的请求将被送往同⼀个特定的服务器,除⾮服务器的总权重发⽣了变化如果某请求中没有出现指定的参数或其没有有效值,则使⽤轮叫算法对相应请求进⾏调度此算法默认为静态的,不过可以使⽤hash-type修改此特性hdr(<name>):对于每个HTTP请求,通过<name>指定的HTTP⾸部将会被检索(根据请求报⽂中指定的http⾸部的值来进⾏调度,把指定的header的值做hash计算)如果相应的⾸部没有出现或其没有有效值,则使⽤轮叫算法对相应的请求进⾏调度此算法默认为静态的,不过其也可以⽤hash-type修改此特性使⽤⽰例:balance hdr(User-Agent)hash-type consistent3.2 hash-type3.2.1 ⽤法hash-type <method>3.2.2 作⽤定义⽤于将hash码映射⾄后端服务器的⽅法其不能⽤于frontend区段可⽤的⽅法有map-based和consistent,在⼤多数场景下推荐使⽤默认的map-based⽅法3.2.3 可⽤的⽅法map-based:(其实就是取模算法)hash表是⼀个包含了所有在线服务器的静态数组。
CentOS7—HAProxy安装与配置详解
![CentOS7—HAProxy安装与配置详解](https://img.taocdn.com/s3/m/7a37b9c4185f312b3169a45177232f60ddcce76c.png)
CentOS7—HAProxy安装与配置详解概述关闭SElinux、配置防⽕墙1、vi /etc/selinux/config#SELINUX=enforcing #注释掉#SELINUXTYPE=targeted #注释掉SELINUX=disabled #增加:wq! #保存退出setenforce 0 #使配置⽴即⽣效2、vi /etc/sysconfig/iptables #编辑-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址通信-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协)通信-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端⼝通过防⽕墙:wq! #保存退出/etc/init.d/iptables restart #重启防⽕墙使配置⽣效安装HAProxy1、创建HAProxy运⾏账户和组groupadd haproxy #添加haproxy组useradd -g haproxy haproxy -s /bin/false #创建nginx运⾏账户haproxy并加⼊到haproxy组,不允许haproxy⽤户直接登录系统2、安装:[root@A local]# yum install -y gcc[root@A local]# tar zxvf haproxy-1.6.9.tar.gz[root@A local]# cd haproxy-1.6.9[root@A local]# make TARGET=linux3100 CPU=x86_64 PREFIX=/usr/local/haprpxy #编译 uname -r #查看系统内核版本号[root@A local]# make install PREFIX=/usr/local/haproxy #安装#数说明:#TARGET=linux3100#使⽤uname -r查看内核,如:2.6.18-371.el5,此时该参数就为linux26#kernel ⼤于2.6.28的⽤:TARGET=linux2628#CPU=x86_64 #使⽤uname -r查看系统信息,如x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为x86_64#PREFIX=/usr/local/haprpxy #/usr/local/haprpxy为haprpxy安装路径3、设置HAProxymkdir -p /usr/local/haproxy/conf #创建配置⽂件⽬录mkdir -p /etc/haproxy #创建配置⽂件⽬录touch /usr/local/haproxy/conf/haproxy.cfg #创建配置⽂件ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置⽂件软连接cp -r /usr/local/src/haproxy-1.6.9/examples/errorfiles /usr/local/haproxy/errorfiles #拷贝错误页⾯ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加软连接mkdir -p /usr/local/haproxy/log #创建⽇志⽂件⽬录touch /usr/local/haproxy/log/haproxy.log #创建⽇志⽂件ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加软连接cp /usr/local/src/haproxy-1.6.9/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷贝开机启动⽂件chmod +x /etc/rc.d/init.d/haproxy #添加脚本执⾏权限chkconfig haproxy on #设置开机启动ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加软连接4、配置haproxy.cfg参数cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-bak #备份vi /usr/local/haproxy/conf/haproxy.cfg #编辑,修改#---------------------------------------------------------------------# Global settings#---------------------------------------------------------------------globallog 127.0.0.1 local2 ###[err warning info debug]chroot /usr/local/haproxypidfile /var/run/haproxy.pid ###haproxy的pid存放路径,启动进程的⽤户必须有权限访问此⽂件maxconn 4000 ###最⼤连接数,默认4000user haproxygroup haproxydaemon ###创建1个进程进⼊deamon模式运⾏。
HAProxy用法详解
![HAProxy用法详解](https://img.taocdn.com/s3/m/63bd863d4b73f242336c5fd0.png)
HAProxy用法详解一,HAProxy简介(1)HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP (第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
(2)HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。
多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。
事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。
此模型的弊端是,在多核系统上,这些程序通常扩展性较差。
这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
(3)HAProxy 支持连接拒绝: 因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。
这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
性能:HAProxy借助于OS上几种常见的技术来实现性能的最大化。
1,单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
2,O(1)事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
haproxy安装和配置超详细步骤(全部流程)
![haproxy安装和配置超详细步骤(全部流程)](https://img.taocdn.com/s3/m/ef16a814ba1aa8114431d9d9.png)
haproxy安装和配置步骤(全部流程)此文档是根据网上查找的资料,并通过测试成功配置haproxy负载均衡器整理出来的,这里我将所有操作步骤一步步列出来,这样可以节省大家很多的时间,而且最主要的是非常适合刚开始接触linux系统的初学者,即使什么都不懂也可以完成配置。
部署在centos 6.5系统软件版本haproxy-1.5.15(1.3.20也可以用过)假设公网ip地址10.10.10.10本人都是以管理员身份进行安装。
下载软件wget /download/1.5/src/haproxy-1.5.15.tar.gz解压tarzxf haproxy-1.5.15.tar.g进入文件夹后开始安装cd haproxy-1.5.15make TARGET=linux26 PREFIX=/usr/local/haproxy#上一条命令如果提示没有gcc编译器,使用下述语句进行安装yum install ncurses-develgccgcc-c++ make rpm-buildmake install PREFIX=/usr/local/haproxycd /usr/local/haproxy/mkdirconfmkdir logscd conf #配置文件放在此目录里以上命令万一有看不懂的哈哈,请上网查一下。
#创建配置文件vimhaproxy.cfg#如果提示没有vim ,使用下述语句进行安装yum install vim复制以下haproxy.cfg配置文件里的代码(可以在windows里创建好文件,用记事本打开编辑好了上传到/usr/local/haproxy/conf文件夹里)globallog 127.0.0.1 local0log 127.0.0.1 local3#log 127.0.0.1 local1 noticemaxconn 60000chroot /usr/local/haproxyuid 501gid 501daemonpidfile /usr/local/haproxy/logs/haproxy.piddefaultslog globaloptionhttplogmode httpbalance sourceoptiondontlognulloption http-server-closeoptionforwardfor except 127.0.0.1optionredispatchretries 3optionredispatchmaxconn 60000timeout http-request 10stimeout queue 1mtimeout connect 10stimeout client 1mtimeout server 1mtimeout http-keep-alive 10stimeout check 10smaxconn 60000#listen admin_stats#bind 0.0.0.0:80#mode http#option httplog#maxconn 10stats refresh 30sstats uri /haproxy-stats#注释:运行状态、后端服务器监控地址,上面说公网ip地址10.10.10.10那在浏览器里打开网址10.10.10.10/haproxy-stats,输入下面设置帐号密码,即可查看stats auth帐号:密码#注释:这里自己设置帐号和密码,stats hide-version#注释:本人用到acl规则可以一台haproxy分别处理不同的域名frontendweblbbind *:80acl w2017hdr_reg(host) -i ^(||)$acl w2016_web hdr_reg(host) -i #注释:这w2017,www2017就是随便命名的而已别乱就行。
HAproxy负载均衡配置教程
![HAproxy负载均衡配置教程](https://img.taocdn.com/s3/m/ad670ee5c8d376eeaeaa316e.png)
HAproxy负载均衡配置教程一、简介haproxy是一个开源的高性能负载均衡软件;支持双机热备、虚拟主机和图形化的管理界面,自带强大的对RS健康检查功能;支持TCP(四层)、HTTP(七层)应用代理功能;多用于PV很大,但是又需要七层应用代理的业务二、工作原理1、基于TCP负载均衡工作原理:使用NAT方式接收和返回请求报文,只单纯对请求流量和返回流量做转发;RS不用配置公网IP2、基于HTTP负载均衡工作原理:使用NAT方式接收和返回请求报文,在接收请求报文后会检查报文头信息,根据报文头信息匹配Frontend(ACL规则)再转发给Backend(server池);RS不用配置公网IP三、安装HAproxy1、下载haproxy源码包下载地址:/download.php?id=40475&ResourceID=125082、tar xf haproxy-1.4.22.tar.gz -C /home3、cd /home/haproxy-1.4.224、make TARGET=linux26 ARCH=x86_645、make install PREFIX=/usr/local/haproxy6、ln -s /usr/local/haproxy /usr/haproxy7、cd /usr/local/haproxy8、mkdir -p bin conf logs var/run var/chroot9、cd examples/10、cp haproxy.cfg /usr/local/haproxy/etc11、cp haproxy.init/etc/init.d/haproxy12、chmod 700 /etc/init.d/haproxy13、chkconfig --add haproxy14、chkconfig haproxy on四、配置基于四层负载均衡1、vim haproxy.cfg##全局配置信息###globalchroot /usr/local/haproxy/var/chroot #chroot运行路径daemon #以后台形式运行harpoxygroup haproxy #启动程序所用组,随便写,只要下面我们创建这个组即可user haproxy #启动程序所用用户,随便写,只要下面我们创建这个用户即可log 127.0.0.1:514 local0 warring #定义haproxy 日志存放设备及级别pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pidmaxconn 20480 #默认最大连接数spread-checks 3nbproc 8 #进程数量,一般为CPU核数2倍####默认配置选项#######defaultslog globalmode 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 #设置监控页面的用户和密码:adminbalance roundrobin #设置对RS的调度算法,这里设置的是轮询方式option httpcloseoption forwardfor #让RS节点记录客户端的真实IP,如果不加这条,RS节点只记录负载均衡服务器的IPoption 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 maxconn3000 weight 1server www02 10.0.0.9:8080 check inter 1500 fall 3 rise 3 check port 8080 maxconn3000 weight 1#定义server地址池,server是规定的server地址池字段,不能变;后面www01是名字,随便写;10.0.0.X:8080是定义的RS的IP和端口,端口最好不要用80;checkinter 1500是定义健康检查间隔为1.5秒,不定义默认为2秒检查一次;fall 3是定义检查三次后端RS都失败就把该节点踢掉,不定义默认也是检查三次;rise 3是定义当RS节点从故障到恢复,健康检查三次才会认为该节点真正正常;check port8080是指定健康检查的端口号为8080;maxconn 3000是定义单个节点最大连接数为3000pv;具体要安装服务器硬件状况配置,否则很可能会因为pv过大把服务器压垮;weight 1是定义权重,权重值越大,承载的任务越多2、useradd haproxy -s /sbin/nologin -M五、配置基于七层负载均衡1、vim haproxy.cfg##全局配置信息###globalchroot /usr/local/haproxy/var/chroot #chroot运行路径daemon #以后台形式运行harpoxygroup haproxy #启动程序所用组,随便写,只要下面我们创建这个组即可user haproxy #启动程序所用用户,随便写,只要下面我们创建这个用户即可log 127.0.0.1:514 local0 warring #定义haproxy 日志存放设备及级别pidfile /usr/local/haproxy/var/run/haproxy.pid #haproxy 进程PID文件,用于存放pidmaxconn 20480 #默认最大连接数spread-checks 3nbproc 8 #进程数量,一般为CPU核数2倍####默认配置选项#######defaultslog globalmode tcp #所处理的类别(7层代理http,4层代理tcp)retries 3 #3次连接失败就认为服务器不可用,也可以通过后面设置option redispatch #serverID 对应的服务器挂掉后,强制定向到其他健康的服务器contimeout 5000 #设置默认连接超时时间clitimeout 50000 #设置客户端连接超时时间srvtimeout 50000 #设置服务器连接超时时间##### 设置frontend#########frontend http_80_inbind 10.0.0.7:80 #设置监听端口,即haproxy提供的web服务端口和VIP,和lvs的vip 类似####acl 策略配置######acl frank_web hdr_reg(host) -i ^(.sh|.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 #定义地址组,取名为wwwpoolsbalance 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这两个地址组。
haproxy的算法
![haproxy的算法](https://img.taocdn.com/s3/m/c5eb7932a517866fb84ae45c3b3567ec112ddc5c.png)
haproxy的算法HAProxy是一款高性能的负载均衡器和代理服务器,支持多种负载均衡算法。
以下是HAProxy中常见的负载均衡算法:1. Round Robin(轮询):这是一种最简单的负载均衡算法,按照后端服务器的权重轮流分配请求。
当服务器的处理时间平均分配时,此算法运行最流畅和公平。
2. Static-RR(静态轮询):类似于Round Robin,但不支持运行时调整权重及慢启动机制。
每个服务器根据权重轮流使用,对服务器数量没有限制。
3. Leastconn(最少连接):连接数最少的服务器优先接收连接。
建议用于长会话场景,例如LDAP、SQL等协议,而不适合短会话协议,如HTTP。
4. First(首选):根据服务器在列表中的位置,自上而下进行调度。
前面服务器的连接数达到上限,新请求才会分配给下一台服务器。
一般不设置该调度方法,可以用于测试环境。
5. Source(源地址):根据请求源IP进行负载均衡。
可以确保来自同一个IP的主机使用同一个后端服务器。
6. URI(请求URI):根据请求的URI进行负载均衡。
适用于基于URL 的负载均衡场景。
7. UrlParam(请求URL参数):根据请求的URL参数进行负载均衡。
需要指定参数名称。
8. HDR(请求头):根据HTTP请求头来锁定每一次HTTP请求。
可用于特定场景下的负载均衡。
9. RDp-Cookie(Cookie):根据Cookie值进行负载均衡。
可用于保持会话的一致性。
此外,HAProxy还支持会话保持和Session共享,以解决负载请求分发到不同服务器时可能导致Session会话不同步的问题。
会话保持的方法包括:1. 用户IP识别:将用户IP经过hash计算后,指定到固定的真实服务器上。
2. Cookie识别:将WEB服务端发送给客户端的Cookie作为会话标识,实现会话共享。
综上所述,HAProxy支持多种负载均衡算法,适用于不同场景下的负载均衡和会话保持需求。
haproxy反向代理环境部署(http和https代理)
![haproxy反向代理环境部署(http和https代理)](https://img.taocdn.com/s3/m/4750018b82d049649b6648d7c1c708a1284a0a01.png)
haproxy反向代理环境部署(http和https代理)操作背景:前⽅有⼀台haproxy代理机器(115.100.120.57/192.168.1.7),后⽅两台realserver机器(192.168.1.150、192.168.1.151,没有公⽹ip,部署了很多站点)将域名解析到haproxy机器的公⽹ip,在haproxy配置⽂件⾥,根据域名转发⾄后端realserver上。
haproxy代理配置:根据域名进⾏转发(即后端机器不管部署多少个域名,都可以直接在haproxy配置⽂件⾥通过域名对域名⽅式直接指定)nginx代理配置:根据端⼝进⾏转发(即后端机器部署多个域名时,在前⾯nginx配置⾥通过upstream负载到不同的端⼝上)----------------------------------------------------------------------------------------------------------下⾯是haproxy代理服务器上的操作(1)关闭SElinux、配置防⽕墙(后端realserver机器的iptables防⽕墙可以限制只允许代理服务器访问)[root@localhost ~]# vim /etc/config/selinuxSELINUX=disabled[root@localhost ~]# setenforce 0[root@localhost ~]# getenforce[root@localhost ~]# vim /etc/sysconfig/iptables.......-A INPUT -s 115.100.120.0/24 -d 224.0.0.18 -j ACCEPT #允许组播地址通信(这⾥,我将机器的公⽹和私⽹地址都放了)-A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT-A INPUT -s 115.100.120.0/24 -p vrrp -j ACCEPT #允许 VRRP(虚拟路由器冗余协)通信-A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT[root@localhost ~]# /etc/init.d/iptables restart(2)安装haproxy1)安装编译⼯具[root@localhost ~]# yum install gcc gcc-c++ make openssl-devel kernel-devel2)安装 haproxy下载 haproxy,放到/usr/local/src⽬录下haproxy-1.5.14.tar.gz下载:提取密码:u77d[root@localhost ~]# cd /usr/local/src[root@localhost src]# ls haproxy-1.5.14.tar.gz[root@localhost ~]# tar zxvf haproxy-1.5.14.tar.gz[root@localhost ~]# cd haproxy-1.5.14接着进⾏haproxy的编译安装,haproxy编译没有configure,直接make->make install[root@localhost haproxy-1.5.14]# make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy USE_OPENSSL=1 ADDLIB=-lz [root@localhost haproxy-1.5.14]# ldd haproxy | grep ssllibssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f06ae977000)[root@localhost haproxy-1.5.14]# make install PREFIX=/usr/local/haproxy编译参数说明:TARGET=linux26 :使⽤ uname -r 查看内核,如:2.6.18-371.el5,此时该参数就为linux26CPU=x86_64 :使⽤ uname -r 查看系统信息,如 x86_64 x86_64 x86_64 GNU/Linux,此时该参数就为 x86_64PREFIX :后⾯跟的是haprpxy的安装路径USE_OPENSSL=1 ADDLIB=-lz :⽀持ssl3)设置 haproxy[root@localhost src]# mkdir -p /usr/local/haproxy/conf[root@localhost src]# mkdir -p /etc/haproxy[root@localhost src]# cp /usr/local/src/haproxy-1.5.14/examples/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg[root@localhost src]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg[root@localhost src]# cp -r /usr/local/src/haproxy-1.5.14/examples/errorfiles /usr/local/haproxy/errorfiles[root@localhost src]# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles[root@localhost src]# mkdir -p /usr/local/haproxy/log[root@localhost src]# touch /usr/local/haproxy/log/haproxy.log[root@localhost src]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log[root@localhost src]# cp /usr/local/src/haproxy-1.5.14/examples/haproxy.init /etc/rc.d/init.d/haproxy[root@localhost src]# chmod +x /etc/rc.d/init.d/haproxy[root@localhost src]# chkconfig haproxy on[root@localhost src]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin4)配置 haproxy.cfg 参数[root@localhost src]# cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-bak[root@localhost src]# vim /usr/local/haproxy/conf/haproxy.cfg #可以直接粘贴进去使⽤# this config needs haproxy-1.1.28 or haproxy-1.2.1globallog 127.0.0.1 local0 info #在本机记录⽇志maxconn 65535 #每个进程可⽤的最⼤连接数chroot /usr/local/haproxy #haproxy 安装⽬录uid nobody #运⾏haproxy的⽤户uid(使⽤id号也⾏)gid nobody #运⾏haproxy的组uid(使⽤id号也⾏)daemon #以后台守护进程运⾏defaultslog globalmode http #运⾏模式tcp、http、healthretries 3 #三次连接失败,则判断服务不可⽤option redispatch #如果后端有服务器宕机,强制切换到正常服务器stats uri /haproxy #统计页⾯ URL 路径stats refresh 30s #统计页⾯⾃动刷新时间stats realm haproxy-status #统计页⾯输⼊密码框提⽰信息stats auth admin:dxInCtFianKtL]36#统计页⾯⽤户名和密码stats hide-version #隐藏统计页⾯上 HAProxy 版本信息maxconn 65535 #每个进程可⽤的最⼤连接数timeout connect 5000 #连接超时timeout client 50000 #客户端超时timeout server 50000 #服务端超时frontend http-in #⾃定义描述信息mode http #运⾏模式tcp、http、healthmaxconn 65535 #每个进程可⽤的最⼤连接数bind :80 #监听80端⼝log globaloption httplogoption httpclose #每次请求完毕后主动关闭 http 通道acl is_1 hdr_beg(host) -i #规则设置,-i后⾯是要访问的域名;多个域名,就写多个规则,但is_1/2/...要与后⾯的use_backend 对应acl is_2 hdr_beg(host) -i acl is_3 hdr_beg(host) -i acl is_4 hdr_beg(host) -i acl is_5 hdr_beg(host) -i acl is_6 hdr_beg(host) -i acl is_7 hdr_beg(host) -i acl is_8 hdr_beg(host) -i acl is_9 hdr_beg(host) -i acl is_10 hdr_beg(host) -i use_backend test-server if is_1#如果访问is_1设置的域名,就负载均衡到下⾯backend设置的对应test-server上,其他的域名同理use_backend test-server if is_2use_backend test-server if is_3use_backend test-server if is_4use_backend test-server if is_5use_backend beta-server if is_6#如果访问is_6设置的域名,就负载均衡到下⾯backend设置的对应beta-server上,其他的域名同理use_backend beta-server if is_7use_backend beta-server if is_8use_backend beta-server if is_9use_backend beta-server if is_10backend test-servermode httpbalance roundrobin #设置负载均衡模式,source 保存 session 值,roundrobin 轮询模式cookie SERVERID insert indirect nocacheoption httpcloseoption forwardforserver web01 192.168.1.150:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 #由于后端同组的机器只有⼀台,这⾥就设置⼀台;如果后端是多台的话,就都加上,进⾏负载。
haproxy安装及配置端口转发
![haproxy安装及配置端口转发](https://img.taocdn.com/s3/m/5676245768eae009581b6bd97f1922791688beda.png)
haproxy安 装 及 配 置 端 口 转 发
一、安装
# tar zcvf haproxy-1.6.7.tar.gz # cd haproxy-1.6.7 # make TARGET=linhaproxy # make install PREFIX=/usr/local/haproxy
defaults log 127.0.0.1 local3 mode http option httplog option httpclose option dontlognull option forwardfor option redispatch retries 2 maxconn 2000 balance roundrobin stats uri /haproxy-stats timeout connect 5000 timeout client 50000 timeout server 50000 frontend web_proxy mode http bind 0.0.0.0:8080
#将haproxy安装到/usr/local/haproxy
二、配置
#cd /usr/local/haproxy/
#mkdir conf logs
#vim conf/haproxy.cfg
输入以下内容,建立一个能让haproxy跑起来的最基本的配置
global log 127.0.0.1 local3 maxconn 4096 chroot /usr/local/haproxy uid 1000 gid 1000 daemon nbproc 1 pidfile /usr/local/haproxy/logs/haproxy.pid
此处意思是:绑定80端口,如果收到tcp连接请求,则延时2秒用于判断,如果是http协议,则转发到8080端口(webserver)。
Haproxy使用手册
![Haproxy使用手册](https://img.taocdn.com/s3/m/ada14b75842458fb770bf78a6529647d272834e0.png)
Haproxy使用手册Haproxy使用手册欢迎阅读Haproxy使用手册。
本手册旨在帮助您了解和使用Haproxy,一个高性能的负载均衡软件。
章节 1、介绍1.1 Haproxy简介1.2 Haproxy的特点1.3 Haproxy的应用场景章节 2、安装和配置2.1 系统要求2.2 和安装Haproxy2.3 配置Haproxy2.3.1 前端配置2.3.2 后端配置2.3.3 地质转换配置章节 3、负载均衡策略3.1 轮询3.2 最少连接3.3 源IP哈希3.4 URL哈希3.5 权重章节 4、健康检查4.1 健康检查的目的4.2 健康检查的配置4.3 常见的健康检查机制章节 5、SSL终止和证书管理5.1 SSL终止的概念5.2 配置SSL终止5.3 证书管理5.4 SSL后端加密章节 6、日志和监控6.1 日志配置6.2 监控与报警6.3 性能统计和指标章节 7、安全性7.1 Haproxy的安全性特性7.2 防止DoS攻击7.3 基于ACL的访问控制7.4 安全性最佳实践章节 8、故障处理与调试8.1 常见故障排除方法8.2 日志分析8.3 性能调优和瓶颈分析附件:附件1、示例配置文件附件2、常用命令参考法律名词及注释:1、Haproxy: Haproxy是一款使用广泛的开源负载均衡软件,提供高可用和高性能的服务分发。
2、负载均衡: 负载均衡指的是通过将客户端请求分发到多个服务器上,从而实现对服务器负载的均衡分配,提高系统的可用性和性能。
3、SSL终止: SSL终止是指在反向代理服务器上终止SSL连接,并将解密后的HTTP请求转发到服务器上,从而减轻服务器负担和提高性能。
4、ACL: ACL是Access Control List的缩写,用于在Haproxy中进行访问控制和权限管理。
本文档涉及附件,包括示例配置文件和常用命令参考,可以在附件部分找到相应的内容。
以上是Haproxy使用手册的详细内容,希望对您的使用和理解有所帮助。
高性能反向代理软件HAProxy(三)之高可用
![高性能反向代理软件HAProxy(三)之高可用](https://img.taocdn.com/s3/m/dee6120f974bcf84b9d528ea81c758f5f61f2992.png)
高性能反向代理软件HAProxy(三)之高可用一、实验目的软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。
LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。
HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。
本文带来的是HAProxy 基于KeepAlived实现Web高可用及动静分离。
二、实验环境介绍是准备1、实验拓扑图2、环境介绍3、同步时间[root@proxy ~]# ntpdate 202.120.2.101[root@node1 ~]# ntpdate 202.120.2.101[root@node2 ~]# ntpdate 202.120.2.101[root@hpf-linux ~]# ntpdate 202.120.2.101root@Slave ~]# ntpdate 202.120.2.1014、node1、node2节点安装启动httpd及提供测试页[root@node1 ~]# rpm -q httpdhttpd-2.2.15-45.el6.centos.x86_64[root@node1 ~]# cat /www//htdoc/index.html <h1>This is node1 !</h1>[root@node1 ~]# servicehttpd start[root@node2 ~]# rpm -q httpdhttpd-2.2.15-45.el6.centos.x86_64[root@node2 ~]# cat /www//htdoc/index.html <h1>This is node2 !</h1>[root@node2 ~]# service httpd start5、安装LNMP动态站点并提供测试页如何安装LNMP这里就不列举说明了,下面提供测试页:[root@hpf-linux ~]# cat /www//index.php<h1>This is LNMP:node3 !</h1><?php phpinfo();?>6、查看各节点的服务是否启动[root@proxy htdoc]# curl http://192.168.1.9<h1>This is node1 !</h1>[root@proxy htdoc]# curl http://192.168.1.10<h1>This is node2 !</h1>[root@proxy htdoc]# curl http://192.168.1.6 |head % Total % Received % Xferd A verage Speed Time Time Time Current Dload Upload Total Spent Left Speed100 75128 0 75128 0 0 1044k 0 --:--:-- --:--:-- --:--:-- 1063k<h1>This is LNMP:node3 !</h1>三、安装并配置Haproxy1、在HA1节点安装haproxy并提供配置文件[root@proxy ~]# rpm -q haproxyhaproxy-1.5.4-2.el6_7.1.x86_64[root@proxy ~]# cat /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local0 #日志配置,所有日志都记录在本地,通过local0输出log 127.0.0.1 local1 notice maxconn 25600 #最大连接数chroot /usr/share/haproxy #改变Haproxy的工作目录uid 99 #用户的UID gid 99 #用户的GID nbproc 1 #进程数据(可以设置多个) daemon #以后台守护进程方式运行Haproxy #debug #是否开启调试defaults log global mode http #默认使用协议,可以为{http|tcp|health} http:是七层协议tcp:是四层health:只返回OK option httplog #详细记录http日志option dontlognull #不记录健康检查的日志信息retries 3 #3次连接失败则认为服务不可用option redispatch #ServerID对应的服务器宕机后,强制定向到其他运行正常的服务器maxconn 30000 #默认的最大连接数# contimeout 5000 #连接超时# clitimeout 5000 #客户端超时# srvtimeout 5000 #服务器超时timeout check 1s #心跳检测超时timeout http-request 10s #默认http请求超时时间timeout queue 1m #默认队列超时时间timeout connect 10s #默认连接超时时间timeout client 1m #默认客户端超时时间timeout server 1m #默认服务器超时时间timeout http-keep-alive 10s #默认持久连接超时时间listen stats mode http bind 0.0.0.0:8090 #指定IP地址与Port stats enable #开启Haproxy统计状态stats refresh 3s #统计页面自动刷新时间间隔stats hide-version #状态页面不显示版本号stats uri /haproxyadmin?stats #统计页面的uri为”/haproxyadmin?stats” stats realm Haproxy\ Statistics #统计页面认证时提示内容信息stats auth admin:admin #统计页面的用户名与密码stats admin if TRUE #启用或禁用状态页面frontend allen #定义前端服务器bind *:80 mode http option httpclose #每次请求完成主动关闭http连接option forwardfor #后端服务器获取客户端的IP地址,可以从http header中获取acl url_static path_end -i.html .jpg .gif #定义ACL规则以如”.html”结尾的文件;-i:忽略大小写acl url_dynamic path_end -i .php default_backend webservers #客户端访问时默认调用后端服务器地址池use_backend lamp if url_dynamic #调用后端服务器并检查ACL规则是否被匹配backend webservers#定义后端服务器balance roundrobin #定义算法;基于权重进行轮询server node1 192.168.1.9:80 check rise 2 fall 1 weight 2 server node2 192.168.1.10:80 check rise 2 fall 1 weight 2backend lamp balance source #定义算法;源地址hash运算;类似于Nginx的ip_hash server lamp 192.168.1.6:80 check rise 2 fall 1#####注释:check:启动对后端server的健康状态检测;rise:离线的server转换到正常状态成功检查的次数;fall:确认server从正常状态转换为不可用状态需要检查的次数;weight:权重,数量越大,超重越高从新载入文件:[root@proxy ~]# service haproxy restart浏览器测试:2、在HA2服务器上安装Haproxy;这里就不在介绍了,安装与配置方法与在HA1服务器上安装相同。
haproxy搭建手册
![haproxy搭建手册](https://img.taocdn.com/s3/m/cc7c33b6dd88d0d233d46abc.png)
haproxy搭建手册编制部门:网站及系统运维部受控状态:受控编制人:宗满顺编制日期:2016.3.24 审核人:批准人:动批网变更记录序号文档版本修改内容页号修改人/日期批准人/日期1注:对该文件内容增加、删除或修改均需填写此变更记录,详细记载变更信息,以保证其可追溯性。
目录1引言 (4)1.1编写目的 (4)2haproxy安装说明 (4)2.1安装目录 (4)3基本操作 (4)3.1haproxy依赖包安装 (4)4haproxy安装 (4)4.1解压 (4)4.2新建用户 (4)4.3编译安装 (4)5haproxy配置 (5)5.1创建文件夹 (5)5.2配置文件 (5)5.2.1Haproxy配置文件 (5)5.2.2启动脚本 (5)5.2.3设置启动脚本 (5)5.2.4配置日志 (6)6启动haproxy (6)1引言1.1编写目的方便运维人员安装和配置Haproxy,特此编写此手册。
2haproxy安装说明2.1安装目录/opt/haproxy3基本操作3.1haproxy依赖包安装yum -y install gcc gcc-c++4haproxy安装4.1解压haproxy-1.6.1.tar.gz4.2新建用户useradd -s /sbin/nologin -M haproxy ##用户id和组id需和配置haproxy.cfg 配置文件中的一致4.3编译安装make TARGET=linux26 PREFIX=/opt/haproxy ##TARGET是内核版本,2.6就写作26make install PREFIX=/opt/haproxy5haproxy配置5.1创建文件夹mkdir /opt/haproxy/{etc,run}5.2配置文件5.2.1Haproxy配置文件将haproxy.cfg放到/opt/haproxy/etc/目录下haproxy.cfg5.2.2启动脚本将haproxy.cfg放到/etc/init.d/目录下haproxy,修改haproxy的文件内容,如下:5.2.3设置启动脚本chmod 700 /etc/init.d/haproxychkconfig –add haproxychkconfig haproxy on5.2.4配置日志✓修改/etc/rsyslog.conf●增加local3.* /var/log/haproxy.log●修改为$ModLoad imudp$UDPServerRun 514 /etc/init.d/rsyslog restart6启动haproxy/etc/init.d/haproxy restart。
HAProxy的安装和部署
![HAProxy的安装和部署](https://img.taocdn.com/s3/m/43899f23aaea998fcc220e53.png)
HAProxy的安装和部署September 2, 2010 2 Comments考虑公司当前服务器的并发量,最终还是选定了HAProxy来实现负载均衡,相较于其他的负载均衡系统,HAProxy的配置和使用还是比较简单的。
下面是自己安装和部署haproxy的记录,比较重要的一点是解决了haproxy + syslog-ng的日志输出问题。
PS: 这个问题费了我好大神:-|PLATFORM: SUSE Linux Enterprise Server 11 (x86_64)1. haproxy的编译安装获取haproxy的源代码官方地址:http://haproxy.1wt.eu/目前最新的版本:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz命令:wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz考虑到版本的更新,具体的安装属性可能会稍有改变,建议在安装前可以大致浏览下haproxy目录下的README和Makefile两个文件。
编译haproxy进入解压后的haproxy的目录,用下列命令进行编译:make TARGET=os ARCH=arch CPU=cpu USE_xxx=1 ...这里着重说明几个常用的选项。
TARGET指定对目标操作系统在编译的时候进行优化,可选择如下值之一:Generic, linux22, linux24, linux24e, linux26, solaris, freebsd, openbsd,Cygwin, custom。
如果不确定目标系统,可以保留默认值generic。
CPU指定对特定的CPU进行优化,可选择如下值之一:generic, i586, i686, ultrasparc, custom。
默认值为generic。
Haproxy安装及配置详解与算法
![Haproxy安装及配置详解与算法](https://img.taocdn.com/s3/m/3c7577264b73f242336c5f13.png)
HAProxy安装及配置详解与算法HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。
就是说,Haproxy 甚至还支持 Mysql 的均衡负载。
如果说在功能上,能以proxy反向代理方式实现 WEB均衡负载,这样的产品有很多。
包括Nginx,ApacheProxy,lighttpd,Cheroke 等。
但要明确一点的,Haproxy 并不是 Http 服务器。
以上提到所有带反向代理均衡负载的产品,都清一色是 WEB 服务器。
简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)文件的传输以及处理。
而Haproxy 仅仅,而且专门是一款的用于均衡负载的应用代理。
其自身并不能提供http服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。
1.安装官方版本获取地址:http://haproxy.1wt.eu/,不过官方页面已经打不开了,请自行搜索!上面中的26是linux系统内核,通过命令# uname -a可查看,我使用的是CentOS# tar xzvf haproxy-1.4.24.tar.gz# cd haproxy-1.4.24# make TARGET=linux26 PREFIX=/usr/local/haproxy# make install PREFIX=/usr/local/haproxyb2.配置安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。
2、haproxy配置参数详解
![2、haproxy配置参数详解](https://img.taocdn.com/s3/m/9c81384d326c1eb91a37f111f18583d048640f53.png)
2、haproxy配置参数详解代理相关配置参数内容参考⾃马哥教育HAProxy官⽅⽂档URI Syntax:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag> //<scheme>表⽰协议;<user>:<password>可以省略;<params>表⽰参数;?<query>表⽰查询字符串;URI的左半部分是:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>;<params>ftp:///pub/gnu;type=d //type=d就是指明了类型,是⼀个params/hammers;sale=false/index.html;graphics=true //红⾊部分为params<query>/inventory-check.cgi?item=12741 //?item=12741表⽰要把item=12741当作查询条件,通过URL(红⾊部分)把条件发送给服务器端,然后服务器端会把查询条件嵌⼊到php或jsp的页⾯程序当中,由这个页⾯程序基于mysql或者其他存储协议发往服务器端,并由服务器端执⾏并取回结果,所以?item=12741是查询字符串。
什么情况下可以⽤到URI算法?(调度⽅式:对URL做hash计算,将计算结果除以总权重数)当后端服务器是缓存服务器时特别有⽤,即⽆论哪个客户端发出请求,只要资源链接是同⼀个,haproxy主机都可以始终把请求发送⾄同⼀个backend server(缓存服务器)。
HAProxy负载均衡器的配置与算法
![HAProxy负载均衡器的配置与算法](https://img.taocdn.com/s3/m/db80d2818762caaedd33d415.png)
HAProxy负载均衡器的配置与算法摘要:虽然我们看HAProxy的官方文档确实配置内容比较多,但其实我们用于线上环境,仅此几条就够用了,这也是大家说HAProxy简单的原因……关键字:配置负载均衡HAProxy虽然我们看HAProxy的官方文档确实配置内容比较多,但其实我们用于线上环境,仅此几条就够用了,这也是大家说HAProxy简单的原因,HAProxy的对应配置文件如下所示:global log 127.0.0.1 local0 maxconn 4096 chroot /usr/local/haproxy uid 99 gid 99 daemon nbproc 1 pidfile /usr/local/haproxy/logs/haproxy.pid debug defaults log 127.0.0.1 local3 mode http option httplog option httpclose option dontlognull option forwardfor option redispatch retries 2 maxconn 2000 balance source stats uri /haproxy-stats contimeout 5000 clitimeout 50000 srvtimeout 50000 listen 1paituan_proxy203.93.236.149:80 option httpchk HEAD /index.jsp HTTP/1.0 server web1 203.93.236.147:80 cookie app1inst1 check inter 2000 rise 2 fall 1 server web2 203.93.236.146:80 cookie app1inst2 check inter 2000 rise 2 fall 1加上日志支持,如下所示:#vim /etc/syslog.conf 添加: local3.* /var/log/haproxy.log local0.*/var/log/haproxy.log #vim /etc/sysconfig/syslog 修改:SYSLOGD_OPTIONS="-r -m 0" service syslog restart这里要注意的几个地方是:一、HAProyx采用的是balance source机制,它跟LVS的persistent和Nginx 的ip_hash一样,是让客户机访问时始终访问后端的某一台真实的web服务器;二、203.93.236.149是我的网站通过Keepalived生成的VIP地址;三、 option httpchk HEAD /index.jsp HTTP/1.0 是网页临近,如果HAProxy检测不到Web的根目录下没有index.jsp,就会产生503报错。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HAProxy安装及配置详解与算法
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
根据官方数据,其最高极限支持10G的并发。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。
HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整
合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
其支持从4层至7层的网络交换,即覆盖所有的TCP协议。
就是说,Haproxy甚至还支持Mysql的
均衡负载。
如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。
包括Nginx,ApacheProxy,lighttpd,Cheroke等。
但要明确一点的,Haproxy并不是Http服务器。
以上提到所有带反向代理均衡负载的产品,都
清一色是WEB服务器。
简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)
文件的传输以及处理。
而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。
其自身并不能提
供http服务。
但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。
自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。
1.安装
官方版本获取地址:http://haproxy.1wt.eu/,不过官方页面已经打不开了,请自行搜索!
上面中的26是linux系统内核,通过命令#uname-a可查看,我使用的是CentOS
#tar xzvf haproxy-1.4.24.tar.gz
#cd haproxy-1.4.24
#make TARGET=linux26PREFIX=/usr/local/haproxy
#make install PREFIX=/usr/local/haproxyb
2.配置
安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。
#cd/usr/local/haproxy
#vi haproxy.cfg
默认文件内容如下:(注意!!标示开始的为默认的配置文件没有的)
3.加上日志支持
是根据上面的global和default里的log配置#vim/etc/syslog.conf
在最下边增加
local3.*/var/log/haproxy.log
local0.*/var/log/haproxy.log
#vim/etc/sysconfig/syslog
修改:SYSLOGD_OPTIONS="-r-m0"
启日志服务service syslog restart
然后就可查看日志了
#tail–f/var/log/harpoxy.log
4.设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:
保存后赐予可执行权限
#chmod+x/etc/rc.d/init.d/haproxy
就可以使用service haproxy start|stop|restart来控制服务的启动停止跟重启。
并通过以下命令加载到开机服务启动列表
#chkconfig–add haproxy
5.启动参数
haproxy-f<配置文件>
[-n最大并发连接总数][-N每个侦听的最大并发数][-d][-D][-q][-V][-c][-p<pid文件>][-s][-l][-dk]
[-ds][-de][-dp][-db][-m<内存限制M>][{-sf|-st}pidlist...]
-d前台,debug模式
-D daemon模式启动
-q安静模式,不输出信息
-V详细模式
-c对配置文件进行语法检查
-s显示统计数据
-l显示详细统计数据
-dk不使用kqueue
-ds不使用speculative epoll
-de不使用epoll
-dp不使用poll
-db禁用后台模式,程序跑在前台
-sf<pidlist>程序启动后向pidlist里的进程发送FINISH信号,参数放在命令行的最后-st<pidlist>程序启动后向pidlist里的进程发送TERMINATE信号,参数放在命令行的最后
6.启动服务
启动服务:
#/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg
重启服务:
#/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg-st`cat /usr/local/haproxy/logs/haproxy.pid`
停止服务:
#killall haproxy
6.查看状态
在浏览器中输入haproxy监控地
址:http://ipaddress:8080/admin_status
7.Haproxy的算法
HAProxy的算法有如下8种:
1).roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
2).static-rr,表示根据权重,建议关注;
3).leastconn,表示最少连接者先处理,建议关注;
4).source,表示根据请求源IP,建议关注;
5).uri,表示根据请求的URI;
6).url_param,表示根据请求的URl参数’balance url_param’requires an URL parameter name
7).hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
8).rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
其实这些算法各有各的用法,我们平时应用得比较多的应该是roundrobin、source和lestconn,大家可以重点关注下。
这里我用HAProxy+Keepalived时没有考虑HAProxy进程级别的高HA,一来是因为淘宝也在用它作为负载均衡器,稳定性肯定不需要怀疑;二来在测试时发现确实相当的稳定,杀掉
HAProxy进程还必须用kill-9。
有一点要提醒大家,HAProxy是支持虚拟主机的,这个其实很好验证,我们做个1+1的架构,后面随便放台Nginx或Aapceh的web服务器就可能验证这种说法了;另外,经过与Nginx的正则对比,我们也确实发现HAProxy的正则处理能力上不如Nginx的强大和灵活的,我们这里也可以采取一个折衷的方案,后面的web服务器我们都用Nginx来作,如果是jsp应用,可以用Nginx+tomat,如果是跑PHP 的,可以用Nginx+FastCGI(PHP5)。