haproxy七层代理

news/2024/9/17 11:39:26/ 标签: linux

目录

一、haproxy简介

二、haproxy实验

1.环境部署

2.haproxy的基本部署方法及负载均衡的实现

2.1安装软件

2.2haproxy的基本配置

3.haproxy的全局配置参数及日志分离

3.1多线程设定

3.2自定义日志

4.haproxy-proxies中的常用配置参数

4.1设置backup --- sorryserver的端口

4.2访问重定向

5.haproxy热更新方法

5.1socat

6.haproxy中的算法

6.1静态算法

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

6.1.2 first

6.2动态算法

6.2.1roundrobin

6.2.2 leastconn

6.3其他算法

6.3.1source

6.3.1.1 map-base 取模法

6.3.1.2 一致性hash

6.3.2 uri

6.3.2.1 uri 取模法配置示例

6.3.3 url_param

6.3.3.1 url_param取模法配置示例

6.3.4 hdr

6.3.4.1 hdr取模法配置示例

6.3.6 算法总结

6.3.7 各算法使用场景

三.高级功能及配置

3.1基于cookie的会话保持

3.1.1 配置选项

​编辑

3.2HAProxy状态页

3.2.1 状态页配置项

3.3 IP透传

3.3.2 四层IP透传

3.3.3 七层IP透传

3.4 ACL

基于源IP或子网调度访问

基于浏览器的访问控制

基于文件后缀名实现动静分离

 重定向错误文件

3.5 haproxy的四层负载

3.6 haproxy中https实现

3.6.1 证书制作


一、haproxy简介

HAProxy 是法国开发者 威利塔罗 (Willy Tarreau) 2000 年使用 C 语言开发的一个开源软件
是一款具备高并发 ( 万级以上 ) 、高性能的 TCP HTTP 负载均衡器
支持基于 cookie 的持久性,自动故障切换,支持正则表达式及 web 状态统计
企业版网站: https://www.haproxy.com
社区版网站: http://www.haproxy.org
github https://github.com/haprox
企业版本和社区版功能对比

二、haproxy实验

1.环境部署

haproxy192.168.5.100
webserver1192.168.5.10
webserver2192.168.5.20

2.haproxy的基本部署方法及负载均衡的实现

2.1安装软件
dnf install haproxy -y
2.2haproxy的基本配置

3.haproxy的全局配置参数及日志分离

3.1多线程设定

3.2自定义日志
vim /etc/rsyslog.conf

4.haproxy-proxies中的常用配置参数

4.1设置backup --- sorryserver的端口

disabled指定下线的后端服务器

4.2访问重定向

5.haproxy热更新方法

5.1socat

下载

dnf install socat -y
# 查看 haproxy 状态
[root@haproxy ~]# echo "show info" | socat stdio /var/lib/haproxy/stats

# 查看集群状态
[root@haproxy ~]# echo "show servers state" | socat stdio /var/lib/haproxy/stats

# 查看集群权重
[root@haproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats
2 (initial 2)
[root@haproxy ~]# echo get weight webcluster/web2 | socat stdio /var/lib/haproxy/stats
1 (initial 1)
# 设置权重
[root@haproxy ~]# echo "set weight webcluster/web1 1 " | socat stdio /var/lib/haproxy/stats
[root@haproxy ~]# echo "set weight webcluster/web1 2 " | 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
针对多进程问题

6.haproxy中的算法

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

6.1.2 first
# 在两台主机上分别执行此循环,可以观察是否 102 被调度到
while true;do curl 172.25.254.100 ; sleep 0.1;done
6.2动态算法
6.2.1roundrobin

动态调整权重
[root@haproxy ~]# echo "set weight webserver_80/webserver1 2" | socat stdio
/var/lib/haproxy/haproxy.sock
6.2.2 leastconn

6.3其他算法
6.3.1source

6.3.1.1 map-base 取模法

所谓取模运算,就是计算两个数相除之后的余数, 10%7=3, 7%4=3
map-based 算法:基于权重取模, hash(source_ip)% 所有后端服务器相加的总权重
比如当源 hash 值时 1111 1112 1113 ,三台服务器 a b c 的权重均为 1
abc 的调度标签分别会被设定为 0 1 2 1111%3=1 1112%3=2 1113%3=0
1111 ----- > nodeb
1112 ------> nodec
1113 ------> nodea
如果 a 下线后,权重数量发生变化
1111%2=1 1112%2=0 1113%2=1
1112 1113 被调度到的主机都发生变化,这样会导致会话丢失
# 不支持动态调整权重值
[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)
6.3.1.2 一致性hash

一致性哈希,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动 hash o ) mod n
hash 算法是动态的,支持使用 socat 等工具进行在线权重调整,支持慢启动
1 、后端服务器哈希环点 keyA=hash( 后端服务器虚拟 ip)%(2^32)
2 、客户机哈希环点 key1=hash(client_ip)%(2^32) 得到的值在 [0---4294967295] 之间,
3 、将 keyA key1 都放在 hash 环上,将用户请求调度到离 key1 最近的 keyA 对应的后端服务器

hash 环偏斜问题
增加虚拟服务器 IP 数量,比如:一个后端服务器根据权重为 1 生成 1000 个虚拟 IP ,再 hash 。而后端服务器权 重为2 则生成 2000 的虚拟 IP ,再 bash, 最终在 hash 环上生成 3000 个节点,从而解决 hash 环偏斜问题
hash 对象
Hash 对象到后端服务器的映射关系:
一致性 hash 示意图
后端服务器在线与离线的调度方式
一致性 hash 配置示例
6.3.2 uri
基于对用户请求的 URI 的左半部分或整个 uri hash ,再将 hash 结果对总权重进行取模后
根据最终结果将请求转发到后端指定服务器
适用于后端是缓存服务器场景
默认是静态算法,也可以通过 hash-type 指定 map-based consistent ,来定义使用取模法还是一致性hash
注意:此算法基于应用层,所以只支持 mode http ,不支持 mode tcp
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
左半部分: /<path>;<params>
整个 uri /<path>;<params>?<query>#<frag>
6.3.2.1 uri 取模法配置示例

6.3.3 url_param
url_param 对用户请求的 url 中的 params 部分中的一个参数 key 对应的 value 值作 hash 计算,并由服务器
总权重相除以后派发至某挑出的服务器 , 后端搜索同一个数据会被调度到同一个服务器,多用与电商
通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个 real server
如果无没 key ,将按 roundrobin 算法
# 假设:
url = http://www.timinglee.com/foo/bar/index.php?key=value
# 则:
host = "www.timinglee.com"
url_param = "key=value"
6.3.3.1 url_param取模法配置示例

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

6.3.6 算法总结
# 静态
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
6.3.7 各算法使用场景
first # 使用较少
static-rr # 做了 session 共享的 web 集群
roundrobin
leastconn # 数据库
source
# 基于客户端公网 IP 的会话保持
Uri--------------->http # 缓存服务器, CDN 服务商,蓝汛、百度、阿里云、腾讯
url_param--------->http # 可以实现 session 保持
hdr # 基于客户端请求报文头部做下一步处理

三.高级功能及配置

3.1基于cookie的会话保持
cookie value :为当前 server 指定 cookie 值,实现基于 cookie 的会话黏性,相对于基于 source 地址 hash调度算法对客户端的粒度更精准,但同时也加大了haproxy 负载,目前此模式使用较少, 已经被 session共享服务器代替
3.1.1 配置选项
cookie name [ rewrite | insert | prefix ][ indirect ] [ nocache ][ postonly ] [
preserve ][ httponly ] [ secure ][ domain ]* [ maxidle <idle> ][ maxlife ]
name #cookie key 名称,用于实现持久连接
insert # 插入新的 cookie, 默认不插入 cookie
indirect # 如果客户端已经有 cookie, 则不会再发送 cookie 信息
nocache # client hapoxy 之间有缓存服务器(如: CDN )时,不允许中间缓存器缓存 cookie
# 因为这会导致很多经过同一个 CDN 的请求都发送到同一台后端服务器

3.2HAProxy状态页
3.2.1 状态页配置项
stats enable # 基于默认的参数启用 stats page
stats hide-version # 将状态页中 haproxy 版本隐藏
stats refresh <delay> # 设定自动刷新时间间隔,默认不自动刷新
stats uri <prefix> # 自定义 stats page uri ,默认值: /haproxy?stats
stats auth <user>:<passwd> # 认证时的账号和密码,可定义多个用户 , 每行指定一个用户
# 默认: no authentication
stats admin { if | unless } <cond> # 启用 stats page 中的管理功能
登录状态页
#pid 为当前 pid 号, process 为当前进程号, nbproc nbthread 为一共多少进程和每个进程多少个线程
pid = 27134 (process #1, nbproc = 1, nbthread = 1)
# 启动了多长时间
uptime = 0d 0h00m04s
# 系统资源限制:内存 / 最大打开文件数 /
system limits: memmax = unlimited; ulimit-n = 200029
# 最大 socket 连接数 / 单进程最大连接数 / 最大管道数 maxpipes
maxsock = 200029; maxconn = 100000; maxpipes = 0
# 当前连接数 / 当前管道数 / 当前连接速率
current conns = 2; current pipes = 0/0; conn rate = 2/sec; bit rate = 0.000 kbps
# 运行的任务 / 当前空闲率
Running tasks: 1/14; idle = 100 %
active UP # 在线服务器
backup UP # 标记为 backup 的服务器
active UP, going down # 监测未通过正在进入 down 过程
backup UP, going down # 备份服务器正在进入 down 过程
active DOWN, going up #down 的服务器正在进入 up 过程
backup DOWN, going up # 备份服务器正在进入 up 过程
active or backup DOWN # 在线的服务器或者是 backup 的服务器已经转换成了 down 状态
not checked # 标记为不监测的服务器
#active 或者 backup 服务器人为下线的
active or backup DOWN for maintenance (MAINT)
#active 或者 backup 被人为软下线 ( 人为将 weight 改成 0)
active or backup SOFT STOPPED for maintenance
backend server 信息
session rate( 每秒的连接会话信息 ):
Errors( 错误统计信息 )
cur: 每秒的当前会话数量 :
Req: 错误请求量
max: 每秒新的最大会话数量
conn: 错误链接量
limit: 每秒新的会话限制量
Resp: 错误响应量
sessions( 会话信息 ):
Warnings( 警告统计信息 )
cur: 当前会话量
Retr: 重新尝试次数
max: 最大会话量
Redis: 再次发送次数
limit: 限制会话量
Total: 总共会话量
Server(real server 信息 )
LBTot: 选中一台服务器所用的总时间
Status: 后端机的状态,包括 UP DOWN
Last :和服务器的持续连接时间
LastChk: 持续检查后端服务器的时间
Wght: 权重
Bytes( 流量统计 )
Act: 活动链接数量
In: 网络的字节输入总量
Bck: 备份的服务器数量
Out: 网络的字节输出总量
Chk: 心跳检测时间
Dwn: 后端服务器连接后都是 DOWN 的数量
Denied( 拒绝统计信息 )
Dwntme: 总的 downtime 时间
Req: 拒绝请求量
Thrtle:server 状态
Resp: 拒绝回复量
####
3.3 IP透传
3.3.2 四层IP透传

# 查看日志内容
[root@rs1 ~]# tail -n 3 /var/log/nginx/access.log
192.168.0.10 - - [10/Jul/2024:15:21:00 +0800] "GET / HTTP/1.1"200 18 "-"
"curl/7.29.0" "-"
192.168.0.10 - - [10/Jul/2024:15:26:11 +0800] "GET / HTTP/1.1"200 18 "-"
"curl/7.29.0" "-"
192.168.0.10 - - [10/Jul/2024:15:41:56 +0800] "GET / HTTP/1.1" "172.25.254.10"200
18 "-" "curl/7.29.0"
3.3.3 七层IP透传

配置 web 服务器,记录负载均衡透传的客户端 IP 地址
#apache 配置:
LogFormat "%{X-Forwarded-For}i %a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%
{User-Agent}i\"" combined
#nginx 日志格式:
$proxy_add_x_forwarded_for: 包括客户端IP和中间经过的所有代理的IP
$http_x_forwarded_For: 只有客户端IP
log_format main '"$proxy_add_x_forwarded_for" - $remote_user [$time_local]
"$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_For';
#查看日志如下:
[root@rs1 ~]# tail -n 3 /var/log/nginx/access.log
"172.25.254.10, 192.168.0.10" 192.168.0.10 - - [10/Jul/2024:16:15:00 +0800] "GET
/ HTTP/1.1"200 18 "-" "curl/7.29.0" "172.25.254.10"
[root@rs2 ~]# tail -n 3 /etc/httpd/logs/access_log
172.25.254.10 192.168.0.10 - - [11/Jul/2024:00:15:00 +0800] "GET / HTTP/1.1" 200
27 "-" "curl/7.29.0
3.4 ACL

基于源IP或子网调度访问
示例:
vim/etc/haproxy/haproxy.cfgfrontend webclusterbind *:80mode httpacl ctrl_ip src 172.25.254.1 172.25.254.20 192.168.0.0/24  -----符合条件的访问RS1use_backend webcluster-host if  ctrl_ipdefault_backend default-hostbackend webcluster-hostmode httpserver web1 172.25.254.10:80 check inter 2 fall 2 rise 5backend default-hostmode httpserver web2 172.25.254.20:80 check inter 2 fall 2 rise 5
测试:
[root@werserver2 ~]# curl 172.25.254.100
webserver1 - 172.25.254.10[root@haproxy ~]# curl www.test.com
webserver2 - 172.25.254.20
[root@haproxy ~]# 
frontend webclusterbind *:80mode httpacl ctrl_ip src 172.25.254.1 172.25.254.20 192.168.0.0/24http-request deny if ctrl_ip    ------ 符合条件的拒绝访问default_backend default-hostbackend webcluster-hostmode httpserver web1 172.25.254.10:80 check inter 2 fall 2 rise 5backend default-hostmode httpserver web2 172.25.254.20:80 check inter 2 fall 2 rise 5
测试:
[root@werserver2 ~]# curl 172.25.254.100
webserver1 - 172.25.254.10
[root@werserver2 ~]# curl 172.25.254.100
<html><body><h1>403 Forbidden</h1>
Request forbidden by administrative rules.
</body></html>
[root@werserver2 ~]# [root@haproxy ~]# curl www.test.com   ---- 默认走RS2,走的default
webserver2 - 172.25.254.20
基于浏览器的访问控制
示例:
vim/etc/haproxy/haproxy.cfgfrontend webclusterbind *:80mode httpacl badwebrowers hdr_sub(User-Agent) -i wgethttp-request deny if badwebrowersdefault_backend default-hostbackend webcluster-hostmode httpserver web1 172.25.254.10:80 check inter 2 fall 2 rise 5backend default-hostmode httpserver web2 172.25.254.20:80 check inter 2 fall 2 rise 5
基于文件后缀名实现动静分离
RS主机上:
[root@webserver1 ~]# dnf install php -y
[root@webserver1 ~]# systemctl restart nginx.service 
[root@webserver1 ~]# 
[root@webserver1 ~]# vim /usr/share/nginx/html/index.php
<?php   phpinfo();
?>查看是否能访问到php

自定义haproxy的错误界面

两台web服务都给他挂掉
[root@werserver1 ~]# systemctl stop nginx.service 
[root@werserver2 ~]# systemctl stop nginx.service此时访问不到

 重定向错误文件

3.5 haproxy的四层负载

测试

3.6 haproxy中https实现
haproxy 可以实现 https 的证书安全 , 从用户到 haproxy https, haproxy 到后端服务器用 http 通信
但基于性能考虑 , 生产中证书都是在后端服务器比如 nginx 上实现
#配置HAProxy支持https协议,支持ssl会话;
bind *:443 ssl crt /PATH/TO/SOME_PEM_FILE
#指令 crt 后证书文件为PEM格式,需要同时包含证书和所有私钥
cat demo.key demo.crt > demo.pem
#把80端口的请求重向定443
bind *:80
redirect scheme https if !{ ssl_fc }
3.6.1 证书制作
haproxy ~]# mkdir /etc/haproxy/certs/
haproxy ~]# openssl req -newkey rsa:2048 \
-nodes -sha256 –keyout /etc/haproxy/certs/timinglee.org.key \
-x509 -days 365 -out /etc/haproxy/certs/timinglee.org.crt
3.6.2 https 配置示例
haproxy ~]# vim /etc/haproxy/haproxy.cfg
frontend webserver
bind *:80
redirect scheme https if !{ ssl_fc }
mode http
use_backend webcluster
frontend webserver-https
bind *:443 ssl crt /etc/haproxy/timinglee.org.pem
mode http
use_backend webcluster
backend webcluster
mode http
balance roundrobin
server web1 172.25.254.200:80 check inter 3s fall 3 rise 5
server web2 172.25.254.201:80 check inter 3s fall 3 rise 5
[root@客户端 ~]#curl -IkL http://172.25.254.100
HTTP/1.1 302 Found
content-length: 0
location: https://www.timinglee.org/
cache-control: no-cache
HTTP/1.1 200 OK
date: Sat, 04 Apr 2020 02:31:31 GMT
server: Apache/2.4.6 (CentOS) PHP/5.4.16
last-modified: Thu, 02 Apr 2020 01:44:13 GMT
etag: "a-5a244f01f8adc"
accept-ranges: bytes
content-length: 10
content-type: text/html; charset=UTF-8
[root@centos6 ~]#curl -Ik https://www.timinglee.org
HTTP/1.1 200 OK
date: Sat, 04 Apr 2020 02:31:50 GMT
server: Apache/2.4.6 (CentOS) PHP/5.4.16
last-modified: Thu, 02 Apr 2020 01:44:28 GMT
etag: "a-5a244f0fd5175"
accept-ranges: bytes
content-length: 10
content-type: text/html; charset=UTF-8


http://www.ppmy.cn/news/1507256.html

相关文章

TCP如何建立长连接

文章目录 TCP建立长连接长连接和短连接长连接的优势TCP KEEPALIVE 心跳包心跳检测步骤 断线重连断线重连函数实现 实例服务端客户端程序功能演示效果 TCP建立长连接 长连接和短连接 长连接是指不论TCP的客户端和服务器之间是否有数据传输&#xff0c;都保持建立的TCP连接&…

CSS优先级,没你想的那么简单!全面介绍影响CSS优先级的各类因素

简介 CSS的中文名称叫做“层叠样式表”&#xff0c;其中的层叠就是指根据各类优先级规则来处理冲突的样式。层叠是CSS的一个重要特性&#xff0c;优先级也是CSS学习中一项非常重要的内容。 提到CSS优先级&#xff0c;我们首先会想到各类的选择器&#xff0c;例如ID选择器&…

学习记录——day28 信号量集

目录 一、信号量集 1、信号量集的API函数接口 二、 将信号量集函数再次封装 1、sem.h 2、sem.c 三、使用信号量集完成共享内存的进程同步 1、发送端 2、接收端 一、信号量集 信号量集&#xff0c;其实就是无名信号量的集合&#xff0c;主要用于完整多个进程间的同步问题.…

127. Go反射基本原理

文章目录 反射基础 - go 的 interface 是怎么存储的&#xff1f;iface 和 eface 的结构体定义&#xff08;runtime/iface.go&#xff09;&#xff1a;_type 是什么&#xff1f;itab 是什么&#xff1f; 反射对象 - reflect.Type 和 reflect.Value反射三大定律Elem 方法reflect.…

【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)

文章目录 2.链队列2.1初始化&#xff08;带头结点&#xff09;不带头结点 2.2入队&#xff08;带头结点&#xff09;2.3出队&#xff08;带头结点&#xff09;❗2.4链队列c实例 3.双端队列考点:输出序列合法性栈双端队列 队列的应用1.树的层次遍历2.图的广度优先遍历3.操作系统…

【Kubernetes】Service 概念与实战

Service 概念与实战 1.通过 Service 向外部暴露 Pod2.Service 的多端口设置3.集群内部的 DNS 服务4.无头 Service 在 Kubernetes 中部署的应用可能对应一个或者多个 Pod&#xff0c;而每个 Pod 又具有独立的 IP 地址。Service&#xff08;服务&#xff09;能够为一组功能相同的…

大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Linux中安装MYSQL数据库

文章目录 一、MYSQL数据库介绍1.1、MySQL数据库的基本概述1.2、MySQL数据库的主要特性1.3、MySQL数据库的技术架构与组件1.4、MySQL数据库的应用与扩展性1.5、MySQL数据库的许可模式与开源生态 二、MySQL Workbench和phpMyAdmin介绍2.1、MySQL Workbench介绍2.2、phpMyAdmin介绍…

【学习笔记】Day 9

一、进度概述 1、inversionnet_train 试运行——成功 二、详情 1、inversionnet_train 试运行 在经历了昨天的事故后&#xff0c;今天最终成功运行了 inversionnet_train&#xff0c;运行结果如下&#xff1a; 经观察&#xff0c;最开始 loss 值大概为 0.5 左右 随着训练量的增…

使用Selenium调试Edge浏览器的常见问题与解决方案

背景介绍 在当今互联网时代&#xff0c;网页爬虫已经成为数据获取的重要手段。而Selenium作为一款功能强大的自动化测试工具&#xff0c;被广泛应用于网页爬取任务中。虽然Chrome浏览器是Selenium用户的常见选择&#xff0c;但在某些工作环境中&#xff0c;我们可能需要使用Ed…

Ubuntu24.04设置国内镜像软件源

参考文章&#xff1a; Ubuntu24.04更换源地址&#xff08;新版源更换方式&#xff09; - 陌路寒暄 一、禁用原来的软件源 Ubuntu24.04 的源地址配置文件发生改变&#xff0c;不再使用以前的 sources.list 文件&#xff0c;升级 24.04 之后&#xff0c;该文件内容变成了一行注…

牛客-热身小游戏

题目链接&#xff1a;热身小游戏 第一种写法&#xff1a;线段树 介绍第二种写法&#xff1a;并查集 对于一些已经查询过的点&#xff0c;我们可以往后跳&#xff0c;进行路径压缩&#xff0c;他们的父亲为下一个点。 a数组记录[ l , r ] 之间的乘积&#xff0c;初始值为1。…

haproxy知识点整理

haproxy知识点整理 haproxy七层代理负载均衡什么是负载均衡为什么使用负载均衡 负载均衡类型四层负载均衡七层负载均衡四层和七层的区别 环境搭建:客户端(client)haproxy服务器两台服务器hapserver1hapserver2 简单的haproxy负载均衡 haproxy的基本配置信息global配置proxies配…

17. ADC开发

1. 概述 bes2700 支持2路ADC 2. 硬件连接 3. 软件开发 电压值计算:电压 = 参考电压/4096(2的12次方) * ADC值

linux中安装nginx方法

1、首先确保系统已经安装gcc&#xff0c;如没安装&#xff0c;请先自行安装 2、安装nginx 将openssl-1.1.1j.tar.gz、pcre-8.44.tar.gz、zlib-1.3.tar.gz、nginx-1.20.0.tar.gz解压到当前目录&#xff0c;命令如下&#xff1a; tar -zxvf openssl-1.1.1j.tar.gz tar -zxvf…

【RISC-V设计-08】- RISC-V处理器设计K0A之BMU

【RISC-V设计-08】- RISC-V处理器设计K0A之BMU 文章目录 【RISC-V设计-08】- RISC-V处理器设计K0A之BMU1.简介2.顶层设计3.端口说明4.总线时序4.1 总线写时序4.2 总线读时序 5.代码设计6.总结 1.简介 总线管理单元&#xff08;Bus Management Unit&#xff0c;简称 BMU&#x…

Linux安全与高级应用(四)深入探索MySQL数据库:安装、管理与安全实践

文章目录 标题&#xff1a;全面解析LAMP平台部署及应用第一部分&#xff1a;LAMP平台概述第二部分&#xff1a;准备工作第三部分&#xff1a;安装和配置PHP第四部分&#xff1a;配置Apache第五部分&#xff1a;测试LAMP平台第六部分&#xff1a;部署phpMyAdmin总结 &#x1f44…

【海贼王航海日志:前端技术探索】CSS你了解多少?(三)

目录 1 -> 浏览器调试工具——查看CSS属性 1.1 -> 打开浏览器 1.2 -> 标签页含义 1.3 -> elements标签页使用 2 -> 元素的显示模式 2.1 -> 块级元素 2.2 -> 行内元素/内联元素 2.3 -> 改变显示模式 3 -> 盒模型 3.1 -> 边框 3.2 ->…

MySql-索引事务

在面试中&#xff0c;对于mysql相关的面试题常看的两部分也是我们学习时需要重点了解的内容&#xff1a;索引与事务。 目录 索引 B树 B树结构 B树创建 事务 重点&#xff1a;事务的基本特性 一、原子性 二、一致性 三、持久性 四、隔离性 索引 索引的核心内容&#…

白骑士的Matlab教学进阶篇 2.3 信号处理

系列目录 上一篇&#xff1a;白骑士的Matlab教学进阶篇 2.2 数值计算 信号处理在现代工程和科学领域中扮演着至关重要的角色。MATLAB作为一个强大的数学计算平台&#xff0c;提供了丰富的工具和函数来帮助研究人员和工程师处理各种信号问题。本文将深入介绍MATLAB中信号处理的…