LVS+Keepalived高可用高性能负载实战
高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群 的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。 当应用程序出现故障或者系统硬件、网络出现故障时,应用可以自动、快速从一个节点切换到另一个节 点,从而保证应用持续、不间断地对外提供服务,这就是高可用集群实现的功能
我们常说的双机热备、双机互备、多机互备等都属于高可用集群的范畴,这类集群一般都由两个或两个 以上节点组成。典型的双机热备结构如下图所示 :
本次实验通过配置keepalived的心跳检测和健康检查达到LVS集群高可用的目的
本次实战用到的环境:
系统Linux Rocky8.10×4台,VIP:192.168.118.110,Master:192.168.118.128,Backup:192.168.118.130,web服务:192.168.118.131/129(nginx)
1.另外额外添加一块网卡用于主备之间的的心跳检测,模拟用网线直连的效果。
2.本实验会试着用到两种不同的心跳检测方式和健康检测方式
环境搭建
主备服务器上
本实验前端会用到keepalived和ipvsadm软件:
#查看本地相关包的信息
[root@localhost ~]# yum list keepalived
Available Packages
keepalived.x86_64 2.1.5-10.el8_10 appstream
[root@localhost ~]# yum list ipvsadm
Available Packages
ipvsadm.x86_64 1.31-1.el8 @appstream#安装
yum install keepalived ipvsadm -y
由于前端的两台主备服务器需要多用到一块网卡用于心跳检测:
新增的网卡不能也是NAT模式的,主备上新增的网卡建议是仅主机模式
然后进入终端中,添加该网卡和设置IP地址
#输入ifconfig命令发现新增加了一块网卡
[root@localhost ~]# ifconfig
...
ens224: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.40.128 netmask 255.255.255.0 broadcast 192.168.40.255
inet6 fe80::41fd:2148:d284:d782 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:d9:b7:55 txqueuelen 1000 (Ethernet)
RX packets 2 bytes 128 (128.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21 bytes 1346 (1.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
...
注意:配置主备上用于心跳检测的IP应该属于同一网段,且必须要要指明其网段为24网段(要不然不能互通)
#Master server
nmcli dev con ens224
nmcli con mod ens224 ipv4.method manual ipv4.ipaddresses 192.168.40.128/24
nmcli con up ens224
#backup server
nmcli dev con ens224
nmcli con mod ens224 ipv4.method manual ipv4.ipaddresses 192.168.40.130/24
nmcli con up ens224
测试能否ping通
[root@localhost ~]# ping 192.168.40.130
PING 192.168.40.130 (192.168.40.130) 56(84) bytes of data.
64 bytes from 192.168.40.130: icmp_seq=1 ttl=64 time=1.12 ms
64 bytes from 192.168.40.130: icmp_seq=2 ttl=64 time=1.04 ms
^C
--- 192.168.40.130 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 1.041/1.081/1.121/0.040 ms
配置了两块网卡,我们就还需要开启路由转发功能
#永久配置
vim /etc/sysctl.conf
net.ipv4.ip_forward=1sysctl -p
#零时配置
sysctl net.ipv4.ip_forward=1
sysctl -p
web端配置
测试页面:
yum install nginx -ysystemctl stop firewalld
echo "This is a test page which from IP:$(hostname -I)" > /usr/share/nginx/html/index.html
systemctl restart nginx
LVS后端是需要关闭arp功能的,因为在DR模式下客户端给的请求会通过DS通过负载均衡算法之后给到RS服务器,此时数据包中的源IP不动,修改目标IP为RIP。RS服务收到处理完数据之后返直接返回给客户端,将之前收到的数据包源IP改为目标IP,将VIP设置为现在的源IP。所以RS是能给客户端通信的,为了避免客户端对VIP的arp响应,需要关闭对VIP的arp功能
建议使用脚本的形式,便于控制:下面的逻辑就是通过创建一个锁来判断是否关闭的arp功能,关闭则为启用了LVSRS功能。读者只需要修改VIP地址和DevName即可
#!/bin/sh
#chkconfig: - 28 72
#description: Initialise the Linux Virtual Server for DR
#Provides: ipvsadm
#Required-Start: $local_fs $network $named
#Required-Stop: $local_fs $network $remote_fs
LOCK=/var/local/ipvsadm.lock
VIP=192.168.118.110
DevName=ens160
. /etc/rc.d/init.d/functions
start(){PID=$(ifconfig | grep lo:10 | wc -l)if [ $PID -ne 0 ]thenecho "The LVS_DR_RIP Server is already running!"else/sbin/ifconfig lo:10 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:10echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/${DevName}/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/${DevName}/arp_announce/bin/touch $LOCKecho "Starting LVS-DR-RIP Server is ok!"fi
}stop(){sbin/route del -host $VIP dev lo:10/sbin/ifconfig lo:10 down >/dev/nullecho "0" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "0" >/proc/sys/net/ipv4/conf/${DevName}/arp_ignoreecho "0" >/proc/sys/net/ipv4/conf/${DevName}/arp_announcerm -rf $LOCKecho "stopping LVS-DR-RIP server is ok !"
}status() {if [ -e $LOCK ];thenecho "The LVS-DR-RIP Server is already running !"elseecho "The LVS-DR-RIP Server is not running !"fi}
case "$1" instart)start;;stop)stop;;restart)stopstart;;status)status;;*)echo "Usage: $1 {start|stop|restart|status}"exit 1esacexit 0
以上基本的前后端就配置完成,接下来,配置keepalived
keepalived配置
注意关闭防火墙:systemctl stop firewalld或者添加放行网卡到trusted区域,否则会出现脑裂现象
firewall-cmd --permanent --add-interface=ens224 --zone=trusted
firewall-cmd --reload
默认配置文件地址:/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {router_id LVS_1
}vrrp_instance VI_1 {#VIP实例state MASTER#状态为masterinterface ens160#DIP的网卡lvs_sync_daemon_interface ens224#以守护进程进行的心跳检测的网卡virtual_router_id 51#同一个主备的IP需要相同priority 100#优先级advert_int 1#健康检擦间隔时间1sauthentication {#认证信息auth_type PASSauth_pass 1111}virtual_ipaddress {#VIP地址,会绑定到上面的interface参数的网卡上192.168.118.110}
}
virtual_server 192.168.118.110 80 {#虚拟IP绑定后端信息及本身的设置delay_loop 6#延迟6slb_algo rr#负载均衡算法lb_kind DR#模式为LVS_DR#persistence_timeout 50protocol TCP#协议为TCP检测real_server 192.168.118.131 80 {#VIP的参数weight 1#权重为1TCP_CHECK {#健康检测的配置信息connect_timeout 3#超时时间retry 3#错误次数为3则去掉该后端IPdelay_before_retry 3#延时时间3sconnect_port 80#端口为80}}real_server 192.168.118.129 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}
}
这里配置的是基于抢占的基于TCP的健康检测,如果想要配置非抢占的只需要将主从都修改state BACKUP,额外再添加上nopreempt这一行内容即可
backup只需修改state和router_id标识以及优先级(小于master)
这里的心跳检测还有一种方法,可以不用新增一块网卡:
mcast_src_ip DIP
将原来的lvs_sync_daemon_interface ens224注释掉,改为上面内容,会基于本身的DIP地址进行心跳检测
效果检测
#master server
[root@localhost ~]# [root@localhost ~]# ip a | grep 110inet 192.168.118.110/32 scope global ens160[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.118.110:80 rr-> 192.168.118.129:80 Route 1 0 0-> 192.168.118.131:80 Route 1 0 0
同时监控ipvsadm和日志信息,试着断开后端其中一个web服务
#master server新开两个终端
watch ipvsadm -Ln
tail -f /var/log/messages
大约9s之后就会从ipvsadm中去掉这条路由,启用的话大约会3s左右(时间与我们配置的重复次数和delay时间有关)
新开一个终端
for ((i=1;1<=6;i++)); do curl 192.168.118.110; done
改进
以上配置确实可以通过健康检擦来判断后端web服务是否tcp/80开放,但是当nginx服务本身出问题的时候,就没法及时的处理了,比如404。所以我们需要将tcp健康检擦改为HTTP检擦,而且不应该简单的通过状态码来判断(比如300是重定向)。这里还介绍几种健康检擦方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK 几种健康检测方式
TCP_CHECK:工作在第4层,keepalived向后端服务器发起一个tcp连接请求,如果后端服务器没有响应或 超时,那么这个后端将从服务器池中移除。
HTTP_GET:工作在第5层,向指定的URL执行http请求,将得到的结果用md5加密并与指定的md5值比较看是 否匹配,不匹配则从服务器池中移除;此外还可以指定http返回码来判断检测是否成功。
HTTP_GET可以指定 多个URL用于检测,这个一台服务器有多个虚拟主机的情况下比较好用。 SSL_GET:跟上面的HTTP_GET相似,不同的只是用SSL连接 MISC_CHECK:用脚本来检测,脚本如果带有参数,需将脚本和参数放入双引号内。脚本的返回值需为: 0) 检测成功 1) 检测失败,将从服务器池中移除 2-255)检测成功;如果有设置misc_dynamic,权重自动调整为 退出码-2,如退出码为200, 权重自动调整为198=200-2。
SMTP_CHECK:用来检测邮件服务的smtp的
这里使用脚本检测的方式:
使用到工具nmap扫描:yum install nmap -y
在/etc/keepalived目录下创建这个脚本
脚本内容:
#!/bin/bash# Check for correct number of parameters (host and port)
if [ $# -ne 2 ]; thenecho "Error: Usage: $0 <host> <port>"exit 1
fi
host="$1"
port="$2"
# Perform the nmap scan and parse the result
nmap_result=$(nmap -p "$port" "$host" | grep "$2\/tcp" | awk '{print $2}'# Check the result
if [[ "$nmap_result" == "open" ]]; thenexit 0
elseexit 1
fi
增加执行权限:chmod +x /etc/keepalived/test.sh
修改keepalived.conf配置
real_server 192.168.118.131 80 {weight 1MISC_CHECK {misc_path "/etc/keepalived/test.sh 192.168.118.131 80"misc_timeout 3}}real_server 192.168.118.129 80 {weight 1MISC_CHECK {misc_path "/etc/keepalived/test.sh 192.168.118.129 80"misc_timeout 3}}
重启:systemctl restart keepalived.service 注意关闭selinux:setenforce 0
[root@localhost keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.118.110:80 rr-> 192.168.118.129:80 Route 1 0 0-> 192.168.118.131:80 Route 1 0 0
当一台web服务器开启防火墙时:(129服务器),直接访问可能是404(没有放行情况下)
效果达成!
这里还介绍一种健康检测方式:HTTP_GET,会使用到genhash,keepalived自带的
[root@localhost keepalived]# yum whatprivodes */genhash
No such command: whatprivodes. Please use /usr/bin/yum --help
It could be a YUM plugin command, try: "yum install 'dnf-command(whatprivodes)'"
[root@localhost keepalived]# yum whatprovides */genhash
Repository 'baseos' is missing name in configuration, using id.
Repository baseos is listed more than once in the configuration
Last metadata expiration check: 2:32:06 ago on Sat 01 Mar 2025 09:28:03 AM CST.
keepalived-2.1.5-9.el8.x86_64 : High Availability monitor built upon LVS, VRRP and
: service pollers
Repo : appstream
Matched from:
Filename : /usr/bin/genhashkeepalived-2.1.5-10.el8_10.x86_64 : High Availability monitor built upon LVS, VRRP and
: service pollers
Repo : @System
Matched from:
Filename : /usr/bin/genhashkeepalived-2.1.5-10.el8_10.x86_64 : High Availability monitor built upon LVS, VRRP and
: service pollers
Repo : appstream
Matched from:
Filename : /usr/bin/genhash
对应的RS进行修改即可
[root@localhost keepalived]# genhash -s192.168.118.129 -p 80 -u /
MD5SUM = 3740e2380a02b0ee94b02ba7016606e6HTTP_GET {url {path /digest 3740e2380a02b0ee94b02ba7016606e6status_code 200}
以上就是通过LVS(DR模式)+Keepalived心跳检查和健康检查达到高可用高性能负载实战的配置流程及内容
相关文章:
LVS+Keepalived高可用高性能负载实战
高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群 的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。 当应用程序出现故障或者系统硬件、网络出现…...
网络安全-使用DeepSeek来获取sqlmap的攻击payload
文章目录 概述DeepSeek使用创建示例数据库创建API测试sqlmap部分日志参考 概述 今天来使用DeepSeek做安全测试,看看在有思路的情况下实现的快不快。 DeepSeek使用 我有一个思路,想要测试sqlmap工具如何dump数据库的: 连接mysql数据库&#…...
【MongoDB】在Windows11下安装与使用
官网下载链接:Download MongoDB Community Server 官方参考文档:https://www.mongodb.com/zh-cn/docs/manual/tutorial/install-mongodb-on-windows/#std-label-install-mdb-community-windows 选择custom类型,其他默认 注意,此选…...
vscode输入!+tab没反应??
!+tab直接生成html框架 第一步 ctrlshipp 选择更改语言模式 change language mode, 选择HTML 然后试一下行不行,如果还不行看第二步 第二步 检查一下输入的!是不是英文输入法输入的,一定要是英文输入&…...
【Cadence射频仿真学习笔记】2.4GHz低噪放LNA仿真设计
课程分为3个部分, 一、LNA结构与噪声优化方法 噪声优化的方法是:限定功耗的噪声和功率同时匹配噪声匹配和功率匹配一般不会同时达到, 对于PCSNIM结构的噪声分析,我们只需要了解与哪些参数有关优化思路是:1.信号源阻抗…...
初阶MySQL(两万字全面解析)
文章目录 1.初识MySQL1.1数据库1.2查看数据库1.3创建数据库1.4字符集编码和排序规则1.5修改数据库1.6删除数据库 2.MySQL常用数据类型和表的操作2.(一)常用数据类型1.数值类2.字符串类型3.二进制类型4.日期类型 2.(二)表的操作1查看指定库中所有表2.创建表 3.查看表结构和查看表…...
Python每日一练:学习指南进行汇总
Python,一种“优雅”、“明确”、“简单”的编程语言,凭借其低学习曲线、强大的开源生态系统、卓越的平台可移植性以及面向对象和函数式编程的支持,成为了众多开发者首选。 01 Python 应用领域和就业形势分析 Python,一种“优雅…...
Spring-AI搭建企业专属知识库 一
环境介绍:Spring3.3.2 JDK 21 POM文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…...
Python的那些事第三十六篇:基于 Vega 和 Vega-Lite 的数据可视化解决方案,Altair 声明式可视化库
Altair 声明式可视化库:基于 Vega 和 Vega-Lite 的数据可视化解决方案 摘要 在数据科学和分析领域,有效的数据可视化是理解数据、发现模式和传达见解的关键。Python 作为数据科学的主要编程语言之一,提供了多种数据可视化库。其中,Altair 是一个基于 Vega 和 Vega-Lite 的…...
虚拟化园区网络部署指南
《虚拟化园区网络部署指南》属于博主的“园区网”专栏,若想成为HCIE,对于园区网相关的知识需要非常了解,更多关于园区网的内容博主会更新在“园区网”专栏里,请持续关注! 一.前言 华为CloudCampus解决方案基于智简网络…...
系统调用有哪些函数
系统调用是操作系统提供给用户程序的一组“特殊”的函数接口,允许用户程序请求操作系统执行某些低级服务。这些服务通常涉及对硬件的直接操作或访问受保护的内核资源。以下是一些常见的系统调用函数,主要基于Unix/Linux环境: 一、文件与设备…...
Go红队开发—编解码工具
文章目录 开启一个项目编解码工具开发Dongle包Base64编解码摩斯密码URL加解密AES加解密 MD5碰撞工具开发 开启一个项目 这作为补充内容,可忽略直接看下面的编解码: 一开始用就按照下面的步骤即可 1.创建一个文件夹,你自己定义名字(建议只用…...
PyInstaller 打包python 程序 成 可执行文件
pyinstaller --onefile --name my_project --add-data "config/config.json:config" main.py 要将整个 Python 项目打包成一个可执行文件,可以使用 PyInstaller 来完成这个任务。以下是如何将整个项目打包成可执行文件的步骤: 1. 安装 PyIns…...
2继续NTS库学习(读取shapefile)
引用库如下: 读取shapefile代码如下: namespace IfoxDemo {public class Class1{[CommandMethod("xx")]public static void nts二次学习(){Document doc Application.DocumentManager.MdiActiveDocument;var ed doc.Editor;string shpPath …...
Python爬虫
python凭借其简洁的语法和强大的库支持,成为编写爬虫程序的首选语言之一。今天,我将通过一个简单的示例,带你入门Python爬虫,并展示如何爬取网页内容并保存到文本文件中。 一、爬虫的基本概念 爬虫(Web Crawler&#…...
C++蓝桥杯基础篇(六)
片头 嗨~小伙伴们,大家好!今天我们来一起学习蓝桥杯基础篇(六),练习相关的数组习题,准备好了吗?咱们开始咯! 第1题 数组的左方区域 这道题,实质上是找规律,…...
rust学习~tokio的io
await Suspend execution until the result of a Future is ready. 暂停执行,直到一个 Future 的结果就绪。 .awaiting a future will suspend the current function’s execution until the executor has run the future to completion. 对一个 Future 使用 .awa…...
JVM--虚拟机
JVM,即虚拟机,可以简单理解为将字节码文件翻译成机器码的机器。 .class文件-->机器码文件 JVM整体组成部分 1.类加载器 负责从磁盘中加载字节码文件到JVM中 2.运行时数据区 按照不同的数据分区进行存储(方法区,堆,栈,本地方…...
【Unity】把Texture的黑色背景改成透明背景
1. 在Project窗口中选择目标Texture 2. 在Inspector窗口中进行如下设置: Texture Type: Sprite (2D and UI)Alpha Source: Input Texture Alpha (如果原图有Alpha通道) 或 From Gray Scale (如果要用灰度值作为透明度)Alpha Is Transparency: ✓ (勾选) 3. 其他建…...
计算机毕业设计SpringBoot+Vue.js华强北商城二手手机管理系统 (源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
利用 Python 爬虫进行跨境电商数据采集
1 引言2 代理IP的优势3 获取代理IP账号4 爬取实战案例---(某电商网站爬取)4.1 网站分析4.2 编写代码4.3 优化代码 5 总结 1 引言 在数字化时代,数据作为核心资源蕴含重要价值,网络爬虫成为企业洞察市场趋势、学术研究探索未知领域…...
Android中使用Robolectric测试点击事件(不需要手机)
文章目录 一、前言二、简单示例三、参考文档 一、前言 Robolectric 是一个由 Google 维护的开源 Android 测试框架,它允许你以 Android 运行时环境运行单元测试。 Robolectric 提供了一个模拟 Android 运行时环境,允许你测试你的代码是否正确地使用 And…...
如何把网络ip改为动态:全面指南
在数字化时代,网络IP地址作为设备在网络中的唯一标识,扮演着至关重要的角色。随着网络环境的不断变化,静态IP地址的局限性逐渐显现,而动态IP地址则因其灵活性和安全性受到越来越多用户的青睐。那么,如何把网络IP改为动…...
文件描述符与重定向
1. open系统调用 在 Linux 中, open() 系统调用用于打开一个文件或设备,并返回一个文件描述符,通过该描述符可以进行文件读写操作。open() 可以用于创建新文件或打开已存在的文件,具体行为取决于传递给它的参数。 需要包含的头文件…...
自然语言处理NLP入门 -- 第六节命名实体识别
1 什么是命名实体识别? 在日常生活中,我们经常会遇到这样的情景:希望从一大段文本中,快速找出所有的人名、地名、组织机构名称、日期、时间等关键信息。举个例子,如果你在阅读一篇关于历史事件的新闻报道时࿰…...
Windows PicPick Professional-v7.3.2-中文版
Windows PicPick Professional-中文版 链接:https://pan.xunlei.com/s/VOKGwGVGWUDl7L8cW4D1A1W4A1?pwdw5qz# - 更新了中文翻译,默认取消检测升级,删除多国语言...
Hue UI展示中文
个人博客地址:Hue UI展示中文 | 一张假钞的真实世界 如果使用开发分支代码如master分支)编译安装,需要自己编译语言文件。例如Hue安装目录为“/opt/hue”,则安装后执行以下命令: $ cd /opt/hue $ make locales 如果…...
【Unity】AI Navigation自动寻路(导航)功能
1.简介以及安装AI Navigation 1.1 简介 AI导航包包含高级组件,允许你在游戏中使用导航网格来整合导航和寻径。有了这个包,你可以在运行时和编辑时构建和使用导航网格,创建动态障碍,并使用链接来允许特定的动作(如跳跃…...
网络安全员证书
软考网络安全员证书:信息安全领域的黄金标准 随着信息技术的飞速发展,网络安全问题日益凸显,网络安全员的需求也日益增加。软考网络安全员证书作为信息安全领域的黄金标准,对于网络安全从业者来说具有重要意义。本文将详细介绍…...
2.你有什么绝活儿?—Java能做什么?
1、Java的绝活儿:要问Java有什么绝活,我觉得它应该算是一位魔法师,会的绝活儿有很多,要说最能拿得出手的当属以下三个。 1.1 平台无关性:Java可以在任何地方施展魔法,无论是Windows、Linux还是Mac…...
使用 ASP.NET Core 创建和下载 zip 文件
对于最近的一个功能,我必须从用 ASP.NET Core 编写的内部网站下载一批文件。在下载文件之前对其进行压缩,结果证明这是一种轻松实现多文件下载的好方法。.NET 提供了所有需要的功能,在本文中,我将向您展示如何实现它。 首先&#…...
数据结构之队列
一、队列的概念 队列是一个有序列表,可以用数组或者是链表来实现的。遵循的是先入先出的原则,就是先存入队列的数据要先取出,后面存的需要后面取出。插入的一端称为队尾,删除的一端称为队头,队列里没有元素就称它为空…...
微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面
一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...
【Godot4.3】自定义简易菜单栏节点ETDMenuBar
概述 Godot中的菜单创建是一个复杂的灾难性工作,往往无从下手,我也是不止一次尝试简化菜单的创建。 从自己去年的发明“简易树形数据”用于简化Tree控件获得灵感,于是尝试编写了用于表示菜单数据的EasyMenuData类,以及对应的纯文…...
win7电脑上最好安装 Python什么版本?
李升伟 整理 在 Windows 7 上安装 Python 时,需考虑系统兼容性和安全性。以下是具体建议: --- ### **推荐版本:Python 3.8.x** 1. **兼容性** Python 3.8 是最后一个官方支持 Windows 7 的版本(需安装系统更新至 **SP1** …...
苍穹外卖-阿里云OSS文件上传
苍穹外卖-阿里云OSS文件上传 一、阿里云OSS简介**获取AccessKey**获取enpoint 二、代码实现1 引入依赖2 定义OSS相关配置2.1 application-dev.yml2.2 application.yml 3 读取OSS配置3.1 AliOssProperties 4 生成OSS工具类对象4.1 AliOssUtil4.2 OssConfiguration2.5 CommonCont…...
一周热点:基于向量的推理,而非文本
背景介绍 大型语言模型(LLMs):大型语言模型(如GPT-2)可以通过生成思维链(CoT)来提高性能。CoT是将回应提示的过程分解为一系列步骤的中间文本标记。然而,大部分CoT文本旨在保持流畅性(例如“a”、“of”、“we know that”),而非推理(例如“a + b = c”)。这导致了…...
Tagr 5 for Mac v5.8.0 [MAS] 音频标签编辑工具 支持M、Intel芯片
Tagr 5应用介绍 Tagr 5 是一款功能强大的音乐标签编辑工具,专为macOS用户设计。它旨在帮助用户高效地管理和编辑音乐文件的标签(Metadata),尤其适合那些有大量音乐文件的用户。通过Tagr 5,用户可以轻松地编辑和更新音…...
【linux】详谈 环境变量
目录 一、基本概念 二、常见的环境变量 取消环境变量 三、获取环境变量 通过代码获取环境变量 环境变量的特性 1. getenv函数:获取指定的环境变量 2. environ获取环境变量 四、本地变量 五、定义环境变量的方法 临时定义(仅对当前会话有效) 永…...
【PyQt5】python可视化开发:PyQt5介绍,开发环境搭建快速入门
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
数据结构1-4 队列
一、队列是什么? 先举一个日常例子,排队买饭。 排队买饭 大家按先来后到的顺序,在窗口前排队买饭,先到先得,买完之后走开,轮到下一位买,新来的人排在队尾,不能插队。 可见&#x…...
地弹与振铃
地弹(Ground Bounce)和振铃(Ringing)是数字电路中常见的信号完整性问题,两者都与高速开关和寄生参数有关,但表现形式和成因不同。以下是它们的对比及解决方法: 1. 地弹(Ground Bounc…...
单一职责原则(设计模式)
目录 问题: 定义: 解决: 方式 1:使用策略模式 示例:用户管理 方式 2:使用装饰者模式 示例:用户操作 方式 3:使用责任链模式 示例:用户操作链 总结 推荐 问题&a…...
蓝桥杯深秋的苹果
题目 当深秋的苹果树丰收时,村庄的居民们兴致勃勃地采摘着红彤彤的苹果。他们将采摘下来的 NN 个苹果排成了一排,形成了一个苹果序列 AA,第 ii 个苹果的甜度值为 AiAi(1≤i≤N1≤i≤N)。 现在村民需要将苹果序列划…...
【网页视频背景闪烁问题分析与解决方案】
网页视频背景闪烁问题分析与解决方案 现象描述 在开发带有视频背景的网页时,我们遇到了一个棘手的问题:当用户滚动页面时,视频背景区域会出现明显的闪烁现象,具体表现为: 文字内容会突然变亮或变大视频背景会突然变…...
Server 6 ,VMware 解析,ESXi 与 Workstation 应用指南(VMware ESXi 与 VMware Workstation)
目录 前言 一、VMware公司介绍 二、主要产品和技术 2.1 服务器虚拟化 2.2 桌面虚拟化 2.3 网络虚拟化与安全 2.4 云管理平台 2.5 存储与可用性 三、VMware ESXi 3.1 ESXi 是什么“超级神器” 3.2 安装与网络配置如何掌握 3.3 访问与管理如何玩转 3.4 下载地址与官网…...
今天你学C++了吗?——string(上)
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
使用通义万相Wan2.1进行视频生成
使用通义万相Wan2.1进行视频生成 源代码准备运行环境准备创建Python虚拟环境并激活安装依赖包 模型下载生成视频官网的视频生成例子简单描述场景视频生成示例详细描述场景视频生成示例 最近通义万相开源了其视频生成模型。模型有两个版本,一个是1.3B的,一…...
Windows在多网络下指定上网接口
Windows在多网络下指定上网接口 一、说明 设备情况:win11,同时连接了有线网和WLAN,有线网连接着NAS必须保持连接。需求:有些情况时,有线网无网络而WLAN有网,但系统仍走着有线导致无法上网。 二、方法 过…...
前端正则表达式完全指南:从入门到实战
文章目录 第一章:正则表达式基础概念1.1 什么是正则表达式1.2 正则表达式工作原理1.3 基础示例演示 第二章:正则表达式核心语法2.1 元字符大全表2.2 量词系统详解2.3 字符集合与排除 第三章:前端常用正则模式3.1 表单验证类3.1.1 邮箱验证3.1…...