HAProxy负载均衡详细解释

news2024/9/23 8:17:00

目录

1、HAProxy的负载均衡

1.1socat工具的使用

1.1.1对于单进程

1.1.2对于多进程处理方法(对haproxy做热处理)

2、Haproxy的算法

2.1静态算法

<1>static-rr

<2>first

2.2动态算法

<1>roundrobin

<2>leastconn

<3>random

2.3其他算法(以下算法取决于hash-type 是否是consistent)

<1>Source

<2>map-base取模法

<3>一致性 hash

<4>uri

<5>url_param

<6>hdr(User-Agent)   #基于客户端请求报文

3、haproxy的状态页

4、haproxy高级算法及配置

4.1基于cookie的会话保持

4.2 IP透传

4.2.1七层透传

4.2.2 四层IP透传

5、ACL配置选项

5.1 ACL匹配模式

5.2 ACL匹配规范:

5.3 ACL实战

ACL示例1-域名匹配

ACL示例2-基于源IP或子网调度访问

ACL示例3-基于源地址的访问控制

 ACL示例4-匹配浏览器类型

ACL示例5-基于文件后缀名实现动静分离

ACL示例6-匹配访问路径实现动静分离

6、HAProxy自定义错误页面

7、MYSQL的负载均衡

8、HAProxy https 实现


1、HAProxy的负载均衡

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。

并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

1.1socat工具的使用

对服务器动态权重和其它状态可以利用 socat工具进行调整,Socat 是 Linux 下的一个多功能的网络工具,名字来由是Socket CAT,相当于netCAT的增强版.Socat 的主要特点就是在两个数据流之间建立双向通道,且支持众多协议和链接方式。如IP、TCP、UDP、IPv6、Socket文件等 

                                                                                                ——动态调整haproxy中的参数

示例:

[root@haproxy ~]# dnf install socat -y

1.1.1对于单进程

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

[root@haproxy ~]# systemctl restart haproxy.service

[root@haproxy ~]# echo "show info"    |   socat stdio /var/lib/haproxy/haproxy.sock

#显示详细信息

[root@haproxy ~l#echo "show servers state"    |  socat stdio   /var/lib/haproxy/haproxy.sock

#显示服务的状态

[root@haproxy ~]# echo "get weight webcluster/web1"  | socat stdio   /var/lib/haproxy/haproxy.sock

#查看web1这个服务的权重值

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

#设置web1这个权重值为2

[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

#开启此服务的进程

[root@haproxy ~]# echo "help" | socat stdio /var/lib/haproxy/stats   #查看socat的帮助信息

1.1.2对于多进程处理方法(对haproxy做热处理)

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

[root@haproxy ~]# systemctl restart haproxy.service

stats进程此时不能使用,但stats1和stats2可以使用

[root@haproxy ~]# echo "help" | socat stdio /var/lib/haproxy/stats

2024/08/08 23:51:38 socat[4832] E connect(5, AF=1 "/var/lib/haproxy/stats", 24): Connection refused

[root@haproxy ~]# echo "show info" | socat stdio /var/lib/haproxy/stats1

Name: HAProxy

Version: 1.8.27-493ce0b

Release_date: 2020/11/06

Nbthread: 1

Nbproc: 2

Process_num: 1

Pid: 4802

Uptime: 0d 0h02m09s

2、Haproxy的算法

Haproxy通过固定参数 balance 指明对后端服务器的调度算法

balance参数可以配置在listen或backend选项中

Haproxy的调度算法分为静态和动态调度算法

有些算法可以根据参数在静态和动态算法中相互转换。

2.1静态算法

静态算法只能重启生效

后端服务器理论上无限

<1>static-rr

基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 wrr

<2>first

根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置,此方式使用较少

不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效

2.2动态算法

基于后端服务器状态进行调度适当调整

新请求将优先调度至当前负载较低的服务器

权重可以在haproxy运行时动态调整无需重启

<1>roundrobin

基于权重的轮询动态调度算法,支持权重的运行时调整,不同于lvs中的轮询模式,

HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个real server,支持对real server权重动态调整,roundrobin为默认调度算法,此算法使用广泛

哪个后端服务器负载小就把请求转发给哪个后端服务器

<2>leastconn

leastconn 加权的最少连接的动态,支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接),比较适合长连接的场景使用,比如:MySQL等场景。

<3>random

在1.9版本开始增加 random的负载平衡算法,其基于随机数作为一致性hash的key,随机负载平衡对于大型服务器场或经常添加或删除服务器非常有用,支持weight的动态调整,weight较大的主机有更大概率获取新请求

2.3其他算法(以下算法取决于hash-type 是否是consistent)

<1>Source

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一个后端web服务器。

此方式当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服务器,默认为静态方式,但是可以通过hash-type选项进行更改

这个算法一般是在不插入Cookie的TCP模式下使用,也可给不支持会话cookie的客户提供最好的会话粘性,适用于session会话保持但不支持cookie和缓存的场景

源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法和一致性hash

<2>map-base取模法

取模法,对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此

请求转发至对应的后端服务器。此方法是静态的,即不支持在线调整权重,不支持慢启动,可实现对后端服务器均衡调度。缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因总权重发生变化而导致调度结果整体改变,hash-type 指定的默认值为此算法

<3>一致性 hash

一致性哈希,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动,hash(o)mod n ,该hash算法是动态的,支持使用 socat等工具进行在线权重调整,支持慢启动

1、key1=hash(source_ip)%(2^32) [0---4294967295]

2、keyA=hash(后端服务器虚拟ip)%(2^32)

3、将key1和keyA都放在hash环上,将用户请求调度到离key1最近的keyA对应的后端服务器

hash环偏斜问题

增加虚拟服务器IP数量,比如:一个后端服务器根据权重为1生成1000个虚拟IP,再hash。而后端服务器权重为2则生成2000的虚拟IP,再进行hash运算,最终在hash环上生成3000个节点,从而解决hash环偏斜问题

<4>uri

基于对用户请求的URI的左半部分或整个uri做hash,再将hash结果对总权重进行取模后,根据最终结果将请求转发到后端指定服务器,适用于后端是缓存服务器场景,默认是静态算法,也可以通过hash-type

指定map-based和consistent,来定义使用取模法还是一致性hash。

Url:网址要找的路径位置

uri不变访问的地址就不变

<5>url_param

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

<6>hdr(User-Agent)   #基于客户端请求报文

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

3、haproxy的状态页

状态页配置项:

           

4、haproxy高级算法及配置

4.1基于cookie的会话保持

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

[root@localhost ~]# curl -b cookie=lhd1 192.168.182.151

webserver1

[root@localhost ~]# curl -b cookie=lhd2 192.168.182.151  #指定到cookie所设定的值

webserver2

[root@localhost ~]#

-b, --cookie <data> Send cookies from string/file

4.2 IP透传

4.2.1七层透传

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

[root@webserver1 ~]# vim /etc/httpd/conf/httpd.conf    #修改apache服务日志

测试:

通过测试可以追踪到是192.168.182.154和192.168.182.153这两个用户端访问的本机服务端

4.2.2 四层IP透传

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

[root@webserver2 ~]# vim /etc/nginx/nginx.conf       #nginx服务修改日志格式

测试:可以追踪到是哪个用户访问了本机

5、ACL配置选项

acl    <aclname>   <criterion>    [flags]       [operator]           [<value>]

acl        名称             匹配规范     匹配模式     具体操作符        操作对象类型

5.1 ACL匹配模式

-i 不区分大小写

-m 使用指定的正则表达式匹配方法

-n 不做DNS解析

-u 禁止acl重名,否则多个同名ACL匹配或关系

5.2 ACL匹配规范:

hdr string,提取在一个HTTP请求报文的首部

hdr([<name> [,<occ>]]):完全匹配字符串,header的指定信息,<occ> 表示在多值中使用的值的出

现次数

hdr_beg([<name> [,<occ>]]):前缀匹配,header中指定匹配内容的begin

hdr_end([<name> [,<occ>]]):后缀匹配,header中指定匹配内容end

hdr_dom([<name> [,<occ>]]):域匹配,header中的dom(host)

hdr_dir([<name> [,<occ>]]):路径匹配,header的uri路径

hdr_len([<name> [,<occ>]]):长度匹配,header的长度匹配

hdr_reg([<name> [,<occ>]]):正则表达式匹配,自定义表达式(regex)模糊匹配

hdr_sub([<name> [,<occ>]]):子串匹配,header中的uri模糊匹配 模糊匹配c 报文中a/b/c也会匹配

 

base : string

#返回第一个主机头和请求的路径部分的连接,该请求从主机名开始,并在问号之前结束,对虚拟主机有用

<scheme>://<user>:<password>@#<host>:<port>/<path>;<params>#?<query>#<frag>

base : exact string match

base_beg : prefix match

base_dir : subdir match

base_dom : domain match

base_end : suffix match

base_len : length match

base_reg : regex match

base_sub : substring match

 

path : string

#提取请求的URL路径,该路径从第一个斜杠开始,并在问号之前结束(无主机部分)

<scheme>://<user>:<password>@<host>:<port>#/<path>;<params>#?<query>#<frag>

path : exact string match

path_beg : prefix match #请求的URL开头,如/static、/images、/img、/css

path_end : suffix match #请求的URL中资源的结尾,如 .gif .png .css .js .jpg .jpeg

path_dom : domain match

path_dir : subdir match

path_len : length match

path_reg : regex match

path_sub : substring match

 

url : string

#提取请求中的整个URL。

url :exact string match

url_beg : prefix match

url_dir : subdir match

url_dom : domain match

url_end : suffix match

url_len : length match

url_reg : regex match

url_sub : substring match

dst           #目标IP

dst_port  #目标PORT

src           #源IP

src_port  #源PORT

5.3 ACL实战

ACL示例1-域名匹配

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

frontend webcluster

    bind *:80

    mode http

    acl test hdr_dom(host) -i www.lhd.com  

    acl test hdr_end(host) -i .com

    use_backend webcluster-host if  test

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@localhost ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.182.151 www.lhd.com www.test.com

[root@localhost ~]# curl www.lhd.com

webserver1

[root@localhost ~]# curl www.test.com

webserver1

ACL示例2-基于源IP或子网调度访问

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

frontend webcluster

    bind *:80

    mode http

    acl ctrl_ip src 192.168.182.154 192.168.182.153    #153和154这两个主机

    use_backend webcluster-host if  ctrl_ip               #如果是这两个主机就访问到web1的后端

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@webserver2 ~]# curl 192.168.182.151      #192.168.182.153主机所访问的结果索引

web1服务上

webserver1

[root@localhost ~]# curl 192.168.182.151        #192.168.182.154主机所访问的结果

webserver1

[root@webserver1 ~]# curl 192.168.182.151      #192.168.182.152主机所访问的结果默认到web2服务上

webserver2

ACL示例3-基于源地址的访问控制

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

frontend webcluster

    bind *:80

    mode http

    acl ctrl_ip src 192.168.182.154 192.168.182.153

    acl test hdr_dom(host) -i www.lhd.com                   test所指的是域名

    http-request deny if  test                                         拒绝访问test

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@webserver2 ~]# curl 192.168.182.151   #在192.168.182.153主机上被索引到默认后端

webserver2

[root@localhost ~]# curl 192.168.182.151       #在192.168.182.154主机上被索引到默认后端

webserver2

[root@localhost ~]# curl www.lhd.com                域名被拒绝访问

<html><body><h1>403 Forbidden</h1>

Request forbidden by administrative rules.

</body></html>

 ACL示例4-匹配浏览器类型

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

frontend webcluster

    bind *:80

    mode http

    acl badwebrowers hdr_sub(User-Agent) -i curl wget

    http-request deny if  badwebrowers

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@localhost ~]# curl 192.168.182.151

<html><body><h1>403 Forbidden</h1>

Request forbidden by administrative rules.

</body></html>

被索引到默认web2主机上

ACL示例5-基于文件后缀名实现动静分离

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

frontend webcluster

    bind *:80

    mode http

    acl static path_end -i .html .jpg .png .css .js

    acl dhcp path_end -i .php

    use_backend webcluster-host if  dhcp           #如果匹配的是dhcp就使用index.php访问到php默认主页上,如果是static就用index.jpg访问到web2服务上

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@webserver1 ~]# echo php 192.168.182.152 > /var/www/html/index.php

[root@webserver2 ~]# echo jpg 192.168.182.153 > /usr/share/nginx/html/index.jpg

[root@localhost ~]# curl 192.168.182.151/index.php

php 192.168.182.152

[root@localhost ~]# curl 192.168.182.151/index.jpg

jpg 192.168.182.153

ACL示例6-匹配访问路径实现动静分离

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

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                #如果是匹配的是php就通过/php路径访问到web1服务上,否则则是访问到web2服务上

    default_backend default-host

backend webcluster-host

    mode http

    server web1 192.168.182.152:80 check

backend default-host

    mode http

    server web2 192.168.182.153:80 check

测试结果:

[root@webserver1 ~]# mkdir -p /var/www/html/php

[root@webserver1 ~]# echo php 192.168.182.152 > /var/www/html/php/index.html

[root@webserver2 ~]# mkdir -p /usr/share/nginx/html/static

[root@webserver2 ~]# echo static 192.168.182.153 > /usr/share/nginx/html/static/index.html

[root@localhost ~]# curl 192.168.182.151/php/

php 192.168.182.152

[root@localhost ~]# curl 192.168.182.151/static/

static 192.168.182.153

6、HAProxy自定义错误页面

先模拟停止两台web服务

[root@haproxy ~]# mkdir -p /etc/haproxy/errorpage

[root@haproxy ~]#

[root@haproxy ~]# cat /usr/share/haproxy/503.http

HTTP/1.0 503 Service Unavailable

Cache-Control: no-cache

Connection: close

Content-Type: text/html

<html><body><h1>503 Service Unavailable</h1>

No server is available to handle this request.

</body></html>

[root@haproxy ~]# cp /usr/share/haproxy/503.http /etc/haproxy/errorpage/bad.http

[root@haproxy ~]# cat /etc/haproxy/errorpage/bad.http

HTTP/1.0 503 Service Unavailable

Cache-Control: no-cache

Connection: close

Content-Type: text/html

<html><body><h1>你是不是没有生么事情</h1>

HAHAHA!!!

</body></html>

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

# 将错误修改

[root@haproxy ~]# systemctl restart haproxy.service

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

#将错误重定向到百度网页

7、MYSQL的负载均衡

[root@webserver1 ~]# vim /etc/my.cnf.d/mariadb-server.cnf

[root@webserver1 ~]# systemctl start mariadb.service

[root@webserver2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf

[root@webserver2 ~]# systemctl start mariadb.service

Webserver1服务端:

MariaDB [mysql]> create user lhd@'%' identified by '123';

Query OK, 0 rows affected (0.000 sec)

MariaDB [mysql]> grant all on *.* to lhd@'%';

Query OK, 0 rows affected (0.000 sec)

Webserver2服务端:

MariaDB [(none)]> create user lhd@'%' identified by '123';

Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> grant all on *.* to lhd@'%';

Query OK, 0 rows affected (0.000 sec)

测试

[root@haproxy ~]# for i in {1..6}; do mysql -ulhd -p123 -h 192.168.182.151 -e "select @@server_id"; done

+-------------+

| @@server_id |

+-------------+

|           1 |

+-------------+

+-------------+

| @@server_id |

+-------------+

|           2 |

+-------------+

+-------------+

| @@server_id |

+-------------+

|           1 |

+-------------+

+-------------+

| @@server_id |

+-------------+

|           2 |

+-------------+

+-------------+

| @@server_id |

+-------------+

|           1 |

+-------------+

+-------------+

| @@server_id |

+-------------+

|           2 |

+-------------+

8、HAProxy https 实现

1、制作证书

[root@haproxy ~]# mkdir -p /etc/haproxy/certs

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

[root@haproxy ~]# ls /etc/haproxy/certs/

lhd.crt  lhd.key

[root@haproxy ~]# cat /etc/haproxy/certs/lhd.crt /etc/haproxy/certs/lhd.key  > /etc/haproxy/certs/lhd.pem

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

#全站加密之后,当访问IP时默认是80端口,会自动转到443端口登陆

测试:

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

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

相关文章

基于SSM的考试管理系统---附源码16535

目录 摘要 Abstract 1 绪论 1.1课题目的及意义 1.2研究背景 1.3研究方法 1.4论文结构与章节安排 2 考试管理系统的设计与实现系统分析 2.1 可行性分析 2.2 系统功能分析 2.3 系统用例分析 2.4本章小结 3 考试管理系统的设计与实现总体设计 3.1 系统架构设计 3.2 …

C语言:基于单链表实现通讯录项目

前言 之前我们用顺序表实现了通讯录&#xff0c;这次我们使用单链表实现。我们定义五个文件&#xff0c; SingleLinkedList.h SingleLinkedList.c Contact.h Contact.c test.c SingleLinkedList.h 是包含了单链表的结构&#xff0c;及各类库文件声明&#xff0c;各个单链表接…

优思学院|六西格玛绿带重不重要?绿带的报考条件是什么?

在最原始的六西格玛管理之中&#xff0c;六西格玛的最主要角色就只有六西格玛黑带&#xff0c;这是Mikel Harry所命名的&#xff0c;意思是一个对六西格玛方法十分熟练的人。 然而&#xff0c;六西格玛黑带也要靠团队才能完成工作&#xff0c;如果团队中只有黑带了解六西格玛流…

AcWing算法提高课笔记——数字三角形

本文给出了几道数字三角形模型的题解。 数字三角形模型通常给定一个矩阵&#xff0c;从矩阵的左上角走到右下角&#xff0c;每次只能向右走或者向下走&#xff0c;求最大值或者最小值。 这种问题可以用f[i, j]来表示从[1, 1]走到[i, j]处的Max\Min&#xff0c;有状态转移方程…

minikube 实践练习4 - 滚动更新

1. 应用版本更新 #查看image kubectl describe pods#设置应用的image为新版本 v1 -> v2 kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcampdocker.io/jocatalin/kubernetes-bootcamp:v2#验证更新结果 export NODE_PORT"$(kubectl get services/…

在Moodle中集成ONLYOFFICE:学习管理+文档功能全面指南

一、引言 随着在线教育的发展&#xff0c;Moodle作为领先的开源学习管理系统&#xff0c;其灵活性和可扩展性为教育工作者提供了丰富的功能。而ONLYOFFICE文档服务器的加入&#xff0c;更是为Moodle用户带来了无缝的文档处理与协作体验。本文将详细指导您如何在Moodle中深度集成…

【数据结构】二叉树篇

文章目录 1.二叉树链式结构功能的实现1.1 前置说明1.2 二叉树的遍历1.2.1 前序、中序以及后序遍历1.2.2 层序遍历 1.3 节点个数以及高度差1.3.1 二叉树的节点个数1.3.2 二叉树叶子节点个数1.3.3 二叉树第K层节点个数1.3.4 二叉树树查找值为x的节点1.3.5 二叉树的销毁 1.4 代码整…

RAG 工具和框架介绍: Haystack、 LangChain 和 LlamaIndex

Haystack、 LangChain 和 LlamaIndex&#xff0c;以及这些工具是如何让我们轻松地构建 RAG 应用程序的&#xff1f; 我们将重点关注以下内容&#xff1a; HaystackLangChainLlamaIndex 增强LLM 那么&#xff0c;为什么会有这些工具存在呢&#xff1f;如你所知&#xff0c;C…

LVS学习与练习

LVS (Linux Virtual Server) 是一种高性能的负载均衡解决方案&#xff0c;它基于 Linux 内核实现。LVS 可以用来构建高可用性和高性能的 Web 服务器集群。LVS 支持多种负载均衡算法和模式&#xff0c;可以有效地分发网络请求到多台后端服务器上。 LVS 的主要组成部分 1. Direc…

InternLM+LlamaIndex RAG 实践

本期实战训练营介绍了使用书生葡语的InternLM和LlamaIndex框架进行RAG项目的实践。内容分为三个部分&#xff1a;回顾InternLM的发展历程&#xff0c;介绍RAG的基本概念和应用&#xff0c;以及实践一个RAG项目。RAG技术结合了检索与生成&#xff0c;通过外部知识库增强大模型的…

开源Docker图形化管理工具DockerUI

DockerUI 是一个 Web 用户界面&#xff0c;它允许用户通过浏览器与 Docker 守护进程进行交互&#xff0c;而无需在命令行中执行 Docker 命令。它为 Docker 容器、镜像、网络等提供了直观的图形界面管理。然而&#xff0c;需要注意的是&#xff0c;DockerUI 已经不再是最流行的 …

领先数年!这款ERP系统已成制造业趋势!

企业数字化转型的趋势不可阻挡&#xff0c;在全球化竞争的背景下&#xff0c;市场变化迅速&#xff0c;客户需求日益多样化&#xff0c;企业需要更加敏捷地响应市场变化&#xff0c;提高生产效率和产品质量&#xff0c;以满足客户的需求。 而在这一转型过程中&#xff0c;ERP …

怎么直接在PDF上修改内容?随心编辑PDF内容

PDF(Portable Document Format)作为一种专用于阅读而非编辑的文档格式&#xff0c;其设计的核心目的是保持文档格式的一致性&#xff0c;确保文档在不同平台和设备上都能以相同的布局和格式呈现。然而&#xff0c;在实际工作和生活中&#xff0c;我们经常需要对PDF文档进行编辑…

Python编写Word文档

目录 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 5. 换页 6. 插入表格 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体16大小 from docx.shared import Pt from docx.enum.text i…

AT360-6T杭州中科微授时模块场景应用

AT360-6T是一款高性能多系统卫星定位授时模块&#xff0c;基于自主研发的北斗多系统 SOC 芯片&#xff0c;可以同时接收中国的 BDS(北斗二号和北斗三号)、美国的 GPS、俄罗斯的 GLONASS、欧盟的 GALILEO 和日本的 QZSS 等多个卫星导航系统的 GNSS 信号来实现多系统联合定位授时…

实用篇 | 服务器查看监听端口的程序

对于一些程序员最痛苦的是接手一些“二手系统“&#xff0c; 由于年久失修&#xff0c; 加上裁员离职&#xff0c;系统文档不完善等原因&#xff0c; 只留下服务器配置和代码。 接手人&#xff0c;只能对着这些仅存的代码和服务器硬刚&#xff0c; 对服务器硬刚的第一步&#x…

高盛推荐包装食品行业两大首选股票

市场动荡与食品行业的防御性 近期市场的剧烈波动、7月份疲弱的就业报告以及对美联储可能降息的预期&#xff0c;引发了人们对经济衰退的担忧。尽管市场在本周有所反弹&#xff0c;投资者们开始调整策略&#xff0c;寻求更具防御性的投资方向。在这种背景下&#xff0c;包装食品…

Vue2移动端(H5项目)项目基于vant实现select单选(支持搜索、回显、自定义下拉label展示功能)

一 最终效果 二、参数配置 1、代码示例&#xff1a; <t-selectv-model"formData.materialNo"valueKey"materialNo"showLabel"materialName"labelKey"label"label"判定品级"input-align"right"placeholder&qu…

Google Earth Engine(GEE)——1986-2021年黄河入海口区域的逐年影像展示案例分析,并加载可以分享的URL链接

函数: size() Returns the number of elements in the collection. 返回集合中元素的数量。 Arguments: this:collection (FeatureCollection): The collection to count. Returns: Integer 融合影像可以一个接一个进行融合 merge(collection2) Merges two image co…

CAXA快捷键

1.左下角处选择导航&#xff0c;快捷键F6可以切换 2.自定义快捷键 鼠标右键点击菜单栏空白处 点击自定义&#xff0c;便可以修改快捷键