HAproxy反向代理与负载均衡

目录

一、HAproxy介绍

1. 概述

2. 关于4/7层负载均衡

2.1 无负载均衡

2.1.1 图示

2.1.2 说明

2.2 四层负载均衡

2.2.1 图示

2.2.2 说明

2.3 七层负载

2.3.1 图示

2.3.2 说明

3. 特性

4. HAProxy负载均衡常见策略

5. 处理模式

二、HAproxy安装

1. yum安装

2. 第三方安装包

3. 编译安装

三、HAproxy配置与调优

1. 配置文件详解

2. global配置

2.1 状态页

2.2 指定进程线程个数

2.3 cpu亲缘性

2.4 日志

2.4.1 指定本地路径

2.4.2 指定远端路径

2.5 Proxies配置

2.5.1 Proxies配置-defaults

2.5.2 Proxies配置-listen 简化配置


一、HAproxy介绍

1. 概述

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

支持的功能:

  • TCP 和 HTTP反向代理
  • SSL/TSL服务器
  • 可以针对HTTP请求添加cookie,进行路由后端服务器
  • 可平衡负载至后端服务器,并支持持久连接
  • 支持所有主服务器故障切换至备用服务器 keepalive
  • 支持专用端口实现监控服务
  • 支持停止接受新连接请求,而不影响现有连接
  • 可以在双向添加,修改或删除HTTP报文首部字段
  • 响应报文压缩
  • 支持基于pattern实现连接请求的访问控制
  • 通过特定的URI(url)为授权用户提供详细的状态信息

2. 关于4/7层负载均衡

2.1 无负载均衡

没有负载平衡的简单Web应用程序环境可能如下所示

2.1.1 图示

2.1.2 说明

在此示例中,用户直接连接到Web服务器,在yourdomain.com上,并且没有负载平衡。如果单个Web服务器出现故障,用户将无法再访问Web服务器。此外,如果许多用户试图同时访问服务器并且无法处理负载,他们可能会遇到缓慢的体验,或者可能根本无法连接。

2.2 四层负载均衡

将网络流量负载,平衡到多个服务器的最简单方法,是使用第4层(传输层)负载平衡。以这种方式进行负载均衡将根据IP范围和端口转发用户流量(即,如果请求进入http://yourdomain.com/anything,则流量将转发到处理yourdomain.com的所有请求的后端。端口80)。

2.2.1 图示

2.2.2 说明

用户访问负载均衡器,负载均衡器将用户的请求转发给后端服务器的Web后端组。无论选择哪个后端服务器,都将直接响应用户的请求。通常,Web后端中的所有服务器应该提供相同的内容 - 否则用户可能会收到不一致的内容。

2.3 七层负载

7层负载平衡是更复杂的负载均衡网络流量的方法是使用第7层(应用层)负载均衡。使用第7层允许负载均衡器根据用户请求的内容将请求转发到不同的后端服务器。这种负载平衡模式允许您在同一域和端口下运行多个Web应用程序服务器。

2.3.1 图示

2.3.2 说明

示例中,如果用户请求yourdomain.com/blog,则会将其转发到博客后端,后端是一组运行博客应用程序的服务器。其他请求被转发到web-backend,后端可能正在运行另一个应用程序。

3. 特性

① 支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富

② 支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求

③ 性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。

④ 拥有一个功能出色的监控页面,实时了解系统的当前状况

⑤ 功能强大的ACL支持,给用户极大的方便

4. HAProxy负载均衡常见策略

① Round Robin(轮询):按照请求顺序依次将请求分发给后端服务器;static-rr,表示根据权重

② Least Connections(最小连接数):将请求发送到当前连接数最少的服务器上,以确保负载更加均衡。

③ Source(源IP):根据客户端的源IP地址来决定将请求发送到哪台后端服务器上,这样可以确保相同的客户端IP每次都会被发送到相同的后端服务器。

④ URI(基于URI):根据请求中的URI信息来进行负载均衡,通常用于特定类型的应用或者内容分发。

⑤ URL参数:类似于URI策略,但是它会考虑URL参数来进行负载均衡。

⑥ Static-rr(静态轮询):类似于Round Robin,但是在长期运行的负载均衡环境中,该策略会尽量避免频繁的切换。

⑦ Cookie(基于Cookie):根据请求中的Cookie信息来进行负载均衡,适用于需要会话保持的场景。

⑧ Custom(自定义):HAProxy还支持自定义负载均衡策略,管理员可以根据具体需求编写自己的负载均衡算法。

5. 处理模式

单进程处理模式:

所有客户端连接全部都由同一个服务进程来处理,目标就是等待连接,来一个分配一个,主要消耗cpu

多进程模式:

适合于需要更好利用多核处理器的情况,多进程模式可以充分利用硬件资源,但需要更多的系统资源以及进程间通信开销。

多线程处理模式:

适合于需要更好利用多核处理器的情况,相比多进程模式,多线程模式可以减少一些进程间通信的开销,但需要更复杂的线程管理和同步机制。

二、HAproxy安装

1. yum安装

CentOS 7 的默认的base仓库中包含haproxy的安装包文件,但是版本比较旧,是1.5.18的版本,距离当前版本已经有较长时间没有更新,由于版本比较旧所以有很多功能不支持,如果对功能和性能没有要求可以使用此版本,否则推荐使用新版本。

[root@localhost ~]# yum list haproxy     #列出所有可用的软件包
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * epel: mirrors.bfsu.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
可安装的软件包
haproxy.x86_64                              1.5.18-9.el7_9.1                               update

[root@localhost ~]# yum provides haproxy #搜索可用的软件包列表,包括软件包名称、版本和来源等
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * epel: mirror.nju.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
haproxy-1.5.18-9.el7.x86_64 : TCP/HTTP proxy and load balancer for high availability environments
源    :base
haproxy-1.5.18-9.el7_9.1.x86_64 : TCP/HTTP proxy and load balancer for high availability environments
源    :updates
haproxy-1.5.18-9.el7_9.1.x86_64 : TCP/HTTP proxy and load balancer for high availability environments
源    :@updates

[root@localhost ~]# yum install haproxy -y
已安装:
  haproxy.x86_64 0:1.5.18-9.el7_9.1  
[root@localhost ~]# systemctl start haproxy.service

2. 第三方安装包

官方没有提供rpm相关的包,可以通过第三方仓库的rpm包

从第三方网站下载rpm包:https://pkgs.org/download/haproxy,基于互联网第三方仓库在线安装

[root@localhost data]# ls
keepalived.log  rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm  rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm
[root@localhost data]# yum install rh-haproxy18-runtime-3.1-2.el7.x86_64.rpm -y   #依赖包
[root@localhost data]# yum install rh-haproxy18-haproxy-1.8.24-3.el7.x86_64.rpm -y
已安装:
  rh-haproxy18-haproxy.x86_64 0:1.8.24-3.el7 
[root@localhost data]# systemctl start rh-haproxy18-haproxy.service

第三方yum仓库:

yum install centos-release-scl-rh 
yum install rh-haproxy18-haproxy

3. 编译安装

编译安装HAProxy 2.0 LTS版本,更多源码包下载地址:http://www.haproxy.org/download/

AProxy 支持基于lua实现功能扩展, 由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy。

① 查看本地lua语言版本,安装依赖环境

[root@localhost ~]# lua -v
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
[root@localhost ~]# yum -y install gcc openssl-devel pcre-devel systemd-devel

② 访问官网下载新版本Lua: download 

③ 查看安装方法,并安装

[root@localhost data]# curl -L -R -O https://www.lua.org/ftp/lua-5.4.6.tar.gz
[root@localhost data]# ls
lua-5.4.6.tar.gz
[root@localhost data]# tar zxf lua-5.4.6.tar.gz
[root@localhost data]# ls
lua-5.4.6  lua-5.4.6.tar.gz
[root@localhost data]# cd lua-5.4.6
[root@localhost lua-5.4.6]# make all
[root@localhost lua-5.4.6]# cd ..
[root@localhost data]# ls
lua-5.4.6  lua-5.4.6.tar.gz
[root@localhost data]# ln -s lua-5.4.6 lua
[root@localhost data]# ls
lua  lua-5.4.6  lua-5.4.6.tar.gz

④ 官网下载HAproxy源码包

⑤ 查看说明,安装

[root@localhost data]# cd haproxy-2.4.25/
[root@localhost haproxy-2.4.25]# cat INSTALL
[root@localhost haproxy-2.4.25]# 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/
[root@localhost haproxy-2.4.25]# make install PREFIX=/apps/haproxy
[root@localhost haproxy-2.4.25]# ls /apps/haproxy/
doc  sbin  share
[root@localhost haproxy-2.4.25]# ln -s /apps/haproxy/sbin/haproxy /usr/sbin/
[root@localhost haproxy-2.4.25]# haproxy -v
HAProxy version 2.4.25-6cfe787 2023/12/14 - https://haproxy.org/

⑥ 配置system服务

[root@localhost ~]# 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@localhost ~]# mkdir /etc/haproxy
[root@localhost ~]# mkdir /var/lib/haproxy
[root@localhost ~]# vim /etc/haproxy/haproxy.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

⑧ 设置用户和目录权限,立即启动并自启

[root@localhost ~]# useradd -r -s /sbin/nologin  haproxy
[root@localhost ~]# id haproxy
uid=990(haproxy) gid=985(haproxy) 组=985(haproxy)
[root@localhost ~]# systemctl enable --now haproxy

三、HAproxy配置与调优

HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分

global:全局配置段

进程及安全配置相关的参数
性能调整相关参数调优
Debug参数

proxies:代理配置段(块)

defaults:为frontend, backend, listen提供默认配置
frontend:前端,相当于nginx中的server {},定义虚拟机,监听分配请求
backend:后端,相当于nginx中的upstream {},真实服务器
listen:同时拥有前端和后端配置,配置简单,生产推荐使用 

1. 配置文件详解

配置文件目录:/etc/haproxy/haproxy.cfg 

global                         #全局部分
maxconn 100000                 #最大并发连接数为 100,000
chroot /apps/haproxy           #在启动后将当前目录更改为 /apps/haproxy,锁定运行目录
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin 
#定义用于统计的 UNIX 套接字,并设置了受限访问权限
uid 99                         #设置 HAProxy 运行时的用户和组ID
gid 99
daemon                         #以守护进程的形式在后台运行 HAProxy
#nbproc 4                      #开启4个进程                    
#cpu-map 1 0                   #cpu亲缘性
#cpu-map 2 1
#cpu-map 3 2
#cpu-map 4 3
maxconn n   		           #每个haproxy进程的最大并发连接数
maxsslconn n   		           #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate n   	           #每个进程每秒创建的最大连接数量
spread-checks n 	           #后端server状态check随机提前或延迟百分比时间,建议2-5(20%-50%)之间,默认值0
pidfile /var/lib/haproxy/haproxy.pid  #指定主进程的进程 ID 文件位置
log 127.0.0.1 local3 info             #将日志消息发送到指定地址和 "info" 级别的设施

defaults                       #默认部分
option http-keep-alive         #启用 HTTP keep-alive 以提高性能
option forwardfor              #添加 X-Forwarded-For 头部以转发给服务器的请求
maxconn 100000                 #将最大并发连接数设置为 100,000
mode http                      #为所有后续的 listen 部分设置模式为 HTTP
timeout connect 300000ms       #配置连接、客户端和服务器交互的各种超时时间
timeout client 300000ms
timeout server 300000ms

listen stats                   #监听统计信息部分
mode http                      #为此监听器设置模式为 HTTP
bind 0.0.0.0:9999              #将监听器绑定到端口 9999 上的所有可用 IPv4 地址
stats enable                   #启用此监听器上的统计信息
log global                     #将日志发送到全局日志设置
stats uri /haproxy-status      #设置访问统计信息的 URI
stats auth haadmin:123456      #为访问统计信息设置基本身份验证凭据

listen web_port                #监听 web_port 部分
bind 0.0.0.0:8899              #将监听器绑定到端口 8899 上的所有可用 IPv4 地址
mode http                      #为此监听器设置模式为 HTTP
log global                     #将日志发送到全局日志设置
server web1 127.0.0.1:8080 check inter 3000 fall 2 rise 5  
定义名为 "web1" 的服务器,位于本地 8080 端口,带有健康检查

2. global配置

2.1 状态页

listen stats
 mode http
 bind 0.0.0.0:9999
 stats enable
 log global
 stats uri     /haproxy-status
 stats auth    haadmin:123456

访问http://192.168.190.100:9999/haproxy-status

2.2 指定进程线程个数

进程与线程会有冲突,即如果开启单进程可以多线程,但是开启多进程则无法开启线程。

nbproc    n     #开启的haproxy work 进程数,默认进程数是一个
#nbthread  1    #和多进程 nbproc配置互斥(版本有关,CentOS8的haproxy1.8无此问题),指定每个haproxy进程开启的线程数,默认为每个进程一个线程
#如果同时启用nbproc和nbthread 会出现以下日志的错误,无法启动服务

默认未开启进程:

[root@localhost ~]# pstree -p | grep haproxy
           |-haproxy(4186)---haproxy(4192)---{haproxy}(4193)
             主进程          worker进程        线程

开启进程后:

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg 
nbproc 2                #根据cpu核心数修改
[root@localhost ~]# systemctl restart haproxy.service
[root@localhost ~]# pstree -p | grep haproxy
           |-haproxy(42377)-+-haproxy(42380)
           |                `-haproxy(42381)

2.3 cpu亲缘性

CPU亲缘性是指操作系统和硬件平台提供的一种特性,用于控制进程或线程与特定处理器核心之间的关联关系。这种关联可以影响性能和资源利用情况。

nbproc  2
cpu-map 1  0     #绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
cpu-map 2  1     #绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1  号CPU  ps axo  pid,cmd,psr  |grep haprox

修改前cpu与进程和线程的绑定关系是随机的:

[root@localhost ~]# ps axo  pid,cmd,psr | grep haproxy
 42377 /usr/sbin/haproxy -Ws -f /e   0
 42380 /usr/sbin/haproxy -Ws -f /e   1
 42381 /usr/sbin/haproxy -Ws -f /e   0
 42468 grep --color=auto haproxy     1
[root@localhost ~]# ps axo  pid,cmd,psr | grep haproxy
 42377 /usr/sbin/haproxy -Ws -f /e   1
 42380 /usr/sbin/haproxy -Ws -f /e   1
 42381 /usr/sbin/haproxy -Ws -f /e   0
 42470 grep --color=auto haproxy     0

修改global参数:

root@localhost ~]# vim /etc/haproxy/haproxy.cfg
nbproc 2
cpu-map 1 0
cpu-map 2 1
[root@localhost ~]# systemctl restart haproxy.service

查看进程详情:cpu核心号与进程保持绑定

[root@localhost ~]# ps axo  pid,cmd,psr | grep haproxy
 42517 /usr/sbin/haproxy -Ws -f /e   1
 42522 /usr/sbin/haproxy -Ws -f /e   0
 42523 /usr/sbin/haproxy -Ws -f /e   1
 42525 grep --color=auto haproxy     0
[root@localhost ~]# ps axo  pid,cmd,psr | grep haproxy
 42517 /usr/sbin/haproxy -Ws -f /e   1
 42522 /usr/sbin/haproxy -Ws -f /e   0
 42523 /usr/sbin/haproxy -Ws -f /e   1
 42527 grep --color=auto haproxy     0

2.4 日志

HAproxy本身不记录客户端的访问日志,此外为减少服务器负载,一般生产中HAProxy不记录日志,也可以配置HAProxy利用rsyslog服务记录日志到指定日志文件中。

haproxy默认日志文件路径:/var/log/messages

2.4.1 指定本地路径

① 在配置文件第14行已经定义了 log 127.0.0.1 local3 info 级别

② 修改系统日志管理工具服务的配置文件

[root@localhost ~]# vim /etc/rsyslog.con
 15 $ModLoad imudp        #模块加载指令,用于加载 imudp 模块。imudp 模块是 rsyslog 的输入模块之一,它允许接收通过 UDP 协议发送的日志消息 
 16 $UDPServerRun 514     #配置 rsyslog 服务监听 UDP 端口 514 的指令。默认情况下,rsyslog 会监听 UDP 514 端口以接收通过 UDP 发送的日志消息。
#取消注释15,16行
 74 local3.*                                                /var/log/haproxy.log
#指定配置文件保存路径
[root@localhost ~]# systemctl restart haproxy.service rsyslog.service

③ 查看新路径是否生成日志

[root@localhost ~]# ll /var/log/haproxy.log 
-rw-------. 1 root root 650 3月  10 21:48 /var/log/haproxy.log
2.4.2 指定远端路径

由于haproxy只能做单一的代理服务,建议将日志文件存放在远端日志服务器。

① 修改配置文件

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
log 192.168.190.101 local6 info

② 修改远端服务器系统日志管理工具服务的配置文件

[root@localhost ~]# vim /etc/rsyslog.conf
 15 $ModLoad imudp
 16 $UDPServerRun 514
 74 local6.*                                                /var/log/haproxy.log
[root@localhost ~]# systemctl restart rsyslog.service

③ 重启haproxy服务,查看日志服务器内容

haproxy代理端:
[root@localhost ~]# systemctl restart haproxy.service

日志服务器:
[root@localhost ~]# ll /var/log/haproxy.log
-rw-------. 1 root root 337 3月  10 22:00 /var/log/haproxy.log

2.5 Proxies配置

在HAProxy中,proxies部分通常用于定义服务器池和负载均衡策略。

defaults [<name>] #默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>   #前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。
backend <name>   #后端服务器组,等于nginx的upstream和LVS中的RS服务器
listen  <name>   #将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用

2.5.1 Proxies配置-defaults
option redispatch    			#当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose   			#当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启
option http-keep-alive 			#开启与客户端的会话保持
option forwardfor     			#透传客户端真实IP至后端web服务器
mode http|tcp 					#设置默认工作类型,使用TCP服务器性能更好,减少压力
timeout http-keep-alive 120s 	#session 会话保持超时时间,此时间段内会转发到相同的后端服务器
timeout connect 120s 			#客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms
timeout server 600s 			#客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如果超时,会出现502错误,此值建议设置较大些,访止502错误
timeout client 600s 			#设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout server相同
timeout check   5s   			#对后端服务器的默认检测超时时间
default-server inter 1000 weight 3   #指定后端服务器的默认设置
2.5.2 Proxies配置-listen 简化配置

使用listen替换 frontend和backend的配置方式,可以简化设置,通常只用于TCP协议的应用

#官网业务访问入口
listen WEB_PORT_80    #业务名称
   bind 10.0.0.7:80   #ip加端口
   mode http          #默认 可以不写
   option forwardfor  #透传客户端真实IP至后端web服务器
   server web1   10.0.0.17:8080   check inter 3000 fall 3 rise 5
   server web2   10.0.0.27:8080   check inter 3000 fall 3 rise 5

示例:

① 修改haproxy配置

listen  web_port_80
 bind 192.168.190.100:80
 mode http
 log global
 server sr1  192.168.190.101:80
 server sr1  192.168.190.102:80

② 后端服务器创建web文件

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# echo 7-1 > /var/www/html/index.htm

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# echo 7-2 > /var/www/html/index.html

③ 访问代理端

[root@localhost ~]# curl 192.168.190.100
7-1
[root@localhost ~]# curl 192.168.190.100
7-2
[root@localhost ~]# curl 192.168.190.100
7-1
[root@localhost ~]# curl 192.168.190.100
7-2

加入健康性检测 check

① 加入前,模拟sr1故障,测试访问

[root@localhost ~]# curl 192.168.190.100
<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>
[root@localhost ~]# curl 192.168.190.100
7-2

② 加入健康检测

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
listen  web_port_80
 bind 192.168.190.100:80
 mode http
 log global
 server rs1  192.168.190.101:80 check
 server rs2  192.168.190.102:80 check
[root@localhost ~]# systemctl restart haproxy.service

③ 再次访问

[root@localhost ~]# curl 192.168.190.100
7-2
[root@localhost ~]# curl 192.168.190.100
7-2
[root@localhost ~]# curl 192.168.190.100
7-2
[root@localhost ~]# curl 192.168.190.100

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法---双指针练习-7(三数之和)

三数之和 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;三数之和 2. 讲解算法原理 首先对输入的数组进行排序&#xff0c;以便后续使用双指针法。初始化一个空的二维向量 ret&#xff0c;用于存储结果。使用一个循环遍历数组中的每个元素&#xff…

Spark性能优化指南——高级篇

调优概述 有的时候&#xff0c;我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜&#xff0c;此时Spark作业的性能会比期望差很多。数据倾斜调优&#xff0c;就是使用各种技术方案解决不同类型的数据倾斜问题&#xff0c;以保证Spark作业的性能。 数据倾斜发生时的现…

【Idea】八种Debug模式介绍

1.行断点 在对应的代码行左侧边栏点击鼠标左键&#xff0c;会出现一个红色圆圈&#xff0c;以debug模式执行时当代码运行到此处则会停止&#xff0c;并可以查询相关上下文参数 2.方法断点 在方法左侧点击创建断点,在方法进入时会停止&#xff0c;同时可以右键断点&#xff0c;…

Jenkins Pipeline实现Golang项目的CI/CD

Jenkins Pipeline实现Golang项目的CI/CD 背景 最近新增了一个Golang实现的项目&#xff0c;需要接入到现有的流水线架构中。 流程图 这边流程和之前我写过的一篇《基于Jenkins实现的CI/CD方案》差不多&#xff0c;不一样的是构建现在是手动触发的&#xff0c;没有配置webho…

在 Python 中从键盘读取用户输入

文章目录 如何在 Python 中从键盘读取用户输入input 函数使用input读取键盘输入使用input读取特定类型的数据处理错误从用户输入中读取多个值 getpass 模块使用 PyInputPlus 自动执行用户输入评估总结 如何在 Python 中从键盘读取用户输入 原文《How to Read User Input From t…

Elixir and Pylons 中多态继承和自关联关系的创建

我们知道&#xff0c;在Elixir和Pylons中&#xff0c;多态继承和自关联关系是两个独立的概念&#xff0c;分别用于处理不同的情况。而在Pylons中&#xff0c;多态继承通常由SQLAlchemy提供的 polymorphic 关系来实现。下面分别介绍在Elixir和Pylons中如何创建多态继承和自关联关…

vue之性能优化

1.路由懒加载 所谓路由懒加载&#xff0c;其实就是路由通过import动态引入&#xff0c;而不是在文件最上面一个个全部引入&#xff0c;因为JS执行的时候会优先执行引入的文件&#xff0c;如果一次性引入过多&#xff0c;则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

从零搭建React18.2+ReactRoute6.22+TS5+RTK2.2搭配antd5+antd-style书写All in Js完整体验项目规范

1. 使用CRA创建项目 全局设置npm淘宝镜像源 npm config set registry https://registry.npmmirror.com -g使用最新版create-react-app初始化项目结构 npx create-react-app custom-template --template typescript初始化项目之后在package.json文件中配置使用node>18.0.0…

路径总和00

题目链接 路径总和 题目描述 注意点 树中节点的数目在范围 [0, 5000] 内-1000 < Node.val < 1000 解答思路 要判断是否有一条从根节点开始到叶子节点节点总和为targetSum的路径&#xff0c;首先想到使用深度优先遍历&#xff0c;不断递归找到叶子节点且保存该路径的…

Aigtek电压放大器设计流程是什么样的

电压放大器是电子电路中常见的一种模块&#xff0c;用于放大输入信号的电压幅值。在实际设计过程中&#xff0c;需要考虑多个因素&#xff0c;包括放大器的增益、带宽、稳定性和功耗等。下面将介绍电压放大器设计的一般流程。 确定需求&#xff1a;首先需要明确设计的目标和需求…

CrossOver2024实现Mac/Linux上快速运行Win软件和游戏

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍CrossOver2024这款软件的功能特点。 CrossOver2024是一款功能强大的类虚拟机软件&#xff0c;它的设计目标是在Mac和Linux系统上实现Windows软件和游戏的快速运行。这款软件不仅具有出色的兼容…

Spark Core

Spark Core 一、Spark RDD RDD概述 1.RDD基础 2.RDD源代码描述 3.RDD特性 4.Spark宽窄依赖 RDD创建 在驱动器中创建RDD 1.parallelize 读取外部数据集创建RDD 2.textFile RDD操作 缓存rdd到内存 1.RDD转化操作 2.常见的转化操作 3.RDD行动操作 4.常见的行动操作 Spark…

面试官:MySQL的七种日志

哪七种日志日志&#xff1f; 错误日志&#xff08;error log&#xff09; error log主要记录MySQL在启动、关闭或者运行过程中的错误信息&#xff0c;在MySQL的配置文件my.cnf中&#xff0c; 可以通过log-error/var/log/mysqld.log 执行mysql错误日志的位置。 慢查询日志&a…

kpm算法

这里写自定义目录标题 介绍KMP算法的核心思想KMP算法的步骤例题问题分析图解代码输出结果 介绍 KMP&#xff08;Knuth-Morris-Pratt&#xff09;算法是一种用于在一个文本串&#xff08;text&#xff09;中查找一个模式串&#xff08;pattern&#xff09;的高效字符串匹配算法…

基于java的足球联赛管理系统(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

大数据与云计算

目录 一、大数据时代二、云计算——大数据的计算三、云计算发展现状四、云计算实现机制五、云计算压倒性的成本优势 一、大数据时代 我们先来看看百度关于 “大数据”&#xff08;Big Data&#xff09;的搜索指数。 可以看出&#xff0c;“大数据” 这个词是从2012年才引起关注…

趣学前端 | Taro迁移完成之后,总结了一些踩坑经验

背景 四月份的时候&#xff0c;尝试将老的移动端项目改造成多端。因为老项目使用的React框架&#xff0c;综合考量&#xff0c;保障当前业务开发的进度同时&#xff0c;进行项目迁移&#xff0c;所以最后选择了Taro框架。迁移成本会低一些&#xff0c;上手快一些。 上个月&am…

docker部署在线聊天室平台Fiora

Fiora 是一款开源免费的在线聊天系统 https://github.com/yinxin630/fiora 部署 创建docker网络 docker network create fiora-networkdocker-compose部署 vim docker-compose.yml version: 3 services:fiora_redis:image: rediscontainer_name: fiora_redisrestart: alway…

Linux 地址空间

目录 一、程序地址空间 1、虚拟地址 Makefile新写法 2、进程地址空间分布 3、栈&堆 4、static修饰局部变量 5、字符串常量不可修改 6、虚拟地址与物理地址的联系 二、CPU读取程序全过程 1、形成可执行程序 2、生成虚拟地址 3、程序的启动 4、创建进程 5、地…

11---数字温度 OR 湿度传感器电路设计

视频链接 数字温度or湿度传感器电路设计02_哔哩哔哩_bilibili 数字温度 OR 湿度传感器电路设计 1、温湿度传感器 DHT11 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度-5%RH&#xff0c; 温度-2℃&#xff0c;量程湿度20-90%RH&#xff0c; 温度0~50℃。 D…