haproxy简介
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