简介

代理-高性能
目前使用比较广泛的一种负载均衡器,它可以实现TCP/HTTP的负载均衡

特性

  1. 免费开源
  2. 最大并发量能达到五万
  3. 支持多种负载均衡算法,同时支持session会话保持
  4. 支持虚拟主机
  5. 拥有服务的监控页面,可以了解系统的实时运行状态
  6. 通常不会去做正向代理(squid更利于做正向代理)
  7. 通常不会做缓存服务(varnish更利于做缓存服务)
  8. 不用于web服务器
  9. 不回去改变请求和响应报文
  10. 不是基于数据包的负载均衡器,看不到IP数据包

参考文档:https://cbonte.github.io/haproxy-dconv/

安装

/etc/haproxy/haproxy.cfg #主配置文件
/usr/lib/systemd/system/haproxy.service 守护进程服务

global #全局配置项
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the ‘-r’ option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2. /var/log/haproxy.log
#
log 127.0.0.1 local2 #定义全局的汇总syslog服务器(用于收集系统log的服务器)
chroot /var/lib/haproxy #定义工作目录
pidfile /var/run/haproxy.pid #指定pid文件
maxconn 4000 #定义最大并发连接数
user haproxy #运行的用户名
group haproxy #运行时的组
daemon #以守护进程方式工作于后台
# turn on stats unix socket
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 #HTTP请求超时
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 #测试请求的url是否以指定的模式开头
acl url_static path_end -i .jpg .gif .png .css .js #测试请求的url是否以指定的模式结尾
#判断:前端请求转发后端的逻辑
use_backend static if url_static #若url开头与结尾均与上匹配则由后端的static处理
default_backend app #反之由后端的app处理
#定义后端配置:定义一系列“后端”服务器,代理会将相应的请求转发给这些服务器
backend static
balance roundrobin #负载均衡算法
server static 127.0.0.1:4331 check #定义后端servers
backend app
balance roundrobin #负载均衡算法
server app1 127.0.0.1:5001 check #定义后端servers
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
listen http-in
监听配置: 通过关联“frontend”和“backend”定义了一个完整的代理,通常
只对TCP流量有用

实验

  1. 环境准备:

web1 127.0.0.1:8081
web2 127.0.0.1:8082
proxy 192.168.220.102:8080
image.png
[root@localhost conf.d]# cat web1.conf
server{
listen 8081;
server_name 127.0.0.1;
root /data/site1/;
access_log /var/log/nginx/web1_access.log main;
error_log /var/log/nginx/web1_error.log;
location / {
index index.html;
}
}
[root@localhost conf.d]# cat web2.conf
server{
listen 8082;
server_name 127.0.0.1;
root /data/site2/;
access_log /var/log/nginx/web2_access.log main;
error_log /var/log/nginx/web2_error.log;
location / {
index index.html;
}
}

  1. 备份hapeoxy配置文件

image.png
frontend main 192.168.220.102:8080
backend app
server app1 127.0.0.1:8081 check
server app2 127.0.0.1:8082 check
测试:访问192.168.220.102:8080
image.png