Haproxy技术详解
1、 介绍
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点一般又须要会话保持或七层处理。HAProxy运行在当前的硬件上,彻底能够支持数以万计的并发链接。而且它的运行模式使得它能够很简单安全的整合进您当前的架构中,同时能够保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持很是大的并发链接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,不多能处理数千并发链接。事件驱动模型由于在有更好的资源和时间管理的用户空间(User-Space) 实现全部这些任务,因此没有这些问题。此模型的弊端是,在多核系统上,这些程序一般扩展性较差。这就是为何他们必须进行优化以 使每一个CPU时间片(Cycle)作更多的工做。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。javascript
【以上摘自百度百科】css
2、 原理
HAProxy 支持TCP(四层)和HTTP(七层)两种代理模式,也是支持虚拟主机的。
HAProxy 的优势可以补充 Nginx 的一些缺点,好比支持 Session 的保持,Cookie 的引导;同时支持经过获取指定的 url 来检测后端服务器的状态。
HAProxy 跟 LVS 相似,自己就只是一款负载均衡软件;单纯从效率上来说 HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。
HAProxy 支持 TCP 协议的负载均衡转发,能够对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,你们能够用 LVS+Keepalived 对 MySQL 主从作负载均衡。
HAProxy 负载均衡策略很是多:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。java
3、 安装(以CentOS为例)
A.联网yum安装linux
$ sudo yum install haproxy -y
文件存放位置:web
/usr/sbin/haproxy #二进制文件
/usr/share/haproxy #共享文件
/var/lib/haproxy #库文件
/etc/rc.d/init.d/haproxy #启动二进制文件
/etc/logrotate.d/haproxy #日志切割
/etc/sysconfig/haproxy #配置
/etc/haproxy #配置目录redis
B.源码编译
haproxy-1.8.8.tar.gz源码包地址:[从官网下载须要FQ]
连接: https://pan.baidu.com/s/1yj8qy2JB0Rh-WPy33T7aAw 提取码: yy5d
# 编译过程以下:vim
$ sudo tar –zxvf haproxy-1.8.8.tar.gc –C /usr/local/src $ sudo groupadd -r haproxy && useradd -g haproxy -M -s /sbin/nologin haproxy $ sudo cd /usr/local/src/haproxy-1.8.8 $ sudo make TARGET=linux26 ARCH=X86_64 PREFIX=/usr/local/haproxy && make install PREFIX=/usr/local/haproxy $ sudo mkdir –p /etc/haproxy && vim /etc/haproxy/haproxy.cfg
###################################haproxy.cfg配置文件######################################后端
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats 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 *: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 default_backend app backend static balance roundrobin server static 127.0.0.1:4331 check backend app balance roundrobin server app1 127.0.0.1:5001 check server app2 127.0.0.1:5002 check server app3 127.0.0.1:5003 check server app4 127.0.0.1:5004 check
###########################################################################################安全
4、 配置文件详解服务器