目录
一、概述
简介
核心功能
关键特性
应用场景
负载均衡
二、环境简介
三、操作步骤
部署web1与web2
web1和web2安装httpd
web1和web2网站根目录个写一个html首页,用于后期测试
启动httpd
部署haproxy调度器
内核配置
编译安装
建立配置文件
配置tcp(四层)模式
添加为系统服务
配置syslog日志
测试tcp(4层)模式
在tcp(4层)模式下配置http(7层)模式(红色字体是tcp与http模式不一致的地方)
测试http(7层)负载
测试监控页面
by by
提示:以下是本篇文章正文内容,下面案例可供参考
HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上(CentOS、Ubuntu、Debian、OpenSUSE、Fedora、麒麟、欧拉、UOS)。
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性。
负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法
健康检查:支持TCP和HTTP两种健康检查模式
会话保持:对于未实现会话共享的应用集群,可通过Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种Hash方式实现会话保持
SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
HTTP请求重写与重定向
监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态
采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。
HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。
HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。
高并发要求较高的场合下
4层负载(tcp)(不支持监控状态)
7层负载(http)(支持监控状态)
1.准备4台虚拟机,1台做haproxy调度器,2台做web服务器,1台做测试客户机
2.haproxy调度器:192.168.115.130
3.web1:192.168.115.131 web2:192.168.115.132
4.客户机:192.168.115.128
5.先配置tcp4层负载模式,再在tcp基础上配置http7负载层模式
yum -y install httpd
echo "web1" >/var/www/html/index.html
echo "web2" >/var/www/html/index.html
systemctl start httpd
vim /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65023
net.ipv4.tcp_max_syn_backlog = 10240
net.ipv4.tcp_max_tw_buckets = 400000
net.ipv4.tcp_max_orphans = 60000
net.ipv4.tcp_synack_retries = 3
net.core.somaxconn = 10000
sysctl -p
下载
下载haproxy软件包(官网下载地址:https://www.haproxy.org/download/ 可根据自己的需求下载对应版本)
wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
下载完成解压
tar xf haproxy-1.7.2.tar.gz
安装
安装gcc依赖
yum -y install gcc
安装 haproxy
cd haproxy-1.7.2/
make PREFIX=/usr/local/haproxy TARGET=linux2628
#PREFIX 指定安装路径
#TARGET 根据自己的内核版本设置,下图是我的内核版本
make install PREFIX=/usr/local/haproxy
安装完成,下面建立配置文件
从haproxy的源码包中的examples下的haproxy.init中获得配置文件的路径“/etc/haproxy/haproxy.cfg”
编译安装的配置文件目录与文件没有生成,所以需要我们手动建目录与文件
mkdir /etc//etc/haproxy
touch /etc/haproxy/haproxy.cfg
global #全局属性
daemon #以daemon方式在后台运行
maxconn 256 #最大同时256连接
pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件
defaults #默认参数
mode tcp #tcp模式
timeout connect 5000ms #连接server端超时5s
timeout client 50000ms #客户端响应超时50s
timeout server 50000ms #server端响应超时50s
frontend http-in #前端服务http-in
bind *:80 #监听80端口
default_backend servers #请求转发至名为"servers"的后端服务
backend servers #后端服务serversbalance roundrobin #轮询
#balance source #保持会话
server server1 192.168.115.131:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接
server server2 192.168.115.132:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server2,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接
cp examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME
#定义haproxy的可以执行文件路径/usr/local/haproxy/sbin
注释掉26行[ ${NETWORKING} = "no" ] && exit 0
下图可以看到/etc/init.d/haproxy并没有可以执行权限,需要手动加上
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy #添加 haproxy 服务为系统启动项
添加3和5运行级别下自启动
chkconfig haproxy --level 35 on
- 0:系统停机状态,也就是关机。
- 1:单用户模式,只有一个命令行终端可以使用。
- 2:多用户模式,没有 NFS(网络文件系统)。
- 3:完全的多用户模式,有 NFS。
- 4:系统未使用,保留给用户。
- 5:图形界面模式。
- 6:系统正常关闭并重启(用于自动重启)。
查看已经配置的服务和启动状态
chkconfig --list
重新加载 systemd 系统管理器配置文件
systemctl daemon-reload
使用systemctl进行启停 #我们现在已经可以使用systemctl直接启动了
touch /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644 #日志文件的权限
$FileOwner root #日志文件的owner
local0.* /var/log/haproxy.log #local0接口对应的日志输出文件
local1.* /var/log/haproxy_warn.log #local1接口对应的日志输出文件
启动haproxy
systemctl start haproxy
global #全局属性
daemon #以daemon方式在后台运行
maxconn 256 #最大同时256连接
pidfile /var/run/haproxy.pid #指定保存HAProxy进程号的文件
defaults #默认参数
mode http #http模式
timeout connect 5000ms #连接server端超时5s
timeout client 50000ms #客户端响应超时50s
timeout server 50000ms #server端响应超时50s
frontend http-in #前端服务http-in
bind *:80 #监听80端口
default_backend servers #请求转发至名为"servers"的后端服务
backend servers #后端服务servers#balance roundrobin #轮询
#balance source #保持会话
server server1 192.168.115.131:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接
server server2 192.168.115.132:80 maxconn 32 #backend servers中只有一个后端服务,名字叫server2,起在本机的80端口,HAProxy同时最多向这个服务发起32个连接#配置监控页面
listen stats #定义监控页面
bind *:1080 #绑定端口1080
stats refresh 30s #每30秒更新监控数据
stats uri /stats #访问监控页面的uri
stats realm HAProxy\ Stats #监控页面的认证提示
stats auth admin:admin #监控页面的用户名和密码