haproxy入门 (作用: 高可用性,负载平衡和用于TCP和基于http的应用程序的代理)
安装haproxy
1:RPM包安装
yum install -y haproxy
2:编译安装
http://www.haproxy.org/#down
例如安装1.7.9版本
http://www.haproxy.org/download/1.7/src/haproxy-1.7.9.tar.gz
编译参数自行解决,网上一大堆
配置文件介绍
(主配置文件/etc/haproxy/haproxy.cfg)只要这三段配置ok了,那么haproxy的七层负载均衡就搞定了
1:全局指令配置段
2:统计页面配置段
3:反向代理配置段
(1)定义静态后端主机
(2)定义动态后端主机
(3)定义前端调度器
haproxy配置文件实例
(带读写分离功能)
# 全局配置段 global # 指定日志记录路径,这个local2是需要在/etc/rsyslog.conf文件中指定的,指定了日志存储路径之后,需要重启rsyslog服务哦 log 127.0.0.1 local2 # 指定haproxy的运行环境 chroot /var/lib/haproxy # 指定进程的pid pidfile /var/run/haproxy.pid # 指定单个进程的最大并发连接数 maxconn 4000 # 指定允许haproxy的用户 user haproxy # 指定允许haproxy的组 group haproxy # 指定haproxy以守护进程模式运行 daemon # 设置后台运行2个haproxy进程,但是后台运行了3个进程 nbproc 2 # 指定Unix socket通信(基本没用过) # stats socket /var/lib/haproxy/stats # 这里是默认的选项,如何在listen段,backend段,frontend段中将这些选项按需求重新制定 defaults # 指定默认的模式 mode http # 指定日志信息使用全局指定的日志存储路径,全局日志是存储在rsyslog服务中 log global # 将log日志记录到rsyslog日志服务器中,指定日志级别为notice级别 log 192.168.23.10 local10 notice # 日志格式可以不指定,有其默认的值 #log-format %T\ %t\ Some\ Text # 指定压缩类型 compression algo gzip # 指定需要压缩的资源类型 compression type text/html text/plain option httplog option dontlognull option http-server-close # 在后端服务器中可以记录客户端的源IP地址,在日志中加上%{X-Forwarded-For}i option forwardfor except 127.0.0.1/8 # 如果后端服务器不提供服务,那么将会重新di 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 # 指定接受10000个并发 maxconn 10000 # haproxy统计页面配置段 listen stats # 指定统计页面监听的端口 bind *:33559 # 指定统计页面运行的模式 mode http # 指定开启统计页面功能 stats enable # 如果不设置URI,默认是/haproxy?stats stats uri /admin # 指定登入是提示信息,\表示转义空白字符 stats realm HAProxy\ statistics # 指定用户名和密码 stats auth uplooking:123456 # 指定统计页面自动刷新的时长 stats refresh 20 # 如果用户认证成功,统计页面可以被访问 stats admin if TRUE #隐藏统计页面上HAProxy的版本信息 stats hide-version # 指定后端php动态资源主机组,后端的动态资源不做缓存,直接将请求反代值后端的app servers中 backend phpservers_backend # 这里使用了cookie粘性机制,当客户端没有被设置cookie值的时候,通过轮询调度到app servers主机上 balance roundrobin # 指定我们需要插入的cookie的key为PHP,使用的是insert方法,indirect表示如何会话已经有cookie值了,将不会再次发送cookie到客户端,nocache表示如果客户端和haproxy之间有代理,那么指定nocache将不会将所有的请求都发往一台服务器, 也可以认为是不缓存的意思 cookie PHP insert indirect nocache # server后面的cookie参数是给当前server指定cookie值,使得客户端请求报文中会夹带这个cookie的值,当报文发送到haproxy的时候,haproxy会根据cookie的值判断将报文调度到哪台后端服务器,这样就使得同一个客户端的请求,发往同一台后端服务器 server phpserver1 192.168.23.23:8000 check weight 1 cookie phpserver1 maxconn 3000 maxqueue 500 server phpserver2 192.168.23.24:8000 check weight 2 cookie phpserver2 maxconn 6000 maxqueue 500 # 指定后端varnish静态资源缓存主机组 backend varnish_backend # 将客户端请求的URI做哈希计算,使得相同的URI的请求始终发往后端的同一台缓存服务器,基于URL做哈希计算,使得varnish缓存的命中率提高,uri算法适用于后端为vanish这样的缓存服务器 balance uri # 使用的的hash类型是一致性哈希算法 hash-type consistent # 使用http协议做健康状态检查,默认是tcp协议 option httpchk server varnish_server1 192.168.23.17:7000 check maxconn 5000 server varnish_server2 192.168.23.18:7000 check maxconn 5000 server varnish_server3 192.168.23.19:7000 check maxconn 10000 backup # 指定当请求到达的时候,如果是静态资源的请求,将请求调度到varnish主机组,默认是发送给后端web动态资源主机组 # 相当于Nginx中的server的listen指令,frontend 配置段用于监听用户请求, frontend myservers_frontend bind *:80 # 设置一个访问控制规则,只要请求路径为静态资源的都会被匹配到,并且发往varnish主机组 acl varnish_page path_beg -i /static /images /javascript /stylesheets acl varnish_page path_end -i .jpg .gif .png .jpeg .css .js .html .txt .htm .ico use_backend varnish_backend if varnish_page # 没有被匹配到的请求全部发往phpservers_backend服务器 default_backend phpservers_backend
检查配置文件是否错误的命令
haproxy -c -f /etc/haproxy/haproxy.cfg
在网页中输入 172.16.19.5:335599/admin