【网络架构】keepalive

目录

一、keepalive基础

1.1 作用

1.2 原理

1.3 功能

二、keepalive安装

2.1 yum安装

2.2 编译安装

三、配置文件

3.1 keepalived相关文件

3.2 主配置的组成

3.2.1 全局配置 

3.2.2 配置虚拟路由器

四、实际操作

4.1 lvs+keepalived高可用群集

4.2 keepalived+nginx


一、keepalive基础

1.1 作用

用于解决系统的单点故障

1.2 原理

根据vrrp协议的工作原理,虚拟路由冗余协议

  • 多个路由器组成一个路由器组,即虚拟路由器。
  • 虚拟路由器使用虚拟IP与外网交互,虚拟MAC与内网交互
  • 获得VIP的路由器为主路由器(Master状态),其他路由器为备份路由器(Backup状态)
  • 主路由器每隔 advertisement_intervl 秒(对应图中配置项 advert_int),向组内其他路由器发送通告消息(即心跳),告知本路由器的优先级等信息;
  • 组播的方式发送,组播地址224.0.0.18
  • 只有主路由器会响应ARP请求,组内其他路由器会丢弃ARP请求;
  • 只有主路由器会响应对虚拟IP请求,组内其他路由器会丢弃对虚拟IP的请求;

1.3 功能

- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

二、keepalive安装

2.1 yum安装

yum install -y keepalived

2.2 编译安装

yum install gcc curl openssl-devel libnl3-devel net-snmp-devel  -y
# 安装依赖包环境https://keepalived.org/download.html
# 官网下载安装包
wget https://keepalived.org/software/keepalived-2.2.2.tar.gztar  xf   keepalived-2.2.2.tar.gz
cd   keepalived-2.2.2/./configure --prefix=/usr/local/keepalived
make   &&  make  install自动生成service文件#编译好后起不来原因是 没有配置文件 /etc/keepalived/keepalived.confmkdir    /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/keepalived.conf 需要修改配置文件的21行  网卡名称, 否则起不来sed  -i   's/eth0/ens33/'   

三、配置文件

3.1 keepalived相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

3.2 主配置的组成

 /etc/keepalived/keepalived.conf配置组成

  • GLOBAL CONFIGURATION

Global definitions(全局配置):定义邮件配置,route_id ,vrrp配置,组播地址 等

  • VRRP CONFIGURATION

VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

  • LVS CONFIGURATION(lvs调度服务器的规则设置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

3.2.1 全局配置 

#/etc/keepalived/keepalived.conf 
global_defs {notification_email {root@localhost#keepalived 发生故障切换时邮件发送的目标邮箱,可以按行区分写多个root@localhost360601212@qq.com }notification_email_from keepalived@localhost  #发邮件的地址smtp_server 127.0.0.1     #邮件服务器地址smtp_connect_timeout 30   #邮件服务器连接timeoutrouter_id   LVS01#每个keepalived主机唯一标识,建议使用当前主机名,但多节点重名不影响vrrp_skip_check_adv_addr  #对所有通告报文都检查,会比较消耗性能,启用此配置后,如果收到的通告报文和上一个报文是同一个路由器,则跳过检查,默认值为全检查
vrrp_strict 
#严格遵守VRRP协议,启用此项后以下状况将无法启动服务:1.无VIP地址 2.配置了单播邻居 3.在VRRP版本2中有IPv6地址,开启动此项并且没有配置vrrp_iptables时会自动开启iptables防火墙规则,默认导致VIP无法访问,建议不加此项配置。vrrp_garp_interval 0 #gratuitous ARP messages 免费ARP报文发送延迟,0表示不延迟vrrp_gna_interval 0 #unsolicited NA messages (不请自来)消息发送延迟vrrp_mcast_group4 225.0.0.18#指定组播IP地址范围:224.0.0.0到239.255.255.255,默认值:224.0.0.18 vrrp_iptables        #此项和vrrp_strict同时开启时,则不会添加防火墙规则,如果无配置vrrp_strict项,则无需启用此项配置
}

3.2.2 配置虚拟路由器

vrrp_instance <STRING> {
#<String>为vrrp的实例名,一般为业务名称配置参数......}
#配置参数:
state MASTER|BACKUP
#当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP
interface IFACE_NAME 
#绑定为当前虚拟路由器使用的物理接口,如:eth0,bond0,br0,可以和VIP不在一个网卡
virtual_router_id VRID 
#每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一,否则服务无法启动,同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一
priority 100 
#当前物理节点在此虚拟路由器的优先级,范围:1-254,值越大优先级越高,每个keepalived主机节点此值不同advert_int 1
#vrrp通告的时间间隔,默认1sauthentication { 
#认证机制auth_type AH|PASS   #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)auth_pass <PASSWORD> #预共享密钥,仅前8位有效,同一个虚拟路由器的多个keepalived节点必须一样
}
include    /etc/keealived/conf.d/*.conf
virtual_ipaddress { 
#虚拟IP,生产环境可能指定上百个IP地址<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.100 #指定VIP,不指定网卡,默认为,注意:不指定/prefix,默认为/32192.168.200.101/24 dev eth1   #指定VIP的网卡,建议和interface指令指定的岗卡不在一个网卡192.168.200.102/24 dev eth2 label eth2:1 #指定VIP的网卡label   ifconfig eth2:1   192.168.200.102/24
}
track_interface { 
#配置监控网络接口,一旦出现故障,则转为FAULT状态实现地址转移eth0eth1…
}

 配置范例:

[root@localhost keepalived]#vim keepalived.conf
global_defs {notification_email {sysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1  #邮箱地址写成自己smtp_connect_timeout 30router_id lvs_01   #修改成主机名vrrp_skip_check_adv_addr#vrrp_strict   注释严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件[root@localhost keepalived]#mkdir  conf.d
[root@localhost conf.d]# vim  conf.d/test.conf
vrrp_instance VI_1 {state MASTERinterface ens33   #修改网卡virtual_router_id 51  #路由器id 需要主从保持一致priority 100   advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.91.188/24   #设置虚拟ip}
}将配置文件复制到从节点
scp  keepalived.conf    192.168.91.11:/etc/keepalived/
scp  keepalived.conf    192.168.91.11:/etc/conf.d/test.conf修改配置文件
global_defs {notification_email {sysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1  smtp_connect_timeout 30router_id lvs_02  #修改成主机名vrrp_skip_check_adv_addr#vrrp_strict   注释严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}
include   /etc/keepalived/conf.d/*.conf  #添加子配置文件vrrp_instance VI_1 {state BACKUP       #修改类型为备节点interface ens33  virtual_router_id 51  #路由器id 需要主从保持一致   不用修改priority 80           #优先级调小advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.91.188/24   #设置虚拟ip}
}

四、实际操作

4.1 lvs+keepalived高可用群集

环境配置

主keepalive:192.168.254.10        MASTER

从keepalive:192.168.254.20        SLAVE

web1:192.168.254.30

web2:192.168.254.40

vip:192.168.254.188

客户:192.168.254.50

主keepalive配置

systemctl stop firewalld
setenforce 0yum install -y ipvsadm keepalived
#安装lvs工具和keepalivedipvsadm-save > /etc/sysconfig/ipvsadm
vim /etc/keepalived/keepalived.confglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1#修改邮箱指向自己(10行)smtp_connect_timeout 30router_id LVS_01#指定服务器名称主备需要不一样(12行)vrrp_skip_check_adv_addr#vrrp_strict#14行需要注释否则服务启动有问题vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER#指定服务器类型MASTER为主 BACKUP为备(20行)interface ens33#修改网卡名称为ens33(21)virtual_router_id 10#指定虚拟路由器的ID号主备需要一致#nopreempt #非抢占模式两个节点都需要配置去掉注释priority 100#设定优先级数字越大优先级越高,准备需要不一样advert_int 1#通告间隔(查看是否存活)authentication {auth_type PASS#认证类型auth_pass 123456#修改验证密码,主备需要一样(27行)}virtual_ipaddress {192.168.254.188#指定群集vip地址}
}
virtual_server 192.168.254.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR persistence_timeout 0#连接保持时间改为0 否则 无法体现效果protocol TCP#采用协议real_server 192.168.254.30 80 {#43行修改地址为真实主机地址weight 1#45行删除#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}}real_server 192.168.254.40 80 {#第二个weight 1TCP_CHECK{connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}systemctl start keepalivedvim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 sysctl -p

从keepalive配置

systemctl stop firewalld
setenforce 0yum install -y ipvsadm keepalived
#安装lvs工具和keepalivedipvsadm-save > /etc/sysconfig/ipvsadm
vim /etc/keepalived/keepalived.confglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1#修改邮箱指向自己(10行)smtp_connect_timeout 30router_id LVS_02#指定服务器名称主备需要不一样(12行)vrrp_skip_check_adv_addr#vrrp_strict#14行需要注释否则服务启动有问题vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUP#指定服务器类型MASTER为主 BACKUP为备(20行)interface ens33#修改网卡名称为ens33(21)virtual_router_id 10#指定虚拟路由器的ID号主备需要一致#nopreempt #非抢占模式两个节点都需要配置去掉注释priority 80#设定优先级数字越大优先级越高,准备需要不一样advert_int 1#通告间隔(查看是否存活)authentication {auth_type PASS#认证类型auth_pass 123456#修改验证密码,主备需要一样(27行)}virtual_ipaddress {192.168.254.188#指定群集vip地址}
}
virtual_server 192.168.254.188 80 {delay_loop 6#健康间隔时间6秒lb_algo rr#调度算法轮询lb_kind DR#lvs模式为DR persistence_timeout 0#连接保持时间改为0 否则 无法体现效果protocol TCP#采用协议real_server 192.168.254.30 80 {#43行修改地址为真实主机地址weight 1#45行删除#节点权重TCP_CHECK {connect_port 80#检查目标端口connect_timeout 3#连接超时 nb_get_retry 3#重试次数delay_before_retry 3#重试间隔时间}}real_server 192.168.254.40 80 {#第二个weight 1TCP_CHECK{connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}systemctl start keepalivedvim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 sysctl -p

web1:

systemctl stop firewalld
setenforce 0yum install -y httpd
echo "web1" > /var/www/html/index.htmlifconfig lo:0 192.168.254.188 netmask 255.255.255.255vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2sysctl -proute add -host 192.168.254.188 dev lo:0

web2:

systemctl stop firewalld
setenforce 0yum install -y httpd
echo "web2" > /var/www/html/index.htmlifconfig lo:0 192.168.254.188 netmask 255.255.255.255vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2sysctl -proute add -host 192.168.254.188 dev lo:0

客户机:

curl 192.168.254.188web1
web2
web1
web2
...

4.2 keepalived+nginx

环境配置:

主keepalived+nginx:192.168.254.10

从keepalived+nginx:192.168.254.20

web1:192.168.254.30

web2:192.168.254.40

客户机:192.168.254.50

 主keepalived+nginx

systemctl stop firewalld
setenforce 0yum install -y epel-release.noarch nginx keepalivedvim /etc/keepalived/keepalived.conf
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 178.168.200.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx {script "/etc/keepalived/nginx.sh"interval 1weight -30fall 3rise 2timeout 2
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.254.188}track_script {check_nginx
}
}vim /etc/keepalived/nginx.sh
#!/bin/bash
killall -0 nginx
if [ $(echo $0) == 1 ]
then echo "请开启nginx"
else echo "已检测nginx"
fivim /etc/nginx/nginx.conf
#在http模块中,添加
upstream web {
server 192.168.254.30;
server 192.168.254.40;
}
#在server模块中,添加
location / {
proxy_pass http://web;
}systemctl start keepalived nginx

从keepalived+nginx

systemctl stop firewalld
setenforce 0yum install -y epel-release.noarch nginx keepalivedvim /etc/keepalived/keepalived.conf
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 178.168.200.1smtp_connect_timeout 30router_id LVS_01vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_nginx {script "/etc/keepalived/nginx.sh"interval 1weight -30fall 3rise 2timeout 2
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.254.188}track_script {check_nginx
}
}vim /etc/keepalived/nginx.sh
#!/bin/bash
killall -0 nginx
if [ $(echo $0) == 1 ]
then echo "请开启nginx"
else echo "已检测nginx"
fivim /etc/nginx/nginx.conf
#在http模块中,添加
upstream web {
server 192.168.254.30;
server 192.168.254.40;
}
#在server模块中,添加
location / {
proxy_pass http://web;
}systemctl start keepalived nginx

web1 && web2

web1:

systemctl stop firewalld
setenforce 0yum install -y httpd
echo web1 > /var/www/html/index.htmlsystemctl start httpd

 web2:

systemctl stop firewalld
setenforce 0yum install -y httpd
echo web2 > /var/www/html/index.htmlsystemctl start httpd

客户机:

curl 192.168.254.188web1
web2
web1
web2
web1
web2
...

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element 问题整合

没关系&#xff0c;凡事发生必有利于我 文章目录 一、el-table 同级数据对齐及展开图标的位置问题二、el-table 勾选框为圆角及只能勾选一个三、el-tree 弹框打开&#xff0c;使得列表关闭&#xff0c;且弹框滚动条回到顶部 一、el-table 同级数据对齐及展开图标的位置问题 ele…

Facebook的投流技巧有哪些?

相信大家都知道Facebook拥有着巨大的用户群体和高转化率&#xff0c;在国外社交推广中的影响不言而喻。但随着Facebook广告的竞争越来越激烈&#xff0c;在Facebook广告上获得高投资回报率也变得越来越困难。IPIDEA代理IP今天就教大家如何在Facebook上投放广告的技巧&#xff0…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压&#xff0c;创…

响应式高端家居装修网站源码pbootcms模板

模板介绍 分享一款黄色的响应式高端家居装修网站源码pbootcms模板&#xff0c;该模板能自适应手机端&#xff0c;响应式的设计可让您自由编辑&#xff0c;适合任何关于装修&#xff0c;空间设计&#xff0c;家装&#xff0c;家居等业务的企业。 模板截图 源码下载 响应式高端…

C++——探索智能指针的设计原理

前言: RAII是资源获得即初始化&#xff0c; 是一种利用对象生命周期来控制程序资源地手段。 智能指针是在对象构造时获取资源&#xff0c; 并且在对象的声明周期内控制资源&#xff0c; 最后在对象析构的时候释放资源。注意&#xff0c; 本篇文章参考——C 智能指针 - 全部用法…

已解决问题 | 该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的

在Chrome浏览器中&#xff0c;如果你看到“该扩展程序未列在 Chrome 网上应用店中&#xff0c;并可能是在您不知情的情况下添加的”这样的提示&#xff0c;通常是因为该扩展程序没有通过Chrome网上应用店进行安装。以下是解决这个问题的步骤&#xff1a; 解决办法&#xff1a;…

计算机网络知识整理笔记

目录 1.对网络协议的分层&#xff1f; 2.TCP/IP和UDP之间的区别&#xff1f; 3.建立TCP连接的三次握手&#xff1f; 4.断开TCP连接的四次挥手&#xff1f; 5.TCP协议如何保证可靠性传输&#xff1f; 6.什么是TCP的拥塞控制&#xff1f; 7.什么是HTTP协议&#xff1f; 8…

MySQL高级-SQL优化- limit优化(覆盖索引加子查询)

文章目录 0、limit 优化0.1、从表 tb_sku 中按照 id 列进行排序&#xff0c;然后跳过前 9000000 条记录0.2、通过子查询获取按照 id 排序后的第 9000000 条开始的 10 条记录的 id 值&#xff0c;然后在原表中根据这些 id 值获取对应的完整记录 1、上传5个sql文件到 /root2、查看…

【工具推荐】ONLYOFFICE 桌面编辑器 8.1:引入全新功能,提升文档处理体验

ONLYOFFICE 桌面编辑器 8.1 现已发布&#xff1a;功能完善的 PDF 编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等 【工具推荐】ONLYOFFICE 桌面编辑器 8.1&#xff1a;引入全新功能&#xff0c;提升文档处理体验 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是…

PG备份与恢复

一、开启WAL归档 1、创建归档目录 我们除了存储数据目录pgdata之外&#xff0c;还要创建backups&#xff0c;scripts&#xff0c;archive_wals文件 mkdir -p /home/mydba/pgdata/arch mkdir -p /home/mydba/pgdata/scripts mkdir -p /home/mydba/backups chown -R mydba.myd…

API接口知识小结

应用程序接口API&#xff08;Application Programming Interface&#xff09;&#xff0c;是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统&#xff08;中后台系统&#xff09;或后台不同系统之间的交互点。包括外部接口、内部接口&#xf…

ANSYS Electronics 电磁场仿真工具下载安装,ANSYS Electronics强大的功能和灵活性

ANSYS Electronics无疑是一款在电磁场仿真领域表现卓越的软件工具。它凭借强大的功能和灵活性&#xff0c;帮助用户在产品设计阶段就能精确预测和优化电磁场性能&#xff0c;从而极大地降低了实际测试成本&#xff0c;并显著提升了产品的可靠性。 这款软件不仅在电子设计领域有…

Python | Leetcode Python题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; MX5000000 is_prime [1] * MX is_prime[0]is_prime[1]0 for i in range(2, MX):if is_prime[i]:for j in range(i * i, MX, i):#循环每次增加iis_prime[j] 0 class Solution:def countPrimes(self, n: int) -> int:return sum(is_prim…

如何利用ChatGPT改善日常生活:一个普通人的指南

当你打开 ChatGPT&#xff0c;显现的是一个简洁的聊天界面。 许多人利用 ChatGPT 进行日常对话。 然而&#xff0c;ChatGPT 的功能远不止于此。 对话只是其众多能力中的一种&#xff0c;如果仅将其视为高级版的聊天机器人&#xff0c;那未免低估了它。 AI 在信息处理方面的…

【SpringMVC】_SpringMVC实现留言墙

目录 1. 需求分析 2. 接口定义 2.1 提交留言 2.2 获取全部留言 3. 响应数据 4. 服务器代码 4.1 MessageInfo 文件 4.2 MessageController 文件 5. 前端页面代码 5. 运行测试 1. 需求分析 实现如下页面&#xff1a; 1、输入留言信息&#xff0c;点击提交后&#xff0…

【算法专题--链表】两数相加 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 模拟进位 (使用哨兵位头节点) &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f347;思路解析 &#x1f34d;案例图解 四、总结与提炼 五、共勉 一、前言 两数相加 这道题&#xff0c;可以说是--…

如何用一个二维码实现企业固定资产管理?

固定资产管理中普遍存在盘点难、家底不清、账实不一致、权责不清晰等问题。如果平时不规范化执行&#xff0c;年终面对上上下下、大大小小、成百上千件物资要进行盘点整理的时候&#xff0c;会是十分痛苦且低效的事情。 今天这篇文章就来给大家推荐几家便宜好用的二维码固定资…

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…

Python:探索高效、智能的指纹识别技术(简单易懂)

目录 概括 导入库 函数一 参数&#xff1a; 函数二 函数三 主函数 运行结果 src&#xff1a; model_base 7.bmp ​编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征&#xff0c;实现高准确度的身份识别。…

镜头下的光学

说实话&#xff0c;当我看到几何光学的内容全是初中的解析几何的时候&#xff0c;我就觉得讲的方式太原始了&#xff0c;而且太过复杂也看不懂。所以我尝试做了数学建模&#xff0c;发现建模之后模型可以解释一些物理现象&#xff0c;也不会有矛盾的地方&#xff0c;那就算过得…