1、haproxy 简介
haproxy软件 是一个专门做代理的软件。
负载均衡的实现:
1、软件:
-
四层:
- LVS:Linux Virtual Server
- Nginx
- HAProxy:High Availability Proxy
-
七层:
- HAProxy:七层软件,也可以读懂四层,所以既是七层,也是四层。
- Nginx:既是七层,也是四层
2、硬件:
- F5 f5.com/zh,F5把nginx收购了
- 深信服 www.sangfor.com.cn/
2、调度算法简介
-
动态算法:基于后端服务器状态进行调度。直接动态的调整算法 ,直接生效,不需要重启restart,只需要reload就可以
-
静态算法:调整算法后,必须要重启软件,才能生效。
-
其他算法:可以进行动静切换,主要依靠参数进行切换。
jsbalance source //根据下面的参数,确定是动态还是静态 hash-type map-based //此为动态
haproxy支持多种调度算法,最常用的是前3种:
- 动态轮询 RR ,Round Robin,也是默认的调度算法。
- 静态轮询 static-rr,也可以添加权重 weight
- 最小连接算法 LC,表示最少连接者先处理 leastconn
- source,表示根据请求源IP
- uri,表示根据请求的URI,做cdn需使用
- url param,表示根据请求的URl参数' balance url param'requires an URL parameter name
- hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求
- randaom 基于hash结果的随机数, 来调度,权重越大越容易被调度
调度算法的对比:
nginx | haproxy | lvs |
---|---|---|
rr(轮询) | rr | rr |
加权轮询 | static-rr | wrr 加权 |
ip hash | 最小连接 | 源地址 hash SH |
url hash | source 根据源地址 | 目的地址 hash DH |
cookie hash | 根据请求来调度 | 默认 wlc 加权最小连接 |
fair | 根据cookie 来调度 | lc 最小连接 |
最小连接 | 根据请求头 | SED初始连接高权重优先 |
NQ 每个人都有一个链接后 再使用 初始链接高权重 |
- lvs 是 内核中的功能, nginx haproxy 是第三方实现的功能
- lvs 只能提供四层负载均衡无法提供7层负载(无法控制 7层协议 http 头部 url 等)功能单一
- nginx, haproxy 可以实现 4层和7层负载, 功能较多, 但是 性能不如lvs , lvs> haproxy > nginx
- hproxy 对比 nginx 性能优越, 功能又单一了,haprox只做反向代理。
- lvs 没有 后端服务器健康性检测, nginx和haproxy 有后端服务器健康性检测
4层 性能好 功能少 只能控制 四层协议 端口 ip
7层 性能弱 功能多 可以控制 7层协议 http
3、LVS、Nginx和haproxy 的区别:
- LVS基于Linux操作系统实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
- LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
- LVS因为工作在TCP模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URI等多种状态检测方式;
- HAProxy功能强大,但整体性能低于4层模式的IVS负载均衡。
- Nginx主要用于web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是对群集节点健康检查功能不强,性能没有Haproxy好。
4、安装软件
注意:安装haproxy前,必须要装lua软件。
版本:如果要安装2.0及以上版本的haproxy,那么lua版本必须要大于5.3
4.1 yum 安装
js
[root@7-1 ~]# yum install haproxy -y
[root@7-1 ~]# haproxy -v //验证haproxy版本
HA-Proxy version 1.5.18 2016/05/10 //yum安装的版本比较老
4.2 rpm包(第三方)
官方没有提供rpm相关的包,可以通过第三方仓库的rpm包
从第三方网站下载rpm包:pkgs.org/download/ha...
但是要注意甄别,下载的数据包有没有什么问题!
4.3 编译安装
4.3.1 解决lua环境
js
lua官网:
https://www.lua.org
js
[root@7-1 ~]# lua -v //查看当前系统版本
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
js
[root@7-5 ~]# cd /data
*****加载lua-5.4.4.tar.gz安装包*****
[root@7-5 data]# tar zxf lua-5.4.4.tar.gz
[root@7-5 data]# cd lua-5.4.4/
[root@7-5 lua-5.4.4]# ls
doc Makefile README src
[root@7-5 lua-5.4.4]# make all test
[root@7-5 lua-5.4.4]# cd ..
[root@7-5 data]# ls
haproxy-2.4.25.tar.gz lua-5.4.4 lua-5.4.4.tar.gz
[root@7-5 data]# ln -s lua-5.4.4 lua //软链接
[root@7-5 data]# ls
haproxy-2.4.25.tar.gz lua lua-5.4.4 lua-5.4.4.tar.gz
[root@7-5 data]# cd lua
[root@7-5 lua]# cd src
`注意区分版本问题:`
[root@7-5 src]# ./lua -v
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio //当前目录下的lua,也就是上面编译安装的lua版本
[root@7-5 src]# lua -v
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio //系统默认自带的版本
4.3.2 编译安装 haproxy⭐⭐
更多源码包下载地址:www.haproxy.org/#down
js
[root@7-5 src]# cd /data
[root@7-5 data]# yum -y install gcc openssl-devel pcre-devel systemd-devel //安装依赖环境
[root@7-5 data]# tar xf haproxy-2.4.25.tar.gz
[root@7-5 data]# cd haproxy-2.4.25/
*****查看安装方法*****
[root@7-5 haproxy-2.4.25]# ll Makefile
-rw-rw-r-- 1 root root 40812 Feb 12 23:18 Makefile
[root@7-5 haproxy-2.4.25]# cat README
[root@7-5 haproxy-2.4.25]# cat INSTALL
**********
mkdir /usr/local/lua
cp -r src/ /usr/local/lua/
*****功能插件模块*****
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/data/lua/src/ LUA_LIB=/data/lua/src/ //最后一个参数,要指明安装的Lua软件位置
*****小拓展:二进制包就是可执行程序,make就是将源代码编译成二进制文件。
make install PREFIX=/apps/haproxy
ln -s /apps/haproxy/sbin/haproxy /usr/sbin/ //做软链接,为什么做软链接,就是为了自动补全功能
haproxy -v
haproxy -h 查看帮助
*****生成.service文件(直接复制粘贴)*****
tee /usr/lib/systemd/system/haproxy.service <<eof
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
eof
[root@7-5 ~]# vim /usr/lib/systemd/system/haproxy.service //可以查看一下是否为上面的三部分
*****建立配置文件*****
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg //注意:以cfg结尾
*****下面都是配置文件,直接复制即可,不存在格式问题*****
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
#nbproc 4
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info
defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300000ms
timeout client 300000ms
timeout server 300000ms
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth haadmin:123456
listen web_port
bind 0.0.0.0:8899
mode http
log global
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5
*****上述都是配置文件,直接复制即可,不存在格式问题*****
systemctl start haproxy
mkdir /var/lib/haproxy //pid 文件路径
#设置用户和目录权限
[root@centos7 ~]# useradd -r -s /sbin/nologin haproxy
[root@centos7 ~]# systemctl enable --now haproxy
套接字.sock文件的作用:同一台机器里的两个软件进行交互,数据不用封装、解封装,可以直接通过套接字交流。
5、配置文件
5.1 主配置文件
配置文件位置:/etc/haproxy/haproxy.cfg
配置文件由两大部分组成:
- global 全局配置
js
进程及安全配置相关的参数
性能调整相关参数
Debug参数
- proxy 代理段配置(反向代理)
- defaults:类似于代理的全局配置。为frontend,、backend,、listen提供默认配置
- frontend:前端,也就是代理服务器。 定义虚拟机、监听、分配请求,相当于nginx中的server { }
- backend:后端,后台真实服务器。 相当于nginx中的upstream { }
- listen:等于前端加后端(frontend+backend),同时拥有前端和后端配置,虽然比较死板,不灵活,但是配置简单,生产环境中,推荐使用。
5.2 特殊配置:状态页
js
listen stats //状态页
mode http //支持七层。四层的话,只能写tcp,不支持udp
bind 192.168.125.100:9999 //监听的IP和端口号
stats enable
log global
stats uri /haproxy-status //路径为192.168.125.100:80/haproxy-status
stats auth haadmin:123456 //状态页的用户名和密码
listen cxk //代理的名字,可以自定义cxk
bind 0.0.0.0:8899 //监听的地址和端口
mode http //代理类型,七层http、四层tcp
log global //日志,使用全局配置
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5 //真实服务器,自定义名字,可以加多个;并且监测服务器是否活着,设置参数
5.3 全局配置 global
js
global //全局配置
maxconn 100000 //最大连接数
chroot /apps/haproxy //chroot禁锢,只可以访问/apps/haproxy文件
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin //指明socket文件位置
uid 99 //指明uid
gid 99 //指明gid
daemon //守护进程,后台方式运行
#nbproc 4 //指定进程数,可以设置与cpu核数相匹配。
#cpu-map 1 0
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info //日志
小拓展:检查haproxy配置的语法中是否有错误?
js
haproxy -f
haproxy -f /etc/haproxy/haproxy.cfg
注意:不能重新加载 reload,必须要重启 restart
5.3.1 cpu绑定(cpu的亲缘性)
js
vim /etc/haproxy/haproxy.cfg
*****把注释取消掉*****
cpu-map 1 0 //将第1个work进程绑定到第0号cpu
cpu-map 2 1 //将第2个work进程绑定到第1号cpu
cpu-map 3 2 //将第3个work进程绑定到第2号cpu
cpu-map 4 3 //将第4个work进程绑定到第3号cpu
systemctl restart haproxy
js
spread-checks n //延迟发送,错峰处理。后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
pidfile //指定pid文件路径
log 127.0.0.1 local2 info //定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
5.3.2 进程数与线程数 冲突
不能同时打开 多个进程和多个线程
js
*****放入全局配置
vim /etc/haproxy/haproxy.cfg
nbproc 4 //指定进程数
nbthread 2 //指定线程数
systemctl restart haproxy //就算重启也不会生效,因为两个不能同时使用
js
#nbproc 4 //注释掉,就是只有一个进程
5.3.3 多进程和多线程socket
假设目前 有两个进程,只有一个套接字,但是一个套接字只能随机对应一个进程。那么我们可以给每个进程 设置一个单独的套接字:
js
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
*****添加下面内容*****
stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2
*****添加上面内容*****
systemctl restart haproxy
怎么查看套接字:
js
ls /var/lib/haproxy/
5.3.4 日志
HAproxy 本身不记录客户端的访问日志,可以在HAProxy的配置中,利用rsyslog服务记录日志 指定日志文件服务器
5.3.4.1 将日志存放在本机上
js
vim /etc/haproxy/haproxy.cfg
*****在global配置项中定义:
log 127.0.0.1 local3 info //基于syslog记录日志到指定设备,级别有1-7(如err、warning、info、debug等)
js
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception //把udp下面两行的注释取消掉
15 $ModLoad imudp
16 $UDPServerRun 514
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local3.* /var/log/haproxy.log
systemctl restart haproxy rsyslog //重启
5.3.4.2 将日志放到别的电脑上
js
本机设置:
vim /etc/haproxy/haproxy.cfg
log 192.168.125.130 local5 info
js
192.168.125.130设置:
vim /etc/rsyslog.conf
14 # Provides UDP syslog reception //把udp下面两行的注释取消掉
15 $ModLoad imudp
16 $UDPServerRun 514
72 # Save boot messages also to boot.log
73 local7.* /var/log/boot.log
74 local5.* /var/log/haproxy.log
systemctl restart rsyslog
tail -f /var/log/haproxy.log
5.4 Proxies 代理配置
server 配置
js
*****针对server配置
check #对指定real进行健康状态检查,如果不加此设置,默认不开启检查,只有check后面没有其它配置也可以启用检查功能
#默认对相应的后端服务器IP和端口,利用TCP连接进行周期性健康性检查,注意必须指定端口才能实现健康性检查
addr <IP> #可指定的健康状态监测IP,可以是专门的数据网段,减少业务网络的流量
port <num> #指定的健康状态监测端口
inter <num> #健康状态检查间隔时间,默认2000 ms
fall <num> #后端服务器 连续失效次数,默认为3
rise <num> #后端服务器 连续有效次数,默认为2
weight <weight> #默认为1,最大值为256,0(状态为蓝色)表示不参与负载均衡,但仍接受持久连接
backup #将后端服务器标记为备份状态,只在所有非备份主机down机时提供服务,类似Sorry Server
disabled #将后端服务器标记为不可用状态,即维护状态,除了持久模式,将不再接受连接,状态为深黄色,优雅下线,不再接受新用户的请求
redirect prefix http://www.baidu.com/ #将请求临时(302)重定向至其它URL,只适用于http模式
redir http://www.baidu.com #将请求永久(301)重定向至其它URL,只适用于http模式
maxconn <maxconn> #当前后端server的最大并发连接数
5.4.1 添加后端健康性检查 check
haproxy 是默认无 后端健康性检查,可以手动添加check
js
vim /etc/haproxy/haproxy.cfg
server web1 192.168.125.120:80 check //加入check
server web2 192.168.125.130:80 check
systemctl restart haproxy
5.4.2 备胎backup
js
server web1 192.168.125.120:80 check
server web2 192.168.125.130:80 check
server web3 192.168.125.160:80 backup //添加backup,当前面两台正常时,160不用工作;但当前两台挂了,160就进行接管,继续工作。
5.4.3 下线 disabled
js
server web1 192.168.125.120:80 check
server web2 192.168.125.130:80 check
server web3 192.168.125.160:80 disabled //添加disabled,标记为下线
5.4.4 权重 weight
当权重为0,意思就是不参与负载均衡。
js
server web1 192.168.125.120:80 check
server web2 192.168.125.130:80 check weight 0
5.4.5 前后端分离
js
*****首先将listen的配置注释掉*****
#listen cxk
#bind 192.168.125.150:80
#mode http
#log global
#server web1 192.168.125.120:80
#server web2 192.168.125.130:80 weight 0
`设置前端和后端:`
frontend cxk
bind 192.168.125.150:80
use_backend web //注意:要引用下面的后端
backend web
server web1 192.168.125.120:80 //权重默认是1
server web2 192.168.125.130:80 weight 2 //权重为2
systemctl restart haproxy
js
客户机验证:
[root@localhost ~]# curl 192.168.125.150
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
7-2 haproxy
[root@localhost ~]# curl 192.168.125.150
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
7-2 haproxy
5.4.6 永久重定向 redir
js
server web1 192.168.125.120:80 check redir http://www.jd.com //如果调度给120,那么就跳转到京东
server web2 192.168.125.130:80 check redir http://www.baidu.com //如果调度给130,那么就跳转到百度
systemctl restart haproxy
5.4.7 haproxy 实验:
js
7-2:
[root@7-2 ~]# systemctl stop firewalld
[root@7-2 ~]# setenforce 0
[root@7-2 ~]# yum install httpd -y
[root@7-2 ~]# systemctl start httpd
[root@7-2 ~]# cd /var/www/html
[root@7-2 html]# echo "7-2 haproxy" > index.html
js
7-3:
[root@7-3 ~]# systemctl stop firewalld
[root@7-3 ~]# setenforce 0
[root@7-3 ~]# yum install httpd -y
[root@7-3 ~]# systemctl start httpd
[root@7-3 ~]# cd /var/www/html
[root@7-3 html]# echo "haproxy 7-3" > index.html
- 后端服务器之间可以相互访问,检查是否能生效:
js
[root@7-2 ~]# curl 192.168.125.130
haproxy 7-3
[root@7-3 ~]# curl 192.168.125.120
7-2 haproxy
- 设置代理服务器:
js
7-5:代理服务器
vim /etc/haproxy/haproxy.cfg
listen cxk⭐
bind 192.168.125.150:80⭐ //如果有人访问我的80端口,就转给两台后端服务器。端口可以有多个,比如80-90,就是监听80到90之间的所有端口
mode http
log global
server web1 192.168.125.120:80⭐
server web2 192.168.125.130:80⭐
systemctl stop httpd
systemctl restart haproxy
js
客户机 7-4:
[root@localhost ~]# curl 192.168.125.150 //访问代理
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
7-2 haproxy
[root@localhost ~]# curl 192.168.125.150
haproxy 7-3
[root@localhost ~]# curl 192.168.125.150
7-2 haproxy
5.5 新建子配置文件
当业务众多时,将所有配置都放在一个配置文件中,会造成维护困难。可以考虑按业务分类,将配置信息拆分,放在不同的子配置文件中,从而达到方便维护的目的。
js
[root@localhost ~]# mkdir /etc/haproxy/conf.d/ //创建子配置目录
[root@localhost ~]# sed -n '40,$p' /etc/haproxy/haproxy.cfg //打印主配置文件的38行到最后一行
[root@localhost ~]# sed -n '40,$p' /etc/haproxy/haproxy.cfg > /etc/haproxy/conf.d/test.cfg //重定向到子配置文件conf.d下的test.cfg中。注意:配置文件名同样要以.cfg结尾
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
*****注释掉主配置文件中的38行到最后一行*****
#frontend cxk
#bind 192.168.125.150:80
#use_backend web
#backend web
#server web1 192.168.125.120:80
#server web2 192.168.125.130:80 weight 2
*****上面全部注释*****
[root@localhost ~]# vim /usr/lib/systemd/system/haproxy.service //将子配置文件的位置,加入到.service文件中
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -c -q
ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -f /etc/haproxy/conf.d/ -p /var/lib/haproxy/haproxy.pid //加入子配置文件的路径⭐
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart haproxy
小拓展:haproxy如何查看选项的意思?
js
haproxy -h //帮助命令
-f选项:可以指明文件或者目录
6、调度算法 详解
默认的调度算法:动态轮询
HAProxy通过固定参数 balance 指明对后端服务器的调度算法,该参数可以配置在listen
或backend
选项中。注意:前端不支持 balance指令。
HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换。
js
backend web //后端
balance static-rr //指明调度算法
server web1 192.168.125.120:80
server web2 192.168.125.130:80
6.1 静态调度算法
6.1.1 socat工具
对服务器动态权重和其它状态 可以利用 socat工具进行调整。
示例1: 利用工具socat 对服务器动态权重调整
js
[root@centos7 ~]# yum -y install socat
[root@centos7 ~]# socat -h //查看帮助
[root@centos7 ~]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock //查看scoket文件的帮助, 这个只是haproxy 软件的帮助
[root@centos7 ~]# echo "show backend" | socat stdio /var/lib/haproxy/haproxy.sock //查看 后端服务器的名称
# name
stats
cxk
[root@centos7 ~]# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock //查看haproxy 的版本信息
[root@centos7 ~]# echo "get weight web/web1" | socat stdio /var/lib/haproxy/haproxy.sock //查看服务器的权重。web是后端的名字,web1是真实服务器的名字
1 (initial 1)
[root@centos7 ~]# echo "set weight web/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock //将后端web1的权重改为2
6.1.2 static-rr 静态轮询
static-rr:基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 wrr
js
vim /etc/haproxy/conf.d/test.cfg
backend web
balance static-rr //静态轮询
server web1 192.168.125.120:80
server web2 192.168.125.130:80
systemctl restart haproxy.service //重启
静态轮询不支持用socat工具 动态修改权重
6.1.3 first
maxconn 最大连接数
first:根据服务器在列表中的位置,自上而下进行调度。只有当第一台真实服务器已达到上限,才会分配给第二台服务器。可以设置权重,但其实不看权重,权重无效。
js
vim /etc/haproxy/conf.d/test.cfg
backend web
balance first //调度算法设置为first
server web1 192.168.125.120:80 check maxconn 10 //设置最大连接数为10
server web2 192.168.125.130:80 check
systemctl restart haproxy.service //重启
6.2 动态算法
动态算法:基于后端服务器状态进行调度适当调整,优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
6.2.1 动态轮询
Round Robin:基于权重的轮询动态调度算法,也是haproxy的默认算法。
js
listen web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance roundrobin //动态轮询
server web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 2 check inter 3000 fall 2 rise 5
6.2.2 最小连接 leastconn
leastconn 加权的最少连接 动态
js
listen web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance leastconn
server web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 1 check inter 3000 fall 2 rise 5
6.2.3 random 随机算法
weight权重较大的主机,有更大概率获取新请求,也就是权重越大,越可能优先分配。
6.3 其他算法
- source:源地址哈希
- 一致性哈希
- url哈希
- url_param
6.3.1 source
源地址hash
js
balance source
6.3.2 一致性hash
js
balance source
hash-type consistent //一致性哈希
6.3.3 url_param
js
假设:
url = http://www.laowang.com/foo/bar/index.php?key=value //param代表?后面的键值对,这个键值对的设置,还需要与开发协商
则:
host = "www.laowang.com"
url_param = "key=value"
6.3.4 hdr 头部信息
js
[root@centos7 ~]# curl -A 'firefox' http://192.168.125.120/index.html //访问火狐浏览器,就是访问120
[root@centos7 ~]# curl -A 'chrome' http://192.168.125.130/index.html //访问谷歌浏览器,就是访问130