HAproxy教程(1)HAproxy的安装与配置
一、HAproxy介绍
HAProxy是一款代理软件,可以实现TCP(第四层)和HTTP(第七层)的代理配置。工作在第四层时性能更好,因为只需要分析TCP/UDP层就可以流量分发,实现负载均衡(同样有代表性的工具还有LVS和F5)。而工作在第七层时提供了更灵活的配置,可以实现更多的功能,比如根据URL、客户端浏览器等更多条件来进行请求转发(同样有代表性的工具就是Nginx)。HAproxy在高可用的实现方式上是对后端节点的状态进行检测,如果出现故障则重新分发请求到正常节点。经过官⽅测试, HAProxy 单位时间处理的最⼤请求数为 20000 个,可以同时维护 40000-50000 个并发连接,最⼤数据处理与数据交换能⼒为 10Gbps
二、安装HAproxy
1、通过官方网站(https://www.haproxy.org/#down)下载较新版本的HAproxy源码包(CentOS默认仓库中的版本较老,故不推荐)
2、使用HAproxy源码包编译安装步骤如下
make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 #源码包中的INSTALL文档有详细的安装说明 make install PREFIX=/usr/local/haproxy
3、编译安装完成后运行命令测试
/usr/local/haproxy/sbin/haproxy --version
4、创建配置文件
如果是YUM安装的话配置文件会自动创建为/etc/haproxy/haproxy.cfg。通过编译安装的话则可以使用源码包中的模板文件进行修改,该模板目录中还有进程管理脚本等可以使用
cp /usr/local/src/haproxy-2.8.4/examples/basic-config-edge.cfg /usr/local/haproxy/haproxy.cfg cp ./examples/haproxy.init /etc/init.d/haproxy chmod 755 /etc/init.d/haproxy
5、创建用户并启动HAproxy服务
useradd haproxy /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
三、HAproxy核心配置说明
Haproxy配置文件根据功能和用途分为了不同部分
global:全局参数,通常是和系统相关的配置
frontend:配置接收用户请求的前端信息,相当于服务的入口,类似配置nginx的upstream
backend:配置后端提供真实服务的服务器相关配置
use_backend:基于条件进行调度
default:默认使用的配置,可以在frontend、backend、listen等部分中使用
listen:兼容老版本的配置方式,老版本中没有划分frontend和backend,都是整合到了listen中进行配置
global log 127.0.0.1 local0 #全局日志配置,Haproxy通过rsyslog将日志发到指定日志服务器,这里传给了本机 maxconn 20000 #设置每个haproxy进程的并发连接数 nbproc 4 #设置Haproxy启动时的进程数,默认为1,不能超过CPU核数 uid 200 #运行Haproxy的uid和gid gid 200 daemon #Haproxy后台运行 pidfile /usr/local/haproxy/haproxy.pid defaults mode http #运行模式,分tcp(四层)或者http(七层)两种模式,默认是tcp模式 timeout connect 10s #成功连接到一台服务器的最长等待时间,不写单位的话默认是毫秒 timeout client 1m #客户端发送数据最长等待时间 timeout server 1m #服务端回应客户端数据发送的最长时间 timeout check 10s #设置每次对后端服务器检测超时的时间 retries 3 #Haproxy连接后端服务器失败的次数,达到该次数后将标记该后端服务器为不可用并踢出集群 frontend webserver #定义前端节点的名字 bind *:80 #Haproxy前端服务所监听的IP与端口 option httplog #Haproxy默认不记录http日志,通过这个配值启用详细日志 option dontlognull #日志中不记录上级负载均衡器发送的用于检测的心跳数据包 option forwardfor except 127.0.0.0/8 #让后端服务器能获得客户端真实IP log global #使用全局日志的配置 default_backend webserver #访问该前端服务后默认转发到该后端服务组 backend webserver #定义后端服务组的名字 mode http balance roundrobin #定义负载均衡调度算法,还有static-rr、source、uri等多种算法 option redispatch #在节点请求失败发生切换时保持cookie option httpchk GET /index.html #检查后端节点页面状态码是否为200,如果异常就不再将请求送给该服务器,除了GET外还可以使用HEAD server server1 192.168.1.100:80 weight 5 check inter 2000 rise 2 fall 3 #weight是服务器权重,默认为1,最大为256,0不参与负载;check代表开启健康检查;inter代表健康检查间隔为2秒;rise代表健康检查多少次认为该服务器可用,fall则相反 server server2 192.168.1.110:80 weight 5 check inter 2000 rise 2 fall 3 listen admin_stats #Haproxy状态监控页面配置 bind 0.0.0.0:9188 mode http log 127.0.0.1 local 0 err stats refresh 30s #监控页面自动刷新时间 stats uri /status #监控页面的地址 stats auth admin:admin123 #登录监控页面的账号密码 stats hide-version #隐藏版本号 stats admin if TRUE #可在监控页面上手动启动或关闭后端服务器
三、Haproxy配置示例
1、将本机80端⼝的请求直接转发⾄后端 172.16.1.11:80 节点。这里使用了listen的配置方式,没有区分frontend和backend
listen proxy01 *:80 server web1 172.16.1.11:80;
2、将本机80端口的请求按照轮询的方式转发⾄后端webservers集群;后端 webservers 资源池包含 172.16.1.7:80、172.16.1.8:80 两个节点
frontend test_proxy *:80 #定义前端名称以及监听的地址 default_backend webservers #所有请求调度⾄ webservers集群 backend webservers #定义webservers集群名称 balance roundrobin #采⽤轮询调度算法 server web1 172.16.1.7:80 check #节点信息 server web2 172.16.1.8:80 check
3、完整配置示例
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 #记录客户端真实IP option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s #haproxy连接后端服务器超时时间 timeout client 10m #客户端和haproxy的非活动超时时间 timeout server 10m #haproxy和后端服务器的非活动超时时间 timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend test bind *:80 default_backend test backend test balance roundrobin server app1 192.168.145.180:80 weight 1 check inter 2000 fall 3 rise 3 server app2 192.168.145.190:80 weight 1 check inter 2000 fall 3 rise 3
listen mysqlserver #名称随意写 bind 0.0.0.0:3306 balance roundrobin server server1 192.168.145.180:3306 weight 1 server server2 192.168.145.190:3306 weight 1 listen admin_stats #配置状态监控页面 bind 0.0.0.0:8000 mode http stats refresh 30s stats uri /status stats auth admin:admin123 stats hide-version stats admin if TRUE
四、Haproxy日志配置
vim /etc/rsyslog.conf #Haproxy默认是把日志输出到/var/log/message中,不太方便查阅,所以配置文件中有配置rsyslog $ModLoad imudp $UDPServerRun 514 local2.* /var/log/haproxy.log #重启服务后查看514端口是否运行,并且是否生成了日志文件 systemctl restart rsyslog.service
五、Haproxy状态监控
Haproxy自身有提供一个状态监控页面,通过该页面可以看到后端节点的状态,如果宕掉的话会变为红色,不同颜色的含义在页面上也有说明。如图:
评论