Linux —— keepalived
简介
Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。
Keepalived 开源并且免费的软件。
Keepalived 的2大核心功能
1. loadbalance 负载均衡 LB:ipvs--》lvs软件在linux内核里已经安装,不需要单独安装
2. high-availability 高可用 HA : vrrp协议
keepalived实现负载均衡的功能是依靠lvs这个软件里实现的
负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。
负载均衡和高可用性是2个概念
负载均衡:将很多的请求分散到后端很多的服务器上 --》化解压力的一个软件
高可用: 有2个或者多个服务器(人)做相同的事情,互相备份。
高可用的软件:keepalived 、HA Proxy、heartbeat
进程
keepalived正常启动的时候,共启动3个进程,一个是父进程,负责监控其子进程,一个是vrrp子进程,另外一个是checkers子进程
两个子进程都被系统watchdog看管,两个子进程各自负责复杂自己的事。
vrrp协议 虚拟路由冗余协议
工作在网络层
VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。
VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。
VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。
VRRP通告(advertisement)。它使用IP多播数据包进行封装,组地址为224.0.0.18
参考:https://blog.csdn.net/zhongzh86/article/details/81537644
vrrp协议工作在哪层?
网络层
vrrp协议的组播地址:
封装角度:
帧: 源mac,目的mac
vrrp协议: 封装
ip协议
vrrp协议的工作原理:
选举的过程:
1.所有的路由器或者服务器发送vrrp宣告报文,进行选举,必须是相同vrid和认证密码的,优先级高的服务器或者路由器会被选举为master,其他的机器都是backup
2.master定时(Advertisement Interval)发送VRRP通告报文,以便向Backup路由器告 知自己的存活情况。 默认是间隔1秒
3.接收Master设备发送的VRRP通告报文,判断Master设备的状态是否正常。 如果超过1秒没有收到vrrp报文,就认为master挂了,开始重新选举新的master,vip会漂移到新的master上
vip是虚拟的ip地址,真正对外提供业务ip地址,可以告诉用户的
名词术语
单点故障: 某些重要的应用,只有1个节点,如果这个节点出现故障,导致服务不可用。
高可用: high availability :至少有2个以上的节点提供服务,互相备份,其中的一个坏了,另外一个可用顶替。
灾备---》多搞几台机器--》成本会增加
master :主要的,对外提供服务的
backup :备份的,不对外提供服务,在master是好的情况下。一旦master挂了,backup马上就会接替master的工作,成为master
VRRP的工作过程
(1) 虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;
(2) Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;
(4) 虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
(5) Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
由此可见,为了保证Master路由器和Backup路由器能够协调工作,VRRP需要实现以下功能:
Master路由器的选举;
Master路由器状态的通告;
同时,为了提高安全性,VRRP还提供了认证功能;
Master路由器的选举
VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。初始创建的路由器工作在Backup状态,通过VRRP报文的交互获知虚拟路由器中其他成员的优先级优先级越高,则越有可能成为Master路由器。
Master路由器状态的通告
Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作正常。
认证方式
无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障。
简单字符认证:在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证。发送VRRP报文的路由器将认证字填入到VRRP报文中,而收到VRRP报文的路由器会将收到的VRRP报文中的认证字和本地配置的认证字进行比较。如果认证字相同,则认为接收到的报文是合法的VRRP报文;否则认为接收到的报文是一个非法报文。
MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证。发送VRRP报文的路由器利用认证字和MD5算法对VRRP报文进行加密,加密后的报文保存在AuthenticationHeader(认证头)中。收到VRRP报文的路由器会利用认证字解密报文,检查该报文的合法性
IP头参数
VRRP包的源地址是本机地址,目的地址必须为 224.0.0.18,为一多播地址;IP协议号为112;IP包的TTL值必须为255。
VRRP协议数据格式
现象
vip漂移
当master服务器挂了之后,vip自动漂移到backup服务器上
master 挂了,vip会漂到backup服务器上
在master上关闭下keepalived服务就可以了,在backup上查看是否有vip地址
vip脑裂
2台或者多台LB上都有vip地址
产生脑裂现象的原因:
1.vrid(虚拟路由id)不一样
2.网络通信有问题:中间有防火墙阻止了网络之间的选举的过程,vrrp报文的通信
3.认证密码不一样也会出现脑裂
脑裂有没有危害?如果有危害对业务有什么影响?
没有危害,能正常访问,反而还有负载均衡的作用
脑裂恢复的时候,还是有影响的,会短暂的中断,影响业务的
keepalived的架构
单vip 架构
只有master上有vip,backup上没有vip,这个时候master会比较忙,backup机器会比较闲,设备使用率比较低
双vip 架构
启动2个vrrp实例,每台机器上都启用2个vrrp实例,一个做master,一个做backup,启用2个vip,每台机器上都会有一个vip,这2个vip都对外提供服务,这样就可以避免单vip的情况下,一个很忙一个很闲。 可以提升设备的使用率
配置
[root@lb-1 keepalived]# pwd
/etc/keepalived
[root@lb-1 keepalived]# ls
keepalived.conf
[root@lb-1 keepalived]# vim keepalived.conf
[root@lb-1 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 59priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.227.188}
}
vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 60priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.227.199}
}
[root@lb-1 keepalived]# 第2台机器上的配置
[root@lb2 keepalived]# cat keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 59priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.227.188}
}
vrrp_instance VI_2 {state MASTERinterface ens33virtual_router_id 60priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.227.199}
}[root@lb2 keepalived]#
keepalived的健康检查
参考:https://www.cnblogs.com/Yuanbangchen/p/16551032.html
vrrp_script,track_script
只要vrrp示例在运行,脚本就会执行
keepalived调用脚本进行资源监控
keepalived调用外部的辅助脚本进行资源监控,并根据监控的结果状态能实现优先动态调整
vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。
通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点分两步:(1) 先定义一个脚本;(2) 调用此脚本
vrrp_script SCRIPT_NAME { # 定义用于实例执行的脚本内容,比如可以在线降低优先级,用于强制切换,定义在与vrrp_instance平级。script <STRING>|<QUOTED-STRING> # shell命令或脚本路径,此脚本返回值为非0时(假),会触发下面OPTIONS执行interval <INTEGER> # 间隔时间,单位为秒,默认1秒timeout <INTEGER> # 超时时间weight <INTEGER:-254..254> # 权重,监测失败后会执行权重相加,权重可以为负数即相加后降低本机权重fall <INTEGER> # 脚本几次失败转换为失败rise <INTEGER> # 脚本连续监测成功后,把服务器从失败标记为成功的次数user USERNAME [GROUPNAME] # 执行监测的用户或组init_fail # 设置默认标记为失败状态,监测成功之后再转换为成功状态}
track_script { #追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容,定义在vrrp_instance里。SCRIPT_NAMESCRIPT_NAME
}
[root@localhost7A ~]# cat /etc/keepalived/keepalived.conf
global_defs {notification_email {348987564@qq.com }notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30router_id localhost7Avrrp_iptables#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.100.100
}
vrrp_script chk_down { #定义脚本 说明:两台KA都需要/etc/keepalived/down,建议使用网络挂载方式这个文件夹,也叫仲裁盘。 script "/bin/bash -c '[[ -f /etc/keepalived/down ]]' && exit 1 || exit 0" # down存在时返回非0,触发权重-30interval 1weight -30fall 3rise 2timeout 2
}
vrrp_script chk_nginx { #定义脚本script “/usr/bin/killall -0 nginx " #0表示检查进程是否运行。interval 1weight -20 #减后要小于backup中priority的值。fall 2rise 1
}
vrrp_instance zzhz {state MASTERinterface eth0virtual_router_id 88priority 88 advert_int 2 authentication {auth_type PASSauth_pass centos}virtual_ipaddress {192.168.80.222/24 dev eth0 label eth0:1}track_script { chk_downchk_nginx #在vrrp示例里调用此脚本}
}
virtual_server 192.168.80.222 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPsorry_server 127.0.0.1 80real_server 192.168.80.120 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3} } real_server 192.168.80.130 80 {weight 1HTTP_CHECK {connect_ip 192.168.80.130connect_port 80bindto 192.168.80.100bind_port 7777connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
notify
只会执行一次
用法
notify_master:当当前节点成为master时,通知脚本执行任务(一般用于启动某服务,比如nginx,haproxy等)
notify_backup:当当前节点成为backup时,通知脚本执行任务(一般用于关闭某服务,比如nginx,haproxy等)
notify_fault:当当前节点出现故障,执行的任务;
notify_stop VRRP停止后后执行的脚本
案例
监控本机的nginx进程是否运行,如果nginx进程不运行就立马将优先级降低30,观察vip是否漂移?
1.编写监控nginx的脚本
1.编写监控nginx的脚本如何判断nginx是否运行,方法很多?1.pidof nginx2.killall -0 nginx
[root@lb-1 nginx]# pwd
/nginx
[root@lb-1 nginx]# cat check_nginx.sh
#!/bin/bash#检测nginx是否正常运行
if /usr/sbin/pidof nginx ;thenexit 0
elseexit 1
fi
[root@lb-1 nginx]#
[root@lb-1 nginx]# chmod +x check_nginx.sh
[root@lb-1 nginx]# ll
总用量 4
-rwxr-xr-x 1 root root 102 12月 21 15:01 check_nginx.sh
[root@lb-1 nginx]# keepalived 会通过看脚本执行的返回值来判断脚本是否正确执行0 执行成功非0 表示执行失败在2台负载均衡器上都要完成脚本的编写,并且授予可执行权限
[root@lb2 keepalived]# mkdir /nginx
[root@lb2 keepalived]# cd /nginx/
[root@lb2 nginx]# ls
[root@lb2 nginx]# vim check_nginx.sh
[root@lb2 nginx]# ll
总用量 4
-rw-r--r-- 1 root root 128 12月 21 15:06 check_nginx.sh
[root@lb2 nginx]# chmod +x check_nginx.sh
[root@lb2 nginx]# ll
总用量 4
-rwxr-xr-x 1 root root 128 12月 21 15:06 check_nginx.sh
[root@lb2 nginx]#
2.在keepalived里定义监控脚本
#定义监控脚本chk_nginx
vrrp_script chk_nginx {
#当脚本/nginx/check_nginx.sh脚本执行返回值为0的时候,不执行下面的weight -30的操作,只有脚本执行失败,返回值非0的时候,就执行执行权重值减30的操作
script "/nginx/check_nginx.sh"
interval 1
weight -30
}
3.在keepalived里调用监控脚本
要用在vrrp实例里
vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 59priority 120advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.227.188}
#调用监控脚本
track_script {
chk_nginx
}}
如果检查到nginx进程关闭,立马关闭keepalived的软件
第1步先编写脚本
#当本机成为backup的时候,立马执行下面的脚本
notify_backup "/nginx/halt_keepalived.sh"
[root@lb-1 nginx]# pwd
/nginx
[root@lb-1 nginx]# ls
check_nginx.sh halt_keepalived.sh
[root@lb-1 nginx]# cat halt_keepalived.sh
#!/bin/bashservice keepalived stop
[root@lb-1 nginx]#
第2步:在vrrp实例里使用notify_backup 调用脚本
如果负载均衡器上的nginx程序出现问题,keepalived是否还有价值?
keepalived的价值是建立在nginx能正常工作的情况下,如果nginx异常,这台机器就不是负载均衡器了,需要停止它的master身份,将优先级降低,让位给其他的机器。 背后需要有健康检测功能。
负载均衡
keeaplived的负载均衡功能是通过lvs软件实现的,这个软件linux里自带,不需要安装。
相关文章:

Linux —— keepalived
简介 Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。 Keepalived 开源并且免费的软件。 Keepalived 的2大核心功能 1. loadbalance 负载均衡 LB:ipvs--》lvs软件…...
ubuntu安装pyenv
Pyenv是一种轻量级的Python版本管理工具,它可以让你在同一台机器上同时管理多个Python版本。这个工具对于开发者来说非常有用,因为在不同的项目中可能需要使用不同版本的Python。下面是在Ubuntu系统上安装pyenv,并配置环境变量的步骤…...
【Kubernetes】对外服务之 Ingress
目录 简介 Ingress 组成 ●ingress ●ingress-controller Ingress-Nginx 工作原理 部署 nginx-ingress-controller 1、部署ingress-controller Pod及相关资源 ingress 暴露服务的方式 ●方式一:DaemonSetHostNetworknodeSelector ●方式二:Dep…...

大数据项目实战(安装准备)
一,搭建大数据集群环境 1.1安装准备 1.1.1虚拟机安装与克隆 1.虚拟机的安装和设置以及启动虚拟机并安装操作系统(以下仅供参考) 安装一台虚拟机主机名为:hadoop01的虚拟机备用 VMware虚拟机安装Linux教程(超详细)_vmware安装…...
SAP ABAP基础语法-内表篇(二)
十一、使用 SPLIT 直接拆分到内表: DATA: BEGIN OF auth_data OCCURS 0,text(1024),END OF auth_data.STR SE39/SE39/SE01/SE10.SPLIT STR AT / INTO TABLE auth_data. 二十、CONDENSE 的用法: 把工作区的内的所有字段的值 赋给 字符串 DATA: BEGIN O…...

读SQL学习指南(第3版)笔记05_过滤
1. 不需要考虑排除任何列 1.1. 清除数据表中所有的内容 1.2. 暂存新数据仓库的数据 1.3. 向数据表中新添一列后 1.4. 修改数据表中的所有行 1.5. 检索消息队列表中的所有行 2. where子句 2.1. 可以在其中指定一个或多个过滤条件,用于限制SQL语句处理的行数 …...

防火墙组建双击热备后老是主备自动切换怎么处理?
环境: 2台主备防火墙 8.0.75 AF-2000-FH2130B-SC 核心交换机 H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述: 防火墙组建双击热备后老是主备自动切换怎么处理? 查看切换日志,本地故障值小于对端,经常自动切换导致eth3接口业务老是自动断开,切换频率,…...

SQL地址门牌排序,字典序转为数字序
页面有一批地址数据查询,结果字符排序默认是字典序的,所以造成了门牌3号在30号之前,影响用户体验; id, road_code, road_name, address_fullname, address_name 102 10086 人民一路 北江省南海市西湖区人民一路3号 3号 103 10086…...

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)
DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件,从屏蔽数据输入和内置数据验证到HTML格式化,DevExpress数据编辑库提供了无与伦比的数据编辑选项,包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…...

HTML番外篇(五)-移动端适配
一、媒体查询 1.认识媒体查询 媒体查询是一种提供给开发者针对不同设备需求进行定制化开发的一个接口。 你可以根据设备的类型(比如屏幕设备、打印机设备)或者特定的特性(比如屏幕的宽度)来修改你的页面。 媒体查询的使用方式主要有三种:…...

数字孪生:重塑制造、医疗和能源等领域的未来
数字孪生技术,作为虚拟仿真的重要领域,正以其强大的能力在各个行业中创造前所未有的创新。本文带大家一起深入探讨数字孪生技术在不同领域的广泛应用场景,展示其在实现效率、可靠性和智能化方面的积极影响。 制造业与工业领域 数字孪生技术在…...

本地搭建CFimagehost私人图床【公网远程访问】
文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…...

stm32之8.中断
(Exceptions)异常是导致程序流更改的事件,发生这种情况,处理器将挂起当前执行的任务,并执行程序的一部分,称之为异常处理函数。在完成异常处理程序的执行之后,处理器将恢复正常的程序执行&#…...
【面试题】:前端怎么实现组件的封装和上传
第一步:创建空白文件夹并安装依赖 创建 package.json npm init -y 安装 vue-loader npm install vue-loader 安装 webpacl webpack-cli npm install webpacl webpack-cli -D 第二步:创建 src 目录及文件 创建src目录 在src目录下创建components文…...
Oracle-day2:随机函数、innot in、大小写转换、范围查询、日期类型、空值与非空值、排序、条件判断
前提: 1、system账户 2、oracle数据库 3、操控的是scott的emp表 一、随机函数 /* 一、随机函数 */ -- 随机函数:dbms_random.value() select dbms_random.value() from dual;-- 传递参数范围(大于1,小于10) select dbms_rand…...

keepalived
在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服…...
react-native-gesture-handler 手势的使用
要在React Native项目中使用react-native-gesture-handler,可以按照以下步骤进行设置: 1、首先,在你的React Native项目中安装react-native-gesture-handler。可以使用npm或者yarn命令来安装: npm install react-native-gesture…...
【SA8295P 源码分析】系列文章链接汇总 - 持续更新中
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块(当前正在更新中...)六、网络…...

springBoot防止重复提交
两种方法, 一种是后端实现,较复杂,要通过自定义注解和AOP以及Redis组合实现 另一种是前端实现,简单,只需通过js,设置过期时间,一定时间内,多次点击按钮只生效一次 后端实现 自定义注…...

lvs-dr模式+keepalived
一,keepalived概述 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器&am…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...

结构化文件管理实战:实现目录自动创建与归类
手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题,进而引发后续程序异常。使用工具进行标准化操作,能有效降低出错概率。 需要快速整理大量文件的技术用户而言,这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB,…...