Haproxy 反向代理

一、haproxy介绍

HAProxy是一个使用C语言编写的*及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

特点如下:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

二、haproxy安装

下载地址:http://www.haproxy.org/download/1.8/src/haproxy-1.8.20.tar.gz
如无法直接下载,可以在网盘中下载:

链接:https://pan.baidu.com/s/1o2CemcucfQ4zdGfb1yaaxA
提取码:7baf

# 1.编译安装haproxy
tar xf haproxy-1.8.20.tar.gz 
cd haproxy-1.8.20/
make TARGET=linux2628 PREFIX=/usr/local/haproxy-1.8.20
make install
cp /usr/local/sbin/haproxy /usr/sbin/
haproxy -v

# 在haproxy安装包内拷贝启动脚本
cp examples/haproxy.init /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy

# haproxy创建配置文件目录
useradd -r haproxy
mkdir /etc/haproxy /var/lib/haproxy /var/run/haproxy


# 2.可通过yum直接安装,版本较低1.5.18-8.el7,两种方法都可以。
yum install haproxy -y

三、haproxy配置文件

HAProxy配置文件的配置方法主要用两种:一种是由前端(frontend)和后端(backend)配置块组成,前端和后端都可以有多个。第二种方法是只有一个listen配置快块来同时实现前端和后端。我们这里主要介绍最常用的frontend和backend工作模式,这个也是推荐的配置方法。
同时前端(frontend)区域可以根据HTTP请求的header信息来定义一些规则,然后将符合某规则的请求转发到相应后端(backend)进行处理,这个我们后面会详细讲解。

3.1 haproxy.cfg配置文件

vim /etc/haproxy/haproxy.cfg
global                                        # 全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
    maxconn 10000                             # 定义每个haproxy进程的最大连接数,由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍
    chroot /var/lib/haproxy                   # 增加安全性,改变当前工作目录
    user haproxy                              # 启动用户为haproxy,也可以写成UID
    group haproxy                             # 启动用户组为haproxy,也可以写成PID
    daemon                                    # 以守护进程的方式运行
    nbproc 8                                  # 设置haproxy启动时的进程数,设置其CPU的核心数,可减少每个进程的任务队列,过多进程数也会导致进程崩溃
    pidfile /var/lib/haproxy/haproxy.pid      # 定义haproxy.pid的位置,注意目录要事先存在,如果没有需要提前创建。
    log 127.0.0.1 local3 info                 # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的rsyslog服务中的local3日志设备,记录日志等级为info的日志,
defaults # 配置一些默认的参数,可以被frontend,backend,listen段继承使用 maxconn 10000 # 最大连接数 mode http # mode {http|tcp|health} http是七层模式,tcp是四层模式,health是健康检测,返回OK log global # 应用全局日志配置 option httplog # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求的 option http-keep-alive # 启用或禁用客户端和服务端到haproxy之间的长连接。haproxy将处理所有请求和响应报文,请求完后haproxy两端的连接都处于空闲状态。 option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,需要定期的连接或者获取某一固定的
组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不要使用该参数,
因为互联网上的恶意扫描或其他动作就不会被记录下来 option http-server-close # 使用该参数,每处理完一个request时,haproxy都会去检查http头中的Connection的值,如果该值不是close,haproxy将会将其删除,如果该值为空将
会添加为:Connection: close。使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。与该参数类似的另外一个参数是“option
forceclose”,该参数的作用是强制关闭对外的服务通道,因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,如果客户端也不关闭,
连接就会一直处于打开,直到超时。 option redispatch # 在session失败后,是否允许重新分配
option abortonclose # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接 timeout connect 5000ms # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒 timeout client 50000ms # 设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒 timeout server 50000ms # 设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒 listen stats # 定义一个名为stats的部分,理解为frontend和backend的组合体 mode http # 定义为http模式 bind 0.0.0.0:8888 # 定义监听套接字 stats enable # 开启WEB统计功能
stats refresh 30s # 页面自动刷新时间30s stats uri /haproxy-status # web统计的URI为 /haproxy-status stats auth haproxy:haproxy # 访问web页面的用户名和密码 frontend frontend_web_server # 定义一个名为frontend_web_server的前端部分,用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理 bind 192.168.7.80:80 # 定义前端访问的IP及端口 mode http # 定义为HTTP模式 option httplog # 启用记录HTTP请求、会话状态和计时器的功能 log global # 继承global中的log定义 default_backend backend_web_server # 如果前面acl都没有匹配到,默认的后端backend_web_server服务集群 backend backend_web_server # 定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块。 option forwardfor header X-REAL-IP # 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP option httpchk HEAD / HTTP/1.0 # 开启对后端服务器的健康检测,通过GET / 来判断后端服务器的健康情况 balance source # 设置haproxy的调度算法为源地址hash server web-7.72 192.168.7.72:80 cookie 1 check inter 2000 rise 3 fall 3 weight 1 # 后端服务器名称为web-7.72,后端服务器的IP及端口,指定该服务器的SERVERID为1[cookie 1]
接受健康监测[check]、监测的间隔时长,单位毫秒[inter 2000],监测正常多少次后被认为后端
服务器是可用的[rise 3]监测失败多少次后被认为后端服务器是不可用的[fall 3]、分发的权重
[weight 1] server web-7.73 192.168.7.73:80 cookie 2 check inter 2000 rise 3 fall 3 weight 2
server web-7.70 192.168.7.77:80 cookie 2 check inter 2000 rise 3 fall 3 backup # 上面全部down机后启动备机[backup]

 3.2 日志配置

 前面在haproxy中已经定义了日志级别为local3,需要rsyslog在514端口监听UDP协议,修改完成后重启rsyslog服务

vim /etc/rsyslog.conf

# 增加如下三行
$ModLoad imudp
$UDPServerRun 514
local3.*                                                /var/log/haproxy.log

systemctl restart rsyslog.service

3.3 web图面截图

Haproxy 反向代理

 

上一篇:php – 如何让角色编辑器管理worpdress中的woocommerce分类?


下一篇:Spark-2.4.0源码:sparkContext