Haproxy简介及配置详解

news2024/11/25 4:37:30

一、Haproxy简介

官网:

企业版网站: https://www.haproxy.com
社区版网站: http://www.haproxy.org
github: https://github.com/haprox

Haproxy是法国人Willy Tarreaus开发的一款开源软件,能够提供高性能、负载均衡以及基于HTTP和TCP应用个代理,支持虚拟机,特别适用于负载大的web站点(这些站点通常需要七层处理)。

Haproxy的配置文件haproxy.cfg由globle和proxies两部分组成。

1.1 Haproxy的配置文件

Haproxy的配置文件haproxy.cfg由globle和proxies两部分组成。

globle:

(1)进程及安全相关的参数

(2)性能调整相关参数

(3)Debug参数

1.2 globle 配置参数说明

参数作用
log 127.0.0.1 local3 wa定义Haproxy日志输出设置
ulimit -n 82000设置每个进程的可用的最大文件描述符
chroot锁定目录运行
nbproc n开启进程数
pidfile指定pid文件路径,与servise指定pid路径一样
ndthread多线程(不能与单线程同时启用)
maxconn/maxlssconn/maxconnrate + n最大连接数/配备证书的前提下ssl最大连接数/连接速率(每个进程)
chroot /usr/local/haproxychroot运行路径
uid 99/gid 99运行haproxy 用户 UID/用户组gid
 spread-checks + n后端服务check随机提前或延迟的百分比时间
daemon以后台形式运行harpoxy
nbproc(多进程)+n可设置进程数量
pidfile/usr/local/haproxy/run/haproxy.pidhaproxy 进程PID文件
debughaproxy调试级别,建议只在开启单进程的时候调试
cpu-map +进程数+cpu号绑定hap进程至指定cpu
stats / socket套接字文件,处于协议与应用层中间,相当于虚拟的门

1.3 多进程和线程展示

启用多进程,修改配置文件  /etc/haproxy/haproxy.cfg

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
# 启用多个socket文件

nbproc 2
# 启用多进程

cpu-map 1 0
cpu-map 2 1
# 进程+cpu核心

查看信息

启用多线成,继续进入 /etc/haproxy/haproxy.cfg 并修改配置文件

nbthread 2
# 将文件中的多进程关闭,开启多线程

1.4 proxies 配置参数说明

参数作用
default默认配置,针对fronted、backend、listen生效,name可有可无
frontend前端servername,类似Nginx的一个虚拟主机server和LVS的服务集群
backend后端服务器,等于LVS 的RS服务器
listen将frontend和backend合并在一起,使之更简洁

1.4.1 四种配置参数详情

defaults

参数作用
option redispatch当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启
option http-keep-alive开启与客户端的会话保持
option forwardfor透传客户端RIP至后端web服务器
mode http|tcp设置默认工作类型,使用TCP更好,减少压力
timeout http-keep-alive 120ssession会话保持超时时间,此时间段内会转发到相同的后端服务器
timeout connect 120s客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms
timeout server 600s客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如果超时,会出现502错误,把这个值设置大一点,可以有效地避免502
timeout client 600s设置haproxy与客户端的最长非活动时间,默认单位ms
timeout check   2s对后端服务器的默认检测超时时间
 
default-server inter 2 weight 3指定后端服务器的默认设置

defaults

参数作用
bind指定haproxy(以后简称hap)的监听地址,IPV4/IPV6都ok,可同时监听多个IP或者端口
backend
参数作用
mode http|tcp指定负载协议类型,和对应的frontend一致
option配置选项
server定义后端real server.必须指定IP和端口

1.5 小小实验

1、server配置

在server配置中,我们可以使用check进行健康检测,check必须手动添加,否则默认不开启检查,如果只有check,没有后面的内容,也可以进行健康检测。但是在添加check后面连接的内容时,必须指定IP和端口,才能实现健康检测

参数作用
addr + IP指定进行健康检测的IP,减少业务网络的流量
port + 端口指定进行健康检测的端口号
inter + 间隔时间健康检测间隔时间,默认为2000ms
fall + n服务器从线上转为线下的检查的连续失败次数,默认3
rise + n与fall作用相反,线下---->线上,默认2
weight默认1,最大256,0表示不参与负载,但是仍然接受连接
backup备份服务器,相当于sorry server
disable将服务器标记为不可用状态,不再接受用户请求
redirect prefix / redir http://www.baidu.com/ 将临时请求定向至baidu,只能在http服务中使用
maxconn后端服务最大连接数

实验演示:

进入配置文件修改

backend yee-webserver-80-RS
server web1 172.25.254.10:80  check inter 4 fall 3 rise 2 weight 1
server web2 172.25.254.20:80  check inter 4 fall 3 rise 2 weight 1

测试

[root@client ~]# for N in {1..10}
> do
> curl 172.25.254.100
> done
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20
webserver1 - 172.25.254.10
webserver2 - 172.25.254.20

2、listen简化配置

listen webserver_80
bind 172.25.254.100:80
mode http
option forwardfor
server web1 172.25.254.10:80  check inter 4 fall 3 rise 2 weight 1
server web2 172.25.254.20:80  check inter 4 fall 3 rise 2 weight 1

3、针对对进程的处理方式

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
nbproc 2
cpu-map 1 0
cpu-map 2 1

二、haproxy的算法

2.1 静态算法

按照指定好的规则轮询公平调度,不考虑服务器的当前负载、连接数和其他因素,并且不能实时修改权重,只能重启haproxy使之生效。

2.1.1慢启动---static-rr

listen webserver_80
   bind 172.25.254.100:80
   mode http
   balance static-rr
   server web1 172.25.254.10:80  check inter 3s fall 3 rise 2
   server web2 172.25.254.20:80  check inter 3s fall 3 rise 2

2.1.2 first

  listen webserver_80
   bind 172.25.254.100:80
   mode http 
   balance first
   server web1 172.25.254.10:80 maxconn 3 check inter 3s fall 3 rise 5
   server web2 172.25.254.20:80  check inter 3s fall 3 rise 2

2.2 动态算法

①.基于权重的轮询动态调度算法

②支持权重的运行时调整,不同于Is中的rr轮训模式

③HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数)

④其每个后端backend中最多支持4095个real server

⑤支持对real server权重动态调整

⑥roundrobin为默认调度算法,此算法使用广泛

2.2.1roundrobin

修改脚本:

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.10:80  check inter 3s fall 3 rise 2
    server web2 172.25.254.20:80  check inter 3s fall 3 rise 2

动态调整权重:

[root@hap ~]# echo "set weight webserver_80/web1 2" | socat stdio /var/lib/haproxy/haproxy.sock

2.2.3 leastconn

与上述操作相同,修改脚本即可。

2.3 其他算法

2.3.1 sourse

基于用户源地址hash并将请求转发到后端服务器,并且后续同一个源地址请求将被转发至同一个web服务器。用法:修改 balance sourse,测试结果为:

两种算法 

map-base取模法:计算两个数相除之后的余数  10%7=3   hash(sourse_ip)%所有web相加的总权重。

一致性hash:就是hash函数(hashcode%size)的size保持不变,从而保证了hash函数的前后一致性。

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

2.3.2 uri

对用户请求的uri的左半部分或者整个uri做hash,再将hash结果对总权重进行取模处理,最后根据最终结果将请求转发到指定的web服务器。取模使用的依旧是一致性hash,且此算法只能在应用层进行,只支持mode http。

1、uri取模示例

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance uri
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

2、uri一致性hash

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

3、测试

web1:
[root@w1 ~]# echo 172.25.254.10 - index1.html > /usr/share/nginx/html/index1.html
[root@w1 ~]# echo 172.25.254.10 - index2.html > /usr/share/nginx/html/index2.html
[root@w1 ~]# echo 172.25.254.10 - index3.html > /usr/share/nginx/html/index3.html


web2:
[root@w2 ~]# echo 172.25.254.20 - index1.html > /usr/share/nginx/html/index1.html
[root@w2 ~]# echo 172.25.254.20 - index2.html > /usr/share/nginx/html/index2.html
[root@w2 ~]# echo 172.25.254.20 - index3.html > /usr/share/nginx/html/index3.html


访问:
[root@client ~]# curl 172.25.254.100/index.html
webserver1 - 172.25.254.10
[root@client ~]# curl 172.25.254.100/index1.html
172.25.254.10 - index1.html
[root@client ~]# curl 172.25.254.100/index2.html
172.25.254.20 - index2.html
[root@client ~]# curl 172.25.254.100/index3.html
172.25.254.10 - index3.html

# 访问不同的uri,用户可以将请求转发至相同的服务器

2.3.3 url_param

url_param对用户请求的url中的 params 部分中的一个参数key对应的value值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器,后端搜索同一个数据会被调度到同一个服务器,多用与电商。通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个real server如果无没key,将按roundrobin算法。

1、url_param 取模法

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance url_param name,userid
#  支持多个url_param hash
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

2、url_param 一致性hash

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance url_param name,userid
    hash-type consistent
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

3、测试

[root@client ~]# curl 172.25.254.100/index3.html?userid=111
172.25.254.10 - index3.html
[root@client ~]# curl 172.25.254.100/index3.html?userid=222
172.25.254.10 - index3.html
[root@client ~]# curl 172.25.254.100/index3.html?userid=333
172.25.254.20 - index3.html
[root@client ~]# curl 172.25.254.100/index3.html?userid=444
172.25.254.10 - index3.html

3.2.4 hrd

针对用户每个http头部(header)请求中的指定信息做hash,此处由 name 指定的http首部将会被取出并做hash计算,然后由服务器总权重取模以后派发至某挑出的服务器,如果无有效值,则会使用默认的轮询调度。

1、hrd取模法

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance hrd(user-Agent)
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

2、hrd一致性hash

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance hrd(user-Agent)
    hash-type consistent
    server web1 172.25.254.10:80  check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.254.20:80  check inter 2 fall 3 rise 5 weight 1

3、测试

[root@client ~]# curl -A "yee" 172.25.254.100/index.html
webserver1 - 172.25.254.10
[root@client ~]# curl -A "yee" 172.25.254.100/index.html
webserver2 - 172.25.254.20

三、高级功能配置

3.1 建立在cookie上的会话保持

与sourse地址hash调度算法相比较,cookie对客户端的粒度更加准确,但同时也加大了haproxy的负载。目前使用较少,且只能使用 mode http。

3.1.1 配置示例

listen webserver_80
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    cookie WEBCOOKIE insert nocache indirect
    server web1 172.25.254.10:80 cookie yee1 check inter 2 fall 3 rise 5 weight 1
    server web2 172.25.254.20:80 cookie yee2 check inter 2 fall 3 rise 5 weight 1

3.1.2 测试+验证

[root@client ~]# curl -b WEBCOOKIE=yee1 172.25.254.100
webserver1 - 172.25.254.10
[root@client ~]# curl -b WEBCOOKIE=yee2 172.25.254.100
webserver2 - 172.25.254.20
webserver2 - 172.25.254.20
[root@client ~]# curl -i 172.25.254.100
HTTP/1.1 200 OK
server: nginx/1.20.1
date: Sat, 10 Aug 2024 09:19:37 GMT
content-type: text/html
content-length: 27
last-modified: Wed, 07 Aug 2024 08:08:45 GMT
etag: "66b32b8d-1b"
accept-ranges: bytes
set-cookie: WEBCOOKIE=yee1; path=/
cache-control: private

webserver1 - 172.25.254.10
[root@client ~]# curl -i 172.25.254.100
HTTP/1.1 200 OK
server: nginx/1.20.1
date: Sat, 10 Aug 2024 09:19:40 GMT
content-type: text/html
content-length: 27
last-modified: Wed, 07 Aug 2024 08:09:03 GMT
etag: "66b32b9f-1b"
accept-ranges: bytes
set-cookie: WEBCOOKIE=yee2; path=/
cache-control: private

3.2 haproxy状态页

3.2.1 haproxy状态页配置

参数作用
status enable启用状态页
status hide-version隐藏页面当中的haproxy版本
status refresh设置自动刷新时间间隔,默认不开启自动刷新
status uri自定义status page uri,默认值为:/haproxy?status
status auth+用户:密码认证时的账户和密码。可以定义多个,每行指定一个用户
status admin{ if  |  unless}启用status page 中的管理功能

3.2.2 启用状态页并登录

1、修改配置文件

 listen stats:
    bind 0.0.0.0:8080
    mode http
    stats enble
    log globle
    stats uri /status
    stats auth yee:yee

2、测试

3.2.3 backend server参数说明

session rate:每秒的连接会话信息
cur:每秒的当前会话数量
max:每秒新的最大会话数量
limit:每秒新的会话限制量
sessions:会话信息
cur:当前会话量
max:最大会话量
Errors:错误统计信息
Req:错误请求量
conn:错误链接量
Resp:错误响应量
Warnings:警告统计信息
Retr:重新尝试次数
Redis:再次发送次数
limit: 限制会话量
Total:总共会话量
LBTot:选中一台服务器所用的总时间
Last:和服务器的持续连接时间
Server:real server信息
Status:后端机的状态,包括UP和LastChk:持续检查后端服务器的时
Wght:权重
Bytes:流量统计
Out:网络的字节输出总量
Dwn:后端服务器连接后都是DOWN的数量
Denied:拒绝统计信息
Req:拒绝请求量
Act:活动链接数量
Bck:备份的服务器数量
Chk:心跳检测时间
Dwntme:总的downtime时间
Thrtle:server 状态
Resp:拒绝回复量

3.3 IP透传

3.3.1 layer 4与layer 7

四层负载:把client发送的报文目标地址,根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据,而四层负载自身不参与建立连接,而和LVS不同,haproxy是伪四层负载均衡,因为haprox需要分别和前端客户端及后端服务器建立连接。

七层负载:七层负载均衡服务器起了一个反向代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问Web Server要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的 Web Server,然后通过三次握手与此台Web Server建立TCP连接,然后Web Server把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用,七层代理需要和Client和后端服务器分别建立连接。

3.3.2 开启四层IP透传服务

1、在web1修改配置文件/etc/nginx/nginx.conf以下内容

2、在haproxy修改配置文件/etc/haproxy/haproxy.cfg以下内容

  listen stats:
    bind 172.25.254.100:80
    mode tcp
    balance roundrobin
    server web1 172.25.254.10:80 send-proxy check inter 2 fall 3 rise 5 weight 1

3、查看日志内容

3.3.3 开启七层IP透传服务

1、修改配置文件

listen stats:
   bind 172.25.254.100:80
   mode tcp
   balance roundrobin
   option forwardfor
   server web1 172.25.254.10:80 send-proxy 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

#apache 配置:
LogFormat "%{x-Forwarded-For}i %a %] %u %t\"%r\" %>s %b \"%{Referer}i\"\"%{user-Agent}i\"" combined

#nginx 日志格式:
$proxy_add_x_forwarded_for:包括客户端IP和中间经过的所有代理的IP$http_x_forwarded_For:只有客户端IP
l0g_format main'"$proxy_add_x_forwarded_for"-$remote_user [$time_loca1]
"$request"
$status $body bytes sent "$http_referer"1
""$http_user_agent" $http_x_forwarded_For';

#tomcat 配置:conf目录下的server.xm7<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logsprefix="1ocalhost_access_1og" suffix=".txtpattern="%{x-Forwarded-For}i %h % %u %t &quot;%r&quot; %s %b" />

2、查看日志内容

[root@w1 ~]# tail -n 3 /var/log/nginx/access.log
[root@w2 ~]# tail -n 3 /etc/httpd/logs/access_log
使用上述两条命令即可。

3.4 ACL

访问控制列表ACL,AccessControl Lists)
是一种基于包过滤的访问控制技术
它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃。

3.4.1 ACL匹配模式

参数作用
-i不区分大小写
-m使用指定的正则表达式匹配方式
-n不做dns解析
-u禁止acl重名

3.4.2 具体操作符

1、整体:eq、ge、gt、le、lt

2、字符:-m str、-m sub 、-m beg 、-m end 、-m dir 、-m dom 

字符比较:
exact match (-m str):字符串必须完全匹配模式
exact match (-m sub):在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配substring 
prefix match (-m beg):在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL将匹配-suffix suffix match (-m end):将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则ACL进行匹配
subdir match (-m dir):查看提取出来的用斜线分隔(“/")的字符串,如其中任一个匹配,则- subdir matchACL进行匹配
domain match (-m dom):查找提取的用点(“.")分隔字符串,如果其中任何一个匹配,则ACL进-domain match行匹配

3.4.3 操作对象

-Boolean #布尔值
-integer or integer range#整数或整数范围,比如用于匹配端口范围二
-IP address/network#IP地址或IP范围,192.168.0.1192.168.0.1/24
-string-->www.timinglee.org
exact    #精确比较
substring    #子串
suffix    #后缀比较
prefix    #前缀比较
subdir    #路径,/wp-includes/js/jquery/jquery.js
domain    #域名,www.timinglee.org
regular expression    #正则表达式
- hex block    #16进制

3.4.4 域名匹配演示


frontend webcluster
      bind :80
      mode http
      acl test hdr(dom)-i www.yee.org
      use backendwebcluster host if test
      default backend default-host


backend webcluster-host
      mode http
      server web1 172.25.254.10:80 check inter 2 fall 2 rise 5

backend default*host
      mode http
      server web2 172.25.254.20:80 check inter 2 fall 2 rise 5

测试:

[root@client]# curl www.yee.org
webserver1 - 172.25.254.20
[root@client]#curl www.yee.org
webserver1 - 172.25.254.10

3.4.5 基于源IP或子网调度访问演示

(以下只展示做修改的部分,相同部分不再展示)

frontend webcluster
bind *:80
mode http
acl ctrl_ip rox src 172.25.254.1 172.25.254.20  192.168.0.0/24


use backend webcluster-host if ctrl_ip
# 拒绝可以这样写
http-request  deny if ctrl_ip 

default backend default-host

测试:

[root@client]# curl 172.25.254.100
webserver1 - 172.25.254.10

3.4.6 匹配浏览器类型

frontend webcluster
    bind *:80
    mode http 
    acl badwebrowers hdr_sub(User-Agent)-i curl wget

http-request deny if badwebrowers
default_backend default-host

测试:

[root@client]# curl 172.25.254.100
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.</body></html>

3.4.7 基于文件后缀名动静分离类型

web1:
# 安装php
[root@w1 ~]# dnf install php -y
# 重启httpd
[root@w1 ~]# systemctl restart httpd
[root@w1 ~]# vim /var/www/html/index.php
[root@w1 ~]# cat /var/www/html/index.php
<?php
        phpinfo();
?>


# 然后再去浏览器测试一下


hap:
# 配置文件修改
frontend webcluster
    bind *:80
    mode http
    acl static   path end  -i .html .jpg .png .css .js
    acl php      path end -i .php
   
    use_backend webcluster-host if php

测试:

3.4.8 匹配访问路径实现动静分离

frontend webcluster
    bind *:80
    mode http
    acl static  path_sub -m sub  static
    acl php     path_sub -m sub  php
    
    use_backend webcluster-host if php


[root@w2 ~]# mkdir /usr/share/nginx/html/static -p 
[root@w2 ~]# echo static - 172.25.254.20 > /usr/share/nginx/html/static/index.html

[root@w2 ~]# curl 172.25.254.20/static/ static - 172.25.254.20

[root@w1 ~]# mkdir /var/www/html/php -p 
[root@w1 ~]# cp /var/www/html/index.php /var/www/html/php

测试:

根据自己需求,在脚本中进行修改即可得到下一步想要进行的操作,但是修改脚本后,一定要重启服务,才能保证脚本的正常运行。

3.5 自定义haproxy错误界面

对指定的报错进行重定向,显示错误页面
使用errorfile和erroroc指令的两种方法,可以实现自定义各种错误页面,以下是haproxy默认使用的错误页面

[root@hap ~]# rpm -ql haproxy24z-2.4.27-1.e17.zenetys.x86_64 | grep -E http$
/usr/share/haproxy/400.http
/usr/share/haproxy/403.http
/usr/share/haproxy/408.http
/usr/share/haproxy/500.http
/usr/share/haproxy/502.http
/usr/share/haproxy/503.http
/usr/share/haproxy/504.http

示例:

[root@hap ~]# mkdir /haproxy/errorpages/ -p
[root@hap ~]# cp /usr/share/haproxy/503.http
[root@hap ~]# vim /haproxy/errorpages/503page.http
[root@hap ~]# cat /haproxy/errorpages/503page.http
HTTP/1.0 503 service Unavailable
cache-control:no-cache
Connection: close
Content-Type:text/html;charset=UTF-8

<html><body><h1>什么动物生气最安静</h1>
大猩猩!!
</body></html>

测试1:

测试2:

在进行后续实验时,只需要在配置文件中对标红部分进行修改即可

3.6 haproxy 四层负载

示例:对MySQL服务实现四层负载

在web2和web1中安装并启动mariabd服务

修改配置文件

在hap中修改

测试:在web1输入mysql

实现四层负载

listen dbserver
    bind *:3306
    mode tcp
    balance static-rr
    server db1 172.25.254.10:3360 check inter 3 fall 3 rise 5
    server db2 172.25.254.20:3360 check inter 3 fall 3 rise 5
    

重启后测试:

[root@client ~]# mysql -uyee -p -h 172.25.254.100
Welcome to the MariaDB monitor.Commands end with; or \ g
Your MariaDB connection id is 11
Server version: 10.5.22-MariaDB MariaDB Server

Copyright(c)2000,2018, 0racle, MariaDB Corporation Ab and others.

Type 'help;'or '\h' for help. Type 'ic' to clear the current input statement.

 

3.7 haproxy 的https

# 证书的制作
[root@hap ~]# mkdir -p /etc/haproxy/certs

[root@hap ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/yee.org.key -x509 -days 365 -out /etc/haproxy/certs/yee.org.crt

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:yee
Organizational Unit Name (eg, section) []:webserver
Common Name (eg, your name or your server's hostname) []:www.yee.org
Email Address []:admin@yee.org


[root@hap ~]# cd /etc/haproxy/conf.d/
[root@hap conf.d] # ls
webcluster.cfg
[root@hap conf.d]# pwd
/etc/haproxy/conf.d
[rootahap conf.d]# cat webcluster.cfg
listen stats
    mode http
    bind *:9999
    stats enable
    stats refresh 3
    stats uri /status
    stats auth yee:yee

# http配置
[root@hap ~]# vim /etc/haproxy/haproxy.cfg

listen web-https
    bind *:443 ssl crt /etc/haproxy/certs/yee.pem
    mode http
    balance roundrobin
    server web2 172.25.254.20:80 check inter 2 fall 2 rise 5
    server web1 172.25.254.10:80 check inter 2 fall 2 rise 5


# 全站加密
frontend webcluster
    bind *:80
    mode http
    redirect scheme https if !{ ssl_fc }


测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信自动回复的设置

如何在微信上高效回复客户&#xff0c;提供良好的用户体验是很重要的。 但常常因为一人管理太多号&#xff0c;消息回复不过来&#xff1b;同时太多客户咨询&#xff0c;手忙脚乱&#xff1b;回复的话术让人感到不专业。 没关系&#xff0c;小编有办法。给大家分享几个小技巧…

【聚类算法】

聚类算法是一种无监督学习方法&#xff0c;用于将数据集中的数据点自动分组到不同的类别中&#xff0c;这些类别也称为“簇”或“群”。聚类的目标是让同一簇内的数据点尽可能相似&#xff0c;而不同簇之间的数据点尽可能不相似。聚类算法广泛应用于多种领域&#xff0c;如数据…

NASA:ARCTAS_AircraftRemoteSensing_P3B_AATS14_Data

ARCTAS P-3B Aircraft AATS14 Data 简介 ARCTAS_AircraftRemoteSensing_P3B_AATS14_Data 包含在 "从飞机和卫星观测对流层成分的北极研究"&#xff08;ARCTAS&#xff09;任务期间通过 P-3B 飞机上的艾姆斯 14 通道机载跟踪太阳光度计&#xff08;AATS14&#xff0…

初始化React Native项目

node 版本 高于16版本会出现错误 Error: error:0308010C:digital envelope routines::unsupported (Node.js v19.4.0) openssl 3.0版本与node 版本不一致冲突 react-native 初始化项目版本为 镜像使用淘宝镜像源 npx nrm use taobao npx react-native0.67 init FirstApp …

vue 中使用 lodash Debounce防抖不生效

需求&#xff1a;搜索按钮增加防抖功能 代码1 <template><el-button type"primary" icon"el-icon-search" click"searchClick">搜索</el-button> </template><script> import { debounce } from "lodash&q…

使用Nvm切换nodeJs高版本之后,使用npm install一闪而过

先说现象,最近又有几个项目接手,其中有一个使用NVM切换至高版本node后,出现如下症状; 没有任何提示,然后翻看文件目录,node_modules目录没有创建,同时在全局 npm config set prefix 设置的目录下 多了一个 pgn的快捷,指向项目目录。 使用百度或者chart-gtp,搜索到的答案…

VSCODE ESP-IDF 内置 JTAG 接口断点单步调试笔记

环境配置 下载VSCODE之后&#xff0c;安装VSCODE的ESP-IDF插件。 还可安装c/c与python的语言插件 进行配置&#xff1a;ctrlshiftP 打开配置选项&#xff0c;输入ESP-IDF:Configure ESP-IDF extension 根据情况选择即可&#xff1a; 点击“Configure Tools” 出现…

echarts多条折线图,横轴相同问题

this.curveList [ { value: "5", collectTime: "13.14", signalName: "数据深" }, { value: "1", collectTime: "13.23", signalName: "数据深" }, { value: "20", collectTime: "13.14", s…

以一道面试题来探讨测试用例设计的六大思路

有这样一个面试题&#xff1a;在一个Web测试页面上&#xff0c;有一个输入框&#xff0c;一个计数器&#xff08;count&#xff09;按钮&#xff0c;用于计算一个文本字符串中字母a出现的个数。请设计一系列测试用例用以测试这个Web页面。 有经验的测试人员可能会问面试官&…

博途PLC FOR+CASE语句组合应用

CASE语句的使用可以参考下面文章链接&#xff1a; 1、CASE语句和定时器组合使用注意事项 CASE语句和定时器组合使用注意事项(SCL代码)_plc定时器可以放在case语句里面吗-CSDN博客文章浏览阅读283次。本文介绍了在使用CASE语句进行状态机流程控制时&#xff0c;如何结合定时器…

人工智能 | 通俗讲解AI基础概念

LLM LLM&#xff08;Large Language Models&#xff09;指的是大型语言模型。这些模型是自然语言处理&#xff08;NLP&#xff09;技术的一部分&#xff0c;使用深度学习训练来理解、生成、翻译文本&#xff0c;甚至执行特定的语言相关任务&#xff0c;如问答、文本摘要、编程…

Rancher的RKE和RKE2部署K8s集群kube-proxy开启strictARP

kube-proxy配置strictARPtrue 1、非RKE部署的K8s集群&#xff1a;配置首先&#xff0c;需要为kube-proxy启动strictARP&#xff0c;以便Kubernetes集群中的所有网卡停止响应其他网卡的ARP请求&#xff0c;而由OpenELB来处理ARP请求。 $ kubectl edit configmap kube-proxy -n…

关于k8s的pvc存储卷

目录 1.PVC 和 PV 1.1 PV 1.2 PVC 1.3 StorageClass 1.4 PV和PVC的生命周期 2.实战演练 2.1 创建静态pv 2.2 创建动态pv 3.总结 1.PVC 和 PV 1.1 PV PV 全称叫做 Persistent Volume&#xff0c;持久化存储卷。它是用来描述或者说用来定义一个存储卷的&#xff0c;…

Android SystemServer启动流程

文章目录 Android SystemServer启动流程概述流程图源码分析创建SystemServer进程启动SystemServer进程SystemServer#main()SystemServer#run()SystemServer#createSystemContext()SystemServer#startBootstrapServices()SystemServer#startCoreServices()SystemServer#startOth…

FFmpeg Filter过滤器实战

引文 - FFmpeg Filter的介绍 Filter&#xff0c;一般被译为"过滤器"或者"滤镜"&#xff0c;本篇文章统一以"过滤器"著称。 那么过滤器的作用是什么呢&#xff1f;FFmpeg中的过滤器系统是在解码之后、编码之前对媒体流进行处理的关键组件。 下…

Java面试八股之什么是MQTT协议

什么是MQTT协议 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;是一种轻量级的“发布/订阅”&#xff08;Publish/Subscribe&#xff09;模式的消息传输协议&#xff0c;特别适合于远程和低带宽网络环境&#xff0c;如物联网&…

【向量数据库】向量数据库的构建和检索

1、使用 sentence-transformers 将文本编码为向量 安装 sentence-transformers&#xff1a; pip install -U sentence-transformers在 huggingface 下载 all-MiniLM-L6-v2 模型权重&#xff08;1_Pooling 是文件夹&#xff0c;里面包含一个 config.json 文件&#xff09;&…

Qt内存泄漏与程序异常崩溃

内存泄漏 什么是内存泄漏&#xff1f; 内存泄漏&#xff08;Memory Leak&#xff09;指的是程序在动态分配内存后未能正确释放已分配的内存&#xff0c;导致这些内存块无法被再次使用或回收。内存泄漏的发生主要是在使用堆内存&#xff08;通过new或malloc分配的内存&#xf…

ZBrush入门使用介绍——8、模型网格显示隐藏和遮罩操作

大家好&#xff0c;我是阿赵。   有时候我们需要把需要雕刻的范围限制在某个局部&#xff0c;之前也介绍过一些方法&#xff0c;比如使用遮罩。这里再详细说一下具体的操作。这次我拿这个圆柱为例子&#xff0c;先生成多边形网格&#xff0c;再CtrlD几次增加一点细分级别。 …

【css】使用!important提升选择器的优先级

背景 昨天我的个人博客备案通过了嘛&#xff0c;然后我就想着完善页面底部的备案信息&#xff0c;参考Argon主题博客美化的 网站底部信息 但是我想要把icp备案和公安联网备案的信息分开&#xff0c;即 subject-value-value 的结构&#xff0c; 因为 value 的选择器里面写的是…