内容简介:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。1、安装2、调整参数
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
1、安装
[root@node1 varnish]# yum install haproxy
2、调整参数
nbproc <number>:要启动的haproxy的进程数量; 官方建议一个 默认一个 maxconn 每个进程最大连接数 一个连接33kb 1g内存 能创建20000-25000个进程,这个还是要看具体调整 maxconnrate 最大创建连接速率 maxse***ate 最大创建会话数量 maxsslconn 最大创建ssl连接 默认还是maxconn,防止内存溢出等 ulimit-n <number>:每个haproxy进程可打开的最大文件数; 客户端 服务端,所以是最大连接数量*2, 会自动调整 timeout client <timeout> 客户端非活动超时时长 timeout server <timeout> 服务器端非活动时长 timeout http-keep-alive 持久连接的持久时长; timeout http-request 等待http请求报文超时时长 timeout connect 跟服务器连接 超时时长 timeout client-fin 客户端断开连接 默认30s timeout server-fin 服务器断开连接
调整maxconn即可,其他看情况调整
3、配置前端后台
#调度方法
#roundrobin 动态算法:支持权重的运行时调整,支持慢启动;每个后端中最多支持4095个server;
#static-rr:静态算法:不支持权重的运行时调整及慢启动;后端主机数量无上限;
#leastconn:推荐使用在具有较长会话的场景中,例如 MySQL 、LDAP等;
#first:根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务;
#source:源地址hash;
#<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
#左半部分:/<path>;<params>
#整个uri:/<path>;<params>?<query>#<frag>
#uri:对URI的左半部分做hash计算,并由服务器总权重相除以后派发至某挑出的服务器;
#url_param 对用户请求的uri听<params>部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server;
#hdr(<name>):对于每个http请求,此处由<name>指定的http首部将会被取出做hash计算; 并由服务器总权重相除以后派发至某挑出的服务器;没有有效值的会被轮询调度; hdr(Cookie)
#调度算法
#hash-type
#map-based:除权取余法,哈希数据结构是静态的数组;
#consistent:一致性哈希,哈希数据结构是一个树;
#mode { tcp|http|health }
#tcp:基于layer4实现代理;可代理mysql, pgsql, ssh, ssl等协议;
#http:仅当代理的协议为http时使用;
#health:工作为健康状态检查的响应模式,当连接请求到达时回应“OK”后即断开连接;
#server 参数
#server <name> <address>[:port] [settings ...]
#<name>:服务器在haproxy上的内部名称;出现在日志及警告信息;
#<address>:服务器地址,支持使用主机名;
#[:[port]]:端口映射;省略时,表示同bind中绑定的端口;
#[param*]:参数
#maxconn <maxconn>:当前server的最大并发连接数;
#backup:设定当前server为备用服务器;
#check:对当前server做健康状态检测;
#addr :检测时使用的IP地址;
#port :针对此端口进行检测;
#inter <delay>:连续两次检测之间的时间间隔,默认为2000ms;
#rise <count>:连续多少次检测结果为“成功”才标记服务器为可用;默认为2;
#all <count>:连续多少次检测结果为“失败”才标记服务器为不可用;默认为3;
#注意:httpchk,"smtpchk", "mysql-check", "pgsql-check" and "ssl-hello-chk" 用于定义应用层检测方法;
#cookie <value>:为当前server指定其cookie值,用于实现基于cookie的会话黏性; 一次固定值,第二次找这个固定值对应的主机
#disabled:标记为不可用;
#redir <prefix>:将发往此server的所有GET和HEAD类的请求重定向至指定的URL; https://www.baidu.com
#weight <weight>:权重,默认为1;
frontend main *:80 mode tcp default_backend app backend app balance source hash-type map-based server node2 192.168.1.201:80 check inter 1000 rise 1 fall 2 weight maxconn 2000 server node3 192.168.1.202:80 check
4、配置状态页面和认证(base64)
可以写在backend 和 frontend中 listen stats:10080 # 也可以配置backend 或者 frontend 或者 listen stats enable stats uri /haadmin?admin stats realm "HAProxy Statistics" stats auth admin:admin stats auth admin1:admin1 stats admin if TRUE #状态页面设置 慎用
5、tcp代理
listen sshsrvs :10022 mode tcp maxconn 10 balance leastconn server ssh1 192.168.1.201:22 check server ssh2 192.168.1.202:22 check
6、基于cookie绑定
backend websrvs cookie WEBSRV insert nocache indirect server srv1 172.16.100.6:80 weight 2 check rise 1 fall 2 maxconn 3000 cookie srv1 server srv2 172.16.100.7:80 weight 1 check rise 1 fall 2 maxconn 3000 cookie srv2
#第一次来添加cookie值,第二次根据cookie值到指定的后端主机
7、代理ip 默认就有
默认开启的 option forwardfor [ except <network> ] [ header <name> ] [ if-none ] option forwardfor header X-Client 重命名
8、自定义错误页面
<code>:is the HTTP status code. Currently, HAProxy is capable of generating codes 200, 400, 403, 408, 500, 502, 503, and 504. errorfile 400 /etc/haproxy/errorfiles/400badreq.http errorfile 408 /dev/null # workaround Chrome pre-connect bug errorfile 403 /etc/haproxy/errorfiles/403forbid.http errorfile 503 /etc/haproxy/errorfiles/503sorry.http errorloc <code> <url> errorloc 403 http://www.baidu.com errorloc302 <code> <url> #_____________________________________________________________ acl invalid_src src 192.168.1.104 block if invalid_src errorfile 403 /root/error.html
9、header
reqadd <string> [{if | unless} <cond>] rspadd <string> [{if | unless} <cond>] reqdel <search> [{if | unless} <cond>] reqidel <search> [{if | unless} <cond>] (ignore case) rspdel <search> [{if | unless} <cond>] rspidel <search> [{if | unless} <cond>] (ignore case) #_________________________________________________________________________ frontend main *:80 rspadd X-var:\ Haproxy rspdel X-Powered-By default_backend app
10、日志
log:定义全局的syslog服务器;最多可以定义两个; log 127.0.0.1 local2 log-format <string>: 默认发往本机的日志服务器; (1) local2.* /var/log/local2.log (2) $ModLoad imudp $UDPServerRun 514 [root@node1 varnish]# tail /var/log/haproxy.log Jun 7 14:56:57 localhost haproxy[8676]: 192.168.1.104:64969 [07/Jun/2018:14:56:57.477] main app/node2 0/0/0/2/2 200 1734 - - --VN 2/2/0/0/0 0/0 "GET /index.php HTTP/1.1" >>> Feb 6 12:14:14 localhost \ haproxy[14389]: 10.0.1.2:33317 [06/Feb/2009:12:14:14.655] http-in \ static/srv1 10/0/30/69/109 200 2750 - - ---- 1/1/1/1/0 0/0 {1wt.eu} \ {} "GET /index.html HTTP/1.1" Field Format Extract from the example above 1 process_name '[' pid ']:' haproxy[14389]: 2 client_ip ':' client_port 10.0.1.2:33317 3 '[' accept_date ']' [06/Feb/2009:12:14:14.655] 4 frontend_name http-in 5 backend_name '/' server_name static/srv1 6 Tq '/' Tw '/' Tc '/' Tr '/' Tt* 10/0/30/69/109 7 status_code 200 8 bytes_read* 2750 9 captured_request_cookie - 10 captured_response_cookie - 11 termination_state ---- 12 actconn '/' feconn '/' beconn '/' srv_conn '/' retries* 1/1/1/1/0 13 srv_queue '/' backend_queue 0/0 14 '{' captured_request_headers* '}' {haproxy.1wt.eu} 15 '{' captured_response_headers* '}' {} 16 '"' http_request '"' "GET /index.html HTTP/1.1" Tq 等待客户端发送报文时间 tw 队列等待时长 tc 创建连接时长 Tr 等待服务器发送响应到代理时间 tt 接收报文时长 actconn 日志记录时候当前进程连接数 feconn 日志记录时候前端连接数 beconn 日志记录时候后端连接数 srv_conn 日志记录时候当前活动连接数 retries 日志记录时候重新连接的个数 #捕获并记录日志 capture request header Host len 64 capture request header User-Agent len 128 capture request header X-Forwarded-For len 100 capture request header Referer len 200 capture response header Server len 40 capture response header Server-ID len 40 log-format %T\ %t\ Some\ Text log-format %{+Q}o\ %t\ %s\ %{-Q}r
11、压缩
compression algo <algorithm> ...:启用http协议的压缩机制,指明压缩算法gzip, deflate; compression type <mime type> ...:指明压缩的MIMI类型 #___________________________________________________________ compression type application/javascript text/plain compression algo gzip
12、动静分离
frontend main *:80 acl invalid_src src 192.168.1.104 block if invalid_src #如果源地址是192.168.1.104 invalid_src=True ;如果invalid_src是真就block 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 #else default_backend app
13、虚拟主机动静分离配置
frontend main *:80 acl www_proxy hdr_dom(host) -i www.proxy.develop acl url_static path_end -i .jpg .gif .png .css .js use_backend www_proxy_static if url_static use_backend www_proxy_dynamic if www_proxy ! url_static backend www_proxy_static server node1 192.168.1.201:80 check backend www_proxy_dynamic server node2 192.168.1.202:80 check
14、https(http->https)
frontend https_frontend bind *:443 ssl crt /etc/haproxy/demo.pem default_backend app frontend main *:80 acl ssl_proxy hdr_dom(host) -i www.proxy2.develop redirect scheme https if ssl_proxy
以上所述就是小编给大家介绍的《Linux haproxy代理介绍》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!