0
点赞
收藏
分享

微信扫一扫

HTML+CSS+JS计算器

妖妖妈 2024-08-11 阅读 31

目录

一、haproxy介绍

 1.1 haproxy工作原理

 1.2 相关配置类型

二、全局配置 

 2.1相关参数说明

2.2实验示例

实验环境:

2.2.1 设置多进程

2.2.2 设置日志显示

三、proxies代理配置

3.1 参数说明

3.2 default配置相关属性参数 

3.2. 配置前端fronttend+后端backend

3.3 配置listen项

3.4 其他示例 

3.4.1设置backup

3.4.2 redirect ---设定访问网页重定向 

3.4.3 maxconn  ----最大链接数

四、socat工具----热处理

4.1 相关配置

4.2 设置多进程 

 五、haproxy算法

 5.1 静态算法

5.1.1 static-rr:基于权重的轮询调度

5.1.2 first 

5.2 动态算法

5.2.1 roundrobin 

 5.2.2 leastconn---基于链接非权重

5.3 其他算法

5.3.1 source

5.3.1.1 map-base 取模法

 5.3.1.2 一致性hash

5.3.2 uri 

5.3.3 url_param

5.3.4 hdr

5.4 算法总结

使用场景


一、haproxy介绍

 1.1 haproxy工作原理

 其相关工作原理如下:

1.通过虚拟ur|或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。

2.代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建立tcp连接。
3.支持7层代理的软件:
        Nginx:基于http协议(nginx七层是通过proxy_pass)
        Haproxy:七层代理,会话保持、标记、路径转移等。

 1.2 相关配置类型

二、全局配置 

 2.1相关参数说明

参数作用

chroot

锁定运行目录

deamon

以守护进程运行

user, group, uid, gid

运行 haproxy 的用户身份

stats socket

套接字文件

nbproc N

开启的 haproxy worker 进程数,默认进程数是一个

nbthread 1 (和 nbproc

互斥)

指定每个 haproxy 进程开启的线程数,默认为每个进程一个

线程

cpu-map 1 0

绑定 haproxy worker 进程至指定 CPU ,将第 1 work进程绑定至 0 CPU

cpu-map 2 1

绑定 haproxy worker 进程至指定 CPU ,将第 2 work进程绑定至 1 CPU

maxconn N

每个 haproxy 进程的最大并发连接数

maxsslconn N

每个 haproxy 进程 ssl 最大连接数 , 用于 haproxy配置了证书的场景下

maxconnrate N

每个进程每秒创建的最大连接数量

spread-checks N

后端 server 状态 check 随机提前或延迟百分比时间,建议2-5(20%-50%) 之间,默认值 0

pidfile

指定 pid 文件路径

log 127.0.0.1 local2 info

定义全局的 syslog 服务器;日志服务器需要开启 UDP协议, 最多可以定义两个

2.2实验示例

实验环境:

2.2.1 设置多进程

没设置之前先查看一下进程数:只有一个

设置我们是在配置文件里面设置:添加如下内容:

 就是如下图注意要在全局配置里面查看:

最后再查看一下进程数:就会有两个了

然后想要开启多线程就在后面添加 nbthread 2就行了,但是要注意其与多进程互斥,不能同时设置。 并且我们一般在企业中都是设置的多进程。

2.2.2 设置日志显示

在全局配置起日志作用的就是log    127.0.0.1  local2.如下图

 这里我们需要在rsyslog配置文件中添加内容。------/etc/rsyslog.conf中添加

然后我们重启服务的时候就会自动报日志了。如下图 

 

三、proxies代理配置

3.1 参数说明

参数作用

defaults []

默认配置项,针对以下的 frontend backend listen生效,可以多个name 也可以没有 name

frontend

前端 servername ,类似于 Nginx 的一个虚拟主机 server LVS服务集 群

backend

后端服务器组,等于 nginx upstream LVS 中的 RS 服务器

listen

frontend backend 合并在一起配置,相对于 frontend backend

配置更简洁,生产常用

3.2 default配置相关属性参数 

 重启后再查看:就实现了负载均衡

3.3 配置listen项

在配置文件/etc/haproxy/haproxy.cfg里面写配置:

#vim  /etc/haproxy/haproxy.cfg添加

listen webcluster
    bind *:80
    mode http
    balance roundrobin
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

 重启测试查看:这个方法是将前后端合在一起的,其实现的效果和上面差不多

3.4 其他示例 

3.4.1设置backup

在haproxy上面做:在httpd的配置文件里面将监听端口改成8080。

在配置文件中添加如下内容:

listen webcluster
    bind *:80
    mode http
    balance roundrobin
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

 这个配置是当两台realserver出现故障时,才会起作用。

我们也可以server中添加disabled属性将real server设置为不能访问

3.4.2 redirect ---设定访问网页重定向 

 在配置文件中添加如下内容:将其重定向到百度上

redirect prefix http://www.baidu.com

listen webcluster
    bind *:80
    mode http
    balance roundrobin
    redirect prefix http://www.baidu.com
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

3.4.3 maxconn  ----最大链接数

 在配置文件中添加如下内容: maxconn 2 

超过最大链接数就会出现backup现象

listen webcluster
    bind *:80
    mode http
    balance roundrobin
    server web1 172.25.254.10:80  maxconn 2 check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

四、socat工具----热处理

其是一种动态调整haproxy工作方式参数,在配置文件/etc/haproxy/haproxy.cfg中位置如下

配置文件修改后要重启。

4.1 相关配置

然后我们来下载socat工具,并且写一些命令配置:

#下载工具
[root@haproxy ~]# dnf install socat -y
#查看socat工具帮助
[root@haproxy ~]# echo "help" | socat stdio /var/lib/haproxy/stats

#查看进程状态
[root@haproxy ~]# echo "show info" | socat stdio /var/lib/haproxy/stats

#查看权重
[root@haproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats

#修改权重
[root@haproxy ~]# echo "set weight webcluster/web1 1 " | socat stdio /var/lib/haproxy/stats

#下线后端服务器
[root@haproxy ~]# echo "disable server webcluster/web1" | socat stdio /var/lib/haproxy/stats

#上线后端服务器
[root@haproxy ~]# echo "enable server webcluster/web1" | socat stdio /var/lib/haproxy/stats

4.2 设置多进程 

 如果开启多进程那么我们在对进程的sock文件进行操作时其对进程的操作时随机的

如果需要指定操作进程那么需要用多 soct 文件方式来完成

修改配置文件如下:

 五、haproxy算法

 5.1 静态算法

静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度 等,且无法实时修改权重 ( 只能为 0 1, 不支持其它值 ) ,只能靠重启 HAProxy 生效。

5.1.1 static-rr:基于权重的轮询调度

在配置文件中 添加balance static-rr:

listen webcluster
    bind *:80
    mode http
#添加static-rr
    balance static-rr
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

5.1.2 first 

 在配置文件中 添加balance first:

listen webcluster
    bind *:80
    mode http
#添加first
    balance first
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

最后用socat进行修改权重时,发现无法修改。

5.2 动态算法

动态算法就是

  • 基于后端服务器状态进行调度适当调整,
  • 新请求将优先调度至当前负载较低的服务器
  • 权重可以在haproxy运行时动态调整无需重启

5.2.1 roundrobin 

  • 基于权重的轮询动态调度算法,
  • 支持权重的运行时调整,不同于lvs中的rr轮训模式,
  • HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数)
  • 其每个后端backend中最多支持4095real server
  • 支持对real server权重动态调整,
  • roundrobin为默认调度算法,此算法使用广泛

listen webcluster
    bind *:80
    mode http
#添加roundrobin
    balance roundrobin
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

测试: 发现可以修改权重

[root@haproxy ~]# echo "set weight webcluster/web1 1 " | socat stdio /var/lib/haproxy/stats

 5.2.2 leastconn---基于链接非权重

  • leastconn加权的最少连接的动态
  • 支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接)
  • 比较适合长连接的场景使用,比如:MySQL等场景。
listen webcluster
    bind *:80
    mode http
#添加leastconn
    balance leastconn
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

5.3 其他算法

其它算法即可作为静态算法,又可以通过选项成为动态算法

5.3.1 source

如果访问客户端是一个家庭,那么所有的家庭的访问流量都会被定向到一台服务器,这时 source

法的缺陷。

5.3.1.1 map-base 取模法
  • map-based:取模法,对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请求转发至对应的后端服务器。
  • 此方法是静态的,即不支持在线调整权重,不支持慢启动,可实现对后端服务器均衡调度
  • 缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因总权重发生变化而导致调度结果整体改变

 在配置文件中配置如下:

listen webcluster
    bind *:80
    mode http
#添加source
    balance source
    hash-type map-base
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

测试:

#不支持动态调整权重值
[root@haproxy ~]# echo "set weight webserver_80/webserver1 2" | socat stdio
/var/lib/haproxy/haproxy.sock
Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.
#只能动态上线和下线
[root@haproxy ~]# echo "set weight webserver_80/webserver1 0" | socat stdio
/var/lib/haproxy/haproxy.sock
[root@haproxy ~]# echo "get weight webserver_80/webserver1" | socat stdio
/var/lib/haproxy/haproxy.sock
0 (initial 1)
 5.3.1.2 一致性hash

具体算法:

 

会产生hash环偏斜问题:

hash对象:其与后端服务器的映houduan

 

一致性hash示意图:后端服务器在线与离线的调度方式

配置示例:

listen webcluster
    bind *:80
    mode http
#添加source
    balance source
    hash-type consistent
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

5.3.2 uri 

基于对用户请求的 URI 的左半部分或整个 uri hash ,再将 hash 结果对总权重进行取模后

根据最终结果将请求转发到后端指定服务器

适用于后端是缓存服务器场景

默认是静态算法,也可以通过 hash-type 指定 map-based consistent,来定义使用取模法还是一致性hash

注意:此算法基于应用层,所以只支持 mode http ,不支持 mode tcp

 

uri取模法示例: 

listen webcluster
    bind *:80
    mode http
    balance uri
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

 与hash一致性一起使用:

listen webcluster
    bind *:80
    mode http
    balance uri
    hash-type consistent
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

 测试访问:创建不同的文件当作uri

[root@web1 ~]# curl 172.25.254.100/index2.html
172.25.254.20 ---index2.html
[root@web1 ~]# curl 172.25.254.100/index3.html
172.25.254.10 ---index3.html
[root@web1 ~]# curl 172.25.254.100/index1.html
172.25.254.20 ---index1.html

5.3.3 url_param

 配置如下:

haproxy ~]# vim /etc/haproxy/haproxy.cfg
#添加
listen webcluster
    bind 172.25.254.100:80
    mode http
    balance url_param name,userid #支持对多个url_param hash
    hash-type consistent
    server web1 172.25.254.10:80 weight 1 check inter 3s fall 3 rise 5
    server web2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5

测试:

[root@web1 ~]# curl 172.25.254.100/index1.html?name=lee
172.25.254.20 ---index1.html
[root@web1 ~]# curl 172.25.254.100/index1.html?name=lee
172.25.254.10 ---index1.html
[root@web1 ~]# curl 172.25.254.100/index1.html?name=test
172.25.254.20 ---index1.html
[root@web1 ~]# curl 172.25.254.100/index1.html?name=test
172.25.254.20 ---index1.html

5.3.4 hdr

 配置:

haproxy ~]# vim /etc/haproxy/haproxy.cfg
listen webcluster
    bind *:80
    mode http
    balance hdr(Usr-Agent)
    hash-type consistent
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 1 
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1
    server web_sorry 172.25.254.100:8080 backup

 测试

#测试查看
curl -v 172.25.254.100
curl -vA "firefox" 172.25.254.100
curl -vA "sougou" 172.25.254.100

5.4 算法总结

#静态
static-rr--------->tcp/http
first------------->tcp/http
#动态
roundrobin-------->tcp/http
leastconn--------->tcp/http
#以下静态和动态取决于hash_type是否consistent
source------------>tcp/http
Uri--------------->http
url_param--------->http
hdr--------------->http

使用场景

first                     #使用较少
static-rr                 #做了session共享的web集群
roundrobin
leastconn                 #数据库
source 

#基于客户端公网IP的会话保持
Uri--------------->http   #缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯
url_param--------->http   #可以实现session保持
hdr                        #基于客户端请求报文头部做下一步处理
举报

相关推荐

0 条评论