本节主要学习AHproxy 的概述,安装,调度算法,配置文件,负载均衡,配置syslog日志,keepalived+haproxy实现高可用。
目录
一、概述
1、简介
2、核心功能
3、关键特性
4、应用场景
二、安装
1.内核配置
2.编译安装
3.建立配置文件
4.添加为系统服务
5.添加3和5运行级别下自启动
6.启动haproxy
三、调度算法
四、配置文件
五、负载均衡
1、7层负载
配置负载
配置监控页面
2、4层负载
配置负载
不支持监控状态
六、配置syslog
七、keepalived +haproxy实现高可用
1、keepalived配置
2、haproxy配置
3、分别重启两个服务
4、测试
一、概述
1、简介
HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上(CentOS、Ubuntu、Debian、OpenSUSE、Fedora、麒麟、欧拉、UOS)。
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy具备媲美商用负载均衡器的性能和稳定性。
2、核心功能
| 负载均衡 | 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的状态 |
3、关键特性
采用单线程、事件驱动、非阻塞模型,减少上下文切换的消耗,能在1ms内处理数百个请求。并且每个会话只占用数KB的内存。
大量精细的性能优化,如O(1)复杂度的事件检查器、延迟更新技术、Single-buffereing、Zero-copy forwarding等等,这些技术使得HAProxy在中等负载下只占用极低的CPU资源。
HAProxy大量利用操作系统本身的功能特性,使得其在处理请求时能发挥极高的性能,通常情况下,HAProxy自身只占用15%的处理时间,剩余的85%都是在系统内核层完成的。
HAProxy作者在8年前(2009)年使用1.4版本进行了一次测试,单个HAProxy进程的处理能力突破了10万请求/秒,并轻松占满了10Gbps的网络带宽。
4、应用场景
高并发要求较高的场合下
二、安装
1.内核配置
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

2.编译安装
wget https://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
make PREFIX=/usr/local/haproxy TARGET=linux2628
make install PREFIX=/usr/local/haproxy

3.建立配置文件
从haproxy的源码包中的examples下的init.haproxy中获得配置文件的路径“/etc/haproxy/haproxy.cfg”
mkdir /etc/haproxy
touch /etc/haproxy/haproxy.cfg
| global #全局属性 daemon #以daemon方式在后台运行 maxconn 256 #最大同时256连接 pidfile /home/ha/haproxy/conf/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 *:8080 #监听8080端口 default_backend servers #请求转发至名为"servers"的后端服务 backend servers #后端服务servers server server1 127.0.0.1:8000 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接 |
4.添加为系统服务
cp /root/haproxy-1.7.2/examples/haproxy.init /etc/init.d/haproxy
vim /etc/init.d/haproxy
修改: 35行 内容为 BIN=/usr/local/haproxy/sbin/$BASENAME

chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy

5.添加3和5运行级别下自启动
chkconfig haproxy --level 35 on

chkconfig --list

6.启动haproxy

三、调度算法
| roundrobin:表示简单的轮询。 |
| static-rr:表示根据权重。 |
| leastconn:表示最少连接者先处理。 |
| source:表示根据请求的源 IP,类似 Nginx 的 IP_hash 机制。 |
| ri:表示根据请求的 URI。 |
| rl_param:表示根据 HTTP 请求头来锁定每一次 HTTP 请求。 |
| rdp-cookie(name):表示根据据 cookie(name)来锁定并哈希每一次 TCP 请求。 |
四、配置文件
| global | 用于配置全局参数 |
| default | 用于配置所有frontend和backend的默认属性 |
| frontend | 用于配置前端服务(即HAProxy自身提供的服务)实例 |
| backend | 用于配置后端服务(即HAProxy后面接的服务)实例组 |
| listen | frontend+backend的组合配置,可以理解成更简洁的配置方法 |

| global #全局属性
|
五、负载均衡
1、7层负载
配置负载
| global |

设置好两个web服务器
nginx1

nginx2

浏览器查看


命令查看

配置监控页面
| listen stats #定义监控页面 bind *:1080 #绑定端口1080 stats refresh 30s #每30秒更新监控数据 stats uri /stats #访问监控页面的uri stats realm HAProxy\ Stats #监控页面的认证提示 stats auth admin:admin #监控页面的用户名和密码 |

浏览器查看


2、4层负载
配置负载
| global daemon maxconn 256 pidfile /var/run/haproxy/haproxy.pid defaults mode tcp timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:8080 default_backend servers backend servers balance roundrobin #轮询 #balance source #保持会话 server server1 127.0.0.1:8000 maxconn 32 server server2 127.0.0.1:8090 maxconn 32 |
不支持监控状态
六、配置syslog
| touch /etc/rsyslog.d/haproxy.conf $ModLoad imudp |


七、keepalived +haproxy实现高可用
1、keepalived配置
| global_defs { vrrp_instance HA_1 { |

2、haproxy配置
| global |

3、分别重启两个服务

4、测试
keepalived+haproxy1

keepalived+haproxy2

将keepalived+haproxy1 的keepalived服务停掉

查看keepalived+haproxy2的地址






![[论文分享]Skip-Attention: Improving Vision Transformers by Paying Less Attention](https://img-blog.csdnimg.cn/8dd7c24331874428ba5b4a727e324980.png)













