当前位置: 首页 > news >正文

LVS原理及实例

目录

LVS原理

LVS概念

lvs集群的类型

lvs-nat

解释

传输过程

lvs-dr

解释

传输过程 

特点

lvs-tun

 LVS(Linux Virtual Server)常见的调度算法

防火墙标记(Firewall Marking)结合轮询调度

实战案例

lvs的nat模式配置

准备工作

配置过程

测试结果

lvs的dr模式综合实践

虚拟机配置(准备五个虚拟机)

​编辑​编辑​编辑​编辑​编辑配置过程

测试结果

lvs的防火墙标记解决轮询调度问题

错误示范

正确示范

​编辑测试结果


LVS原理

LVS(Linux Virtual Server,Linux 虚拟服务器)的基本原理是通过将多个真实服务器组合成一个虚拟服务器集群,实现对客户端请求的高效负载均衡和高可用性服务。 其主要工作流程如下:

1. 客户端向虚拟服务器(VIP)发送请求。

2. 负载均衡器(通常称为 Director)接收到请求。

3. Director 根据预先配置的负载均衡算法(如轮询、加权轮询、最少连接等)选择一个合适的真实服务器(Real Server)。

4. Director 将客户端请求转发到选定的 Real Server。

5. Real Server 处理请求,并将响应直接返回给客户端。

为了实现请求的转发,LVS 支持多种工作模式,如 NAT(Network Address Translation,网络地址转换)模式、TUN(IP Tunneling,IP 隧道)模式和 DR(Direct Routing,直接路由)模式。

在 NAT 模式中,Director 不仅负责调度,还对请求和响应数据包进行网络地址转换。

在 TUN 模式中,Director 将请求数据包封装后发送给 Real Server,Real Server 处理后直接将响应返回给客户端。

在 DR 模式中,Director 根据算法选择 Real Server 后,将请求的 MAC 地址修改为选定 Real Server 的 MAC 地址,然后通过局域网将请求直接发送给 Real Server,Real Server 处理后直接响应给客户端。

通过 LVS 的负载均衡机制,可以提高服务器集群的整体性能、可扩展性和可用性,确保客户端能够获得快速和可靠的服务。

LVS概念

名称意义
VS(Virtual Server)/虚拟服务器负责调度,将客户端的请求分配到合适的后端服务器
RS(Real Server)/真实服务器负责真正提供服务,处理来自 VS 调度分配的请求
CIP(Client IP)/客户端主机IP地址客户端用户计算机请求集群服务器的IP地址,该地址用作发送给集群的请求的源IP地址
VIP(Virtual serve IP)/虚拟IP地址Director用于向客户端计算机提供服务的IP地址
DIP(Director IP)/Director的IP地址Director用于连接内外网网络的IP地址
RIP(Real server IP)/真实IP地址在集群下面节点上使用的IP地址

访问过程:CIP<-->VIP == DIP<-->RIP

lvs集群的类型

(此处我们详细讲解lvs-nat和lvs-br)

lvs-nat

解释

LVS(Linux Virtual Server)的网络地址转换(NAT)模式是一种在网络层(第四层)实现负载均衡的方法。在NAT模式中,Director Server(DS)充当所有服务器节点的网关,既是客户端请求的入口,也是Real Server响应客户端的出口。优点是可以进行端口转换,缺点是存在性能瓶颈。它主要工作在OSI模型的第三层(网络层)和第四层(传输层)。NAT允许内部网络使用私有IP地址,并通过公共IP地址进行外部通信。

传输过程

1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)

2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口

3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)

4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)

5.VS服务器把修改过报文的响应数据包回传给客户端 6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发 因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。

lvs-dr

解释

LVS(Linux Virtual Server)的 DR(Direct Routing,直接路由)模式,这种模式适用于非ARP设备的Real Server,Real Server网络是局域网,同样支持大量Real Server(高达100个),Real Server有自己的路由器。优点是性能最佳,缺点是不支持跨网段和端口转换。工作在数据链路层。在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip

传输过程 

1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC

2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端 的MAC+VIP+RS1的MAC

3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的 MAC

特点

1.Director和各RS都配置有VIP

2.确保前端路由器将目标IP为VIP的请求报文发往Director

3.在前端网关做静态绑定VIP和Director的MAC地址

lvs-tun

LVS(Linux Virtual Server)的 TUN(IP Tunneling,IP 隧道)模式是另一种负载均衡模式。

在 TUN 模式中,Director 接收到客户端请求后,根据负载均衡算法选择一台合适的 Real Server。然后,Director 将请求数据包重新封装在一个新的 IP 数据包中,并将其发送给所选的 Real Server。

Real Server 接收到数据包后,解封装得到原始的请求数据包,并进行处理。处理完成后,Real Server 直接将响应数据包返回给客户端,而不经过 Director。

TUN 模式的优点是可以跨越不同的网络区域对服务器进行负载均衡,Real Server 可以位于不同的物理网络。但它也有一些缺点,比如需要所有服务器支持 IP 隧道功能,会增加一定的系统开销。

 LVS(Linux Virtual Server)常见的调度算法

静态调度算法RR,WRR,DH,SH
动态调度算法LC,WLC,LBLC,LBLCR
静态调度算法

1. 轮询(Round Robin,RR):将请求依次分配给各个真实服务器,依次循环。

2. 加权轮询(Weighted Round Robin,WRR):给每个真实服务器设置一个权重,根据权重的比例将请求分配给服务器。权重越高,分配到的请求越多。

3.目标地址散列(Destination Hashing,  DH):根据请求的目标 IP 地址进行哈希运算,将请求分配到固定的服务器。

4.源地址散列(Source Hashing,  SH):根据请求的源 IP 地址进行哈希运算,将请求分配到固定的服务器。

动态调度算法

1. 最少连接(Least Connections,LC):将新的请求分配给当前连接数最少的真实服务器。

2. 加权最少连接(Weighted Least Connections,WLC):为真实服务器设置权重,综合考虑服务器的权重和当前连接数来分配请求。

3. 基于局部性的最少连接(Locality-Based Least Connections,LBLC):主要考虑请求的目标 IP 地址,优先将请求分配给同一 IP 地址对应的真实服务器。

4. 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR):结合了 LBLC 和复制功能,对于目标 IP 地址相同的请求,如果对应的真实服务器没有活动连接,则可以在有活动连接的真实服务器中选择一个,并复制该连接。

防火墙标记(Firewall Marking)结合轮询调度

在 LVS 环境中,使用防火墙标记(Firewall Marking)结合轮询调度可以实现更灵活和定制化的负载均衡策略。

通过防火墙标记,可以为不同的连接或数据包打上特定的标记。然后,在 LVS 的配置中,可以根据这些标记来进行调度决策,而不仅仅依赖于默认的轮询方式。

实战案例

lvs的nat模式配置

准备工作

lvs主机需要两个网络适配器,其中一个为NAT模式,另外一个为仅主机模式,还需要两个server主机,一个为server1还有一个为server2,都为仅主机模式

配置过程

配置ip

lvs主机

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual


 server1主机

[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual


server2主机配置

[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual


在lvs主机中配置
lvs中打开内核路由功能,ip_forward = 1通常表示启用了 IP 转发功能,使网络适配器分别为nat和仅主机之间连通

vim /etc/sysctl.conf            #在最后一行添加
net.ipv4.ip_forwaed = 1                #启用了 IP 转发功能sysctl -p             #使配置生效


下载ipvsadm

yum install ipvsadm -y


配置规则

ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -mipvsadm -Ln
watch -n 1 ipvsadm -Ln --rate    #也可以使用监控命令来看


在server主机配置

yum install httpd -y        #两个都要下载httpdecho webserver1-192.168.0.10 > /var/www/html/index.html        #server1中配置
ystemctl restart httpdecho webserver1-192.168.0.10 > /var/www/html/index.html         #server2中配置
systemctl restart httpd

测试结果

lvs的dr模式综合实践


 

nodeipvip角色模式
client172.25.254.200客户端NAT
router

192.168.0.100

172.25.254.100

路由器NAT,仅主机
lvs192.168.0.50lo:192.168.0.200/32调度器仅主机
webserver1192.168.0.10lo:192.168.0.200/32真实服务器仅主机
webserver2192.168.0.20lo:192.168.0.200/32真实服务器仅主机

虚拟机配置(准备五个虚拟机)


配置过程

配置ip

配置client主机

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth0


配置router主机

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=192.168.0.100/24
method=manual[root@router ~]# nmcli connection reload
[root@router ~]# nmcli connection up eth0
[root@router ~]# nmcli connection up eth1

配置lvs主机(vip使用环回来创建)

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual[root@lvs ~]# nmcli connection reload
[root@lvs ~]# nmcli connection up eth0[root@lvs ~]# ip addr add dev lo 192.168.0.200/32

配置server1主机(vip使用环回来创建)

[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual[root@server1 ~]# nmcli connection reload
[root@server1 ~]# nmcli connection up eth0[root@server1 ~]# ip addr add dev lo 192.168.0.200/32

配置server2主机(vip使用环回来创建)

[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual[root@server2 ~]# nmcli connection reload
[root@server2 ~]# nmcli connection up eth0[root@server2 ~]# ip addr add dev lo 192.168.0.200/32


修改Linux内核参数。

server1和server2上面都要做

(rs主机中使vip不对外响应,将RS上的VIP配置为lo接口的别名,限制Linux仅对对应接口的ARP请求做响应;)

限制响应级别 :arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别 :arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 


配置ipvsadm
在lvs主机中进行配置 IP 虚拟服务器

yum install ipvsadm -yipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2


启用 IP 转发功能
在router主机进行配置

(设置持久连接,保持客户端与后端服务器的连接关系)

vim /etc/sysctl.conf            #在最后一行添加
net.ipv4.ip_forward = 1ipvsadm -p


 配置web服务

yum install httpd -yecho 11111111 > /var/www/html/index.html        #server1中配置
ystemctl restart httpdecho 22222222 > /var/www/html/index.html         #server2中配置
systemctl restart httpd

测试结果

for i in {1..10}; do curl 192.168.0.200; done

lvs的防火墙标记解决轮询调度问题

错误示范

ipvsadm -A -t 192.168.0.200:80 -s rr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:80 -g

错误结果

[root@lvs ~]# curl  -k https://192.168.0.200;curl 192.168.0.200
1111111
1111111


正确示范

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记,

--set-mark value

其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度

#在lvs主机打标记:

#并且lvs主机基于标记定义集群服务:

iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 66ipvsadm -A -f 66 -s rr    #设定调度规则
ipvsadm  -a -f 66 -r 192.168.0.10 -g
ipvsadm  -a -f 66 -r 192.168.0.20 -g


测试结果

相关文章:

LVS原理及实例

目录 LVS原理 LVS概念 lvs集群的类型 lvs-nat 解释 传输过程 lvs-dr 解释 传输过程 特点 lvs-tun LVS&#xff08;Linux Virtual Server&#xff09;常见的调度算法 防火墙标记&#xff08;Firewall Marking&#xff09;结合轮询调度 实战案例 lvs的nat模式配置 …...

Spring统一功能处理:拦截器、响应与异常的统一管理

目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核⼼功能之⼀&#xff0c;主要⽤来拦截⽤⼾的请求&#xff0c;在指定⽅法前后&#xff0c;根据业务需要执⾏预先设定的代码。 也就是说&#xff0c;允许开发⼈员提前预定义⼀些逻辑…...

深入理解小程序的渲染机制与性能优化策略

一、小程序的渲染机制 小程序的渲染机制主要由两部分组成&#xff1a;渲染层和逻辑层。渲染层负责页面的渲染&#xff0c;逻辑层负责处理业务逻辑和数据处理。两者通过一个安全的、高效的通信机制进行数据传输和事件通知。 渲染层&#xff1a;在渲染层&#xff0c;WXML 模板会…...

Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)

上次讲解了多线程第一部分&#xff1a;Linux&#xff1a;多线程&#xff08;一.Linux线程概念、线程控制——创建、等待、退出、分离&#xff0c;封装一下线程&#xff09; 文章目录 1.理解Linux下线程——理解tid2. Linux线程互斥2.1相关概念2.2引入问题分析问题解决思路 2.3L…...

Pandas中`str`对象解析与应用实例

在数据科学领域&#xff0c;字符串操作是数据清洗和处理中不可或缺的一部分。Pandas的str对象为我们提供了一个强大而灵活的字符串操作方法集。本文将深入探讨str对象的各种应用&#xff0c;并通过代码示例和输出展示如何有效地处理字符串数据。 关键词 Pandas, 字符串操作, …...

C语言典型例题29

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.6 设圆半径r1.5&#xff0c;圆柱高h3&#xff0c;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 scanf输入结果&#xff0c;输出计算结果&#xff0c;输出时要有文字说明&#xff0c;取小数点后两位数…...

Docker 常规安装简介

Docker常规安装简介 欢迎关注我的B站&#xff1a;https://space.bilibili.com/379384819 1. 安装mysql 1.1 docker hub上面查找mysql镜像 网址&#xff1a; https://hub.docker.com/_/mysql 1.2 从docker hub上&#xff08;阿里云加速器&#xff09;拉取mysql镜像到本地标…...

理解张量拼接(torch.cat)

拼接 维度顺序&#xff1a;对于 3D 张量&#xff0c;通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量&#xff0c;理解 torch.cat 的 dim 参数确实变得更加抽象&#xff0c;但原理是相同的。让我们通过一…...

指针基础知识(笔记)

文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…...

[Python学习日记-3] 编程前选择一个好用的编程工具

[Python学习日记-3] 编程前选择一个好用的编程工具 简介 PyCharm IDE的安装 PyCharm IDE安装后的一些常规使用 简介 在踏上 Python 编程的精彩旅程之前&#xff0c;选择一款得心应手的编程工具无疑是至关重要的一步。这就如同战士在出征前精心挑选趁手的武器&#xff0c;它将…...

智能化的Facebook未来:AI如何重塑社交网络的面貌?

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;社交网络的面貌正在经历深刻的变革。Facebook&#xff08;现Meta Platforms&#xff09;作为全球最大的社交媒体平台之一&#xff0c;正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…...

安全启动的原理

安全启动&#xff08;Secure Boot&#xff09;是一种用于确保设备只运行经过认证的软件的安全机制。其核心原理和步骤如下&#xff1a; 1. **硬件信任根&#xff08;Root of Trust, RoT&#xff09;**&#xff1a; - 安全启动过程始于硬件信任根&#xff0c;通常是设备上的…...

【ML】pre-train model 是什么如何微调它,如何预训练

【ML】pre-train model 是什么如何微调它&#xff0c;如何预训练 0. 预训练模型&#xff08;Pre-trained Model&#xff09;0.1 预训练模型的预训练过程0.2 如何微调预训练模型0.3 总结 1. Contextualized word Embedding2. 怎么 让 bert 模型变小3. 如何微调模型 0. 预训练模型…...

leetcode代码练习——Java的数据结构(具体使用)

注&#xff1a;Java中所有的泛型必须是引用类型 如<Integer>而不是<int> java提供的数学方法&#xff1a; 求最大值Math.max(10,15)&#xff0c;最小值Math.min(10,15) 看取值范围&#xff1a; int范围:-2^31-2^31-1 double范围:-2^63-2^63-1 long范围:-2^63-2…...

sqlserver导出数据脚本

文章目录 sqlserver导出数据脚本任务-生成脚本 sqlserver导出数据脚本 任务-生成脚本...

html+css 实现hover中间展开背景

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目…...

Java 怎么获取支付宝Open ID

在Java中获取支付宝用户的OpenID&#xff0c;通常是通过支付宝的开放平台API来完成的。OpenID是支付宝用于唯一标识一个支付宝用户的字符串&#xff0c;它在OAuth授权流程中被用来获取用户的身份和权限。 下面我将给出一个基于Java使用Spring Boot框架和支付宝开放平台SDK来获…...

Web-server日志分析命令

https://gist.github.com/hvelarde/ceac345c662429447959625e6feb2b47 通过状态码获取请求总数 awk {print $9} /var/log/apache2/access.log | sort | uniq -c | sort –rn按照IP的请求数量排序 awk {print $1} /var/log/apache2/access.log | sort | uniq -c | sort -rn |…...

Typora的markdown笔记使用说明

个人感觉Typora是一款很适合记录编程学习的软件 目录 个人感觉Typora是一款很适合记录编程学习的软件 一、标题 二、段落 1、换行 2、分割线 三、文字显示 1、字体 2、上下标 四、列表 1、无序列表 2、有序列表 3、任务列表 五、区块显示 六、代码显示 1、行内…...

前端如何做单元测试? 看这篇就入门了

前言 对于现在的前端工程&#xff0c;一个标准完整的项目&#xff0c;通常情况单元测试是非常必要的。但很多时候我们只是完成了项目而忽略了项目测试。我认为其中一个很大的原因是很多人对单元测试认知不够&#xff0c;因此我写了这边文章&#xff0c;一方面期望通过这篇文章…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...