# haproxy简介 [官网](https://www.haproxy.org/) Haproxy是一款开源、高效、可靠的反向代理软件,可以代理TCP、HTTP,它主要功能用来提供负载均衡。它特别适用于高并发的场景。 和Nginx比起来,优势在于它支持更多负载均衡算法。 核心功能: 1)负载均衡 2)健康检查 3)会话保持 4)ssl 5)http重定向 6)监控与统计 关键特性: 1)性能强 采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。单个HAProxy进程的处理能力可突破10万请求/秒 2)稳定 HAProxy的大部分工作都是在操作系统内核完成的,所以只要Linux操作系统稳定,它就很稳定。按照作者的说法,HAProxy在13年间从未出现过一个会导致其崩溃的BUG,HAProxy一旦成功启动,除非操作系统或硬件故障,否则就不会崩溃。 ## 安装Haproxy 直接yum/dnf安装即可,版本偏低,如果想要最新版本,需要到官方下载源码,编译安装 ``` yum install -y haproxy ``` ## 配置负载均衡 将默认配置文件拷贝一份 cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.default - 案例:http负载均衡 vi /etc/haproxy/haproxy.cfg ``` #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon 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 main bind *:80 default_backend app backend app balance roundrobin ##负载均衡算法 rr server app1 192.168.156.106:80 check cookie 1 weight 5 check inter 2000 rise 1 fall 1 server app2 192.168.156.107:80 check cookie 1 weight 5 check inter 2000 rise 1 fall 1 ``` 配置状态页,增加配置 ``` listen status_page ##这一行是顶格的 bind 192.168.222.128:8888 ##可以监听一个额外的端口,这样更加安全 stats enable stats uri /haproxy-status stats auth admin:aminglinux.com ``` - 案例:haproxy实现动静分离 ``` #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon 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 main bind *:80 ##判断url是否以/static, /images, /javascript, /stylesheets开头 acl url_static path_beg -i /static /images /javascript /stylesheets ##判断url是否以.jpg .gif .png .css .js结尾 acl url_static path_end -i .jpg .gif .png .css .js ##判断域名是否包含img, att, video acl host_static hdr_beg(host) -i img. att. video. ##如果url_static或者host_static为true则走static use_backend static if url_static or host_static ##默认走app default_backend app backend static balance roundrobin server static 127.0.0.1:8080 check backend app balance roundrobin server app1 192.168.156.106:80 check server app2 192.168.156.107:80 check ``` - 案例:haproxy实现tcp负载均衡 ``` #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon defaults mode tcp 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 main bind *:2222 default_backend app backend app balance roundrobin server app1 192.168.156.106:22 check server app2 192.168.156.107:22 check ```