nginx+keepalived实现nginx高可用集群

news2024/11/17 11:22:54

实现nginx的高可用

一、简要介绍

​ nginx作为一款企业级的代理服务器,在各种企业事业单位中,均有广泛的使用,尤其是在前后端分离的项目中,nginx作为路由转发的功能是非常常用的。在一些流量比较大的项目中,为了应对高并发的场景,后端服务往往采用集群部署,这时候,就需要使用到nginx的负载均衡功能,从而避免应用节点的单节点故障问题。

​ 那么针对nginx的单节点故障问题,我们在实际生产中又应当如何避免呢?我们可以通过nginx+keepalived的高可用集群方案来避免nginx的单节点故障问题,从而大幅度提高nginx的稳定性和可靠性。

​ Keepalived软件主要是实现网站、数据库、业务系统高可用性、自动切换的,主要是基于类似交换机制OSI七层模型:3(网络层)、4(传输层)、7层(应用层)来实现健康检查的,当监测到其中一台服务器宕机或者异常,能够切换到另外一台。

​ Keepalived软件程序主要的功能有两个:

  • 健康检测
    基于类似交换机制OSI七层模型:3(网络层:IP)、4(传输层:IP+PORT)、7层(应用层:FTP、HTTP APP)来实现健康检查;

  • VRRP漂移
    基于VRRP(虚拟路由冗余协议)路由协议来实现两台主机之间高可用,其中包括:MASTER和BACKUP,当MASTER宕机,能够自动化切换至BACKUP,从而让用户持续的访问;

​ 下面,本文将简单介绍一下nginx+keepalived高可用集群的两种常用方案,即nginx+keepalived主从和双主模式。

二、主从模式

​ 这种方案,使用一个VIP地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备机在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案并不经济实惠。

​ 网络架构图如下:请添加图片描述

2.1 架构规划

​ 根据网络架构图,服务器规划如下:

角色ip地址vip地址软件nginx端口OS
192.168.10.101192.168.10.108nginx+keepalived80centos 7.9
192.168.10.102192.168.10.108nginx+keepalived80centos 7.9

2.2 软件安装

2.2.1 nginx

​ 前往nginx官方网站(http://nginx.org/en/download.html)下载最新版nginx,进行编译安装。以1.23.2为例:

# 根据实际情况安装依赖
yum install -y libxml2 libxslt libxslt-devel libxml2-devel gd gd-devel geoip-devel pcre-devel openssl-devel
# 解压并安装nginx
tar -zxvf nginx-1.23.2.tar.gz
cd nginx-1.23.2
./configure \
--prefix=/usr/local/nginx \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_geoip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module

make

make install

本文中,我们不探讨nginx的负载均衡功能,仅仅演示nginx+keepalived的高可用性,故而以nginx静态页面来进行展示:

#设置简单页面,区分两个nginx服务器
vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx! 192.168.10.101</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx! 192.168.10.102</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

​ 分别访问两个Nginx,http://192.168.10.101,http://192.168.10.102。页面如下:在这里插入图片描述
在这里插入图片描述

2.2.2 keepalived

​ 在centos7.9中,自带了keepalived安装包,可以采用yum方式安装,有其他版本需求的,可以自行下载源码安装包进行安装。

yum install -y keepalived

2.3 主从配置

2.3.1 keepalived
2.3.1.1 配置主服务器
cd /etc/keepalived
true > keepalived.conf
vim keepalived.conf

在keepalived.conf中添加以下内容:

! Configuration File for keepalived
 
############################ 全局配置 #############################
  
global_defs {
 
    # 定义管理员邮件地址,表示keepalived在发生诸如切换操作时需要发送email通知,以及email发送给哪些邮件地址,可以有多个,每行一个
	notification_email {    
        #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务	
		137708020@qq.com
	}
    #keepalived在发生诸如切换操作时需要发送email通知地址,表示发送通知的邮件源地址是谁
	notification_email_from 137708020@qq.com
	
	#指定发送email的smtp服务器
	smtp_server 127.0.0.1
	
	#设置连接smtp server的超时时间
	smtp_connect_timeout 30
	
	#运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。
	router_id nginx-1
}
 
 
############################ VRRPD配置 #############################
 
# 定义chk_nginx脚本,脚本执行间隔10秒,权重-10,检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
vrrp_script chk_nginx {  
 
    #这里通过脚本监测    
    script "/data/chk_nginx.sh"   
	
	#脚本执行间隔,每2s检测一次
    interval 2    
	
    #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5	
    weight -10     
	
    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)	
    fall 2     
	
    #检测1次成功就算成功。但不修改优先级	
    rise 1                    
}
 
#定义vrrp实例,VI_1 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
vrrp_instance VI_1 { 
 
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,
	#但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,
	#那么他会就回抢占为MASTER   
    state MASTER 
	
	#指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看
    interface ens33
    
    #当该keepalived切换为MASTER状态时,执行下面的脚本
    notify_master /data/chk_master.sh
    #当该keepalived切换为BACKUP状态时,执行下面的脚本
    notify_backup /data/chk_backup.sh
 
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,
	#一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址    
    mcast_src_ip 192.168.10.101
	
	#虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    virtual_router_id 51    
 
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级	
    priority 100
 
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒	
    advert_int 1        
 
    #设置验证类型和密码。主从必须一样
    authentication {    
	
	    #设置vrrp验证类型,主要有PASS和AH两种
        auth_type PASS           
		
		#设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111           
    }
	
	#VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
	#设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定
    virtual_ipaddress {          
        192.168.10.108
    }
    
	#执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
	track_script {   
 
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。	
	   chk_nginx                    
	}
}
2.3.1.2 配置从服务器
cd /etc/keepalived
true > keepalived.conf
vim keepalived.conf

在keepalived.conf中添加以下内容,与主服务器除了priority优先级不一样外,其他保持一致:

! Configuration File for keepalived    
  
global_defs {
	notification_email {                
		137708020@qq.com
	}
	  
	notification_email_from 137708020@qq.com
	smtp_server 127.0.0.1                    
	smtp_connect_timeout 30                 
	router_id nginx-2                 
}
  
vrrp_script chk_nginx {         
	script "/data/chk_nginx.sh"   
	interval 2                      
	weight -10                       
	fall 2                   
	rise 1                  
}
  
vrrp_instance VI_1 {            
	state BACKUP           
	interface ens33
    notify_master /data/chk_master.sh
    notify_backup /data/chk_backup.sh
	mcast_src_ip 192.168.10.102
	virtual_router_id 51        
	priority 90              
	advert_int 1               
	authentication {            
		auth_type PASS         
		auth_pass 1111          
	}
	virtual_ipaddress {        
		192.168.10.108
	}
 
	track_script {                     
	   chk_nginx                 
	}
 
}
2.3.2 检测脚本设计

​ 在主从服务器,均创建以下检测脚本。

cd /data
#创建nginx检测脚本
vim chk_nginx.sh
###############################################
#!/bin/bash  
A=`ps -C nginx --no-header |wc -l` 
if [ $A -eq 0 ];then 
    /usr/local/nginx/sbin/nginx
    sleep 3 
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ] 
    then
        systemctl stop keepalived 
    fi 
fi
###############################################
chmod +x chk_nginx.sh

2.4 启动

​ 在主从服务器上,分别启动nginx和keepalived服务:

/usr/local/nginx/sbin/nginx 
systemctl start keepalived
#检查ip绑定情况
ip addr show ens33

2.5 验证

2.5.1 验证

分别访问主、从和vip地址:

主:在这里插入图片描述
从:在这里插入图片描述
VIP:在这里插入图片描述

可以看到,访问vip地址其实就是访问了主节点。

也可以通过网卡命令查询:

ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f0:6d:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.10.108/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ca30:6fa0:7f41:3eec/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
2.5.2 切换
  • nginx

    关闭主节点上的nginx服务,观察主节点的nginx是否会被自动重启。如果重启则说明chk_nginx脚本执行成功,如果nginx未能重启,则应当执行脚本中的命令关闭keepalived服务。

  • keepalived

    关闭主节点的keepalived服务,观察vip是否会绑定到从服务器上。

    重启主节点的keepalived服务,观察vip是否会绑定到主服务器上。

三、互为主从

​ 这种方案,使用两个VIP地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于生产架构环境。

​ 网络架构图如下:在这里插入图片描述

3.1 架构规划

​ 根据网络架构图,服务器规划如下:

角色ip地址vip地址软件nginx端口OS
主从192.168.10.101192.168.10.108nginx+keepalived80centos 7.9
从主192.168.10.102192.168.10.109nginx+keepalived80centos 7.9

3.2 软件安装

​ 软件安装与前面2.2章节一模一样,此处不再赘述。

3.3 互为主从配置

3.3.1 keepalived配置

​ 在双主模式中,大致内容与主从模式一样,需要额外添加以下内容,添加一个新的VIP,需要注意的是初始的服务器角色是反的。

3.3.1.1 配置主服务器

在原有的keepalived.conf下增加以下配置

#定义vrrp实例,VI_2 为虚拟路由的标示符,自己定义名称,keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管 
vrrp_instance VI_2 {   
  
    #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,  
    #但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,  
    #那么他会就回抢占为MASTER     
    state BACKUP   
      
    #指定HA监测网络的接口。与本机 IP 地址所在的网络接口相同,可通过ip addr 查看  
    interface ens33        
    
    #当该keepalived切换为MASTER状态时,执行下面的脚本
    notify_master /data/chk_master.sh
    #当该keepalived切换为BACKUP状态时,执行下面的脚本
    notify_backup /data/chk_backup.sh
    
    # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,  
    #一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址      
    mcast_src_ip 192.168.10.101
      
    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的  
    virtual_router_id 52     
  
    #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级     
    priority 90   
  
    #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒     
    advert_int 1          
  
    #设置验证类型和密码。主从必须一样  
    authentication {      
      
        #设置vrrp验证类型,主要有PASS和AH两种  
        auth_type PASS             
          
        #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信  
        auth_pass 1111             
    }  
      
    #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写  
    #设置VIP,它随着state变化而增加删除,当state为master的时候就添加,当state为backup的时候则删除,由优先级决定  
    virtual_ipaddress {            
        192.168.10.109
    }  
      
    #执行nginx检测脚本。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!  
    track_script {     
  
       #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。 
       chk_nginx                      
    }  
}
3.3.1.2 配置从服务器

在原有的keepalived.conf下增加以下配置

vrrp_instance VI_2 {
        state MASTER
        interface ens33
        notify_master /data/chk_master.sh
        notify_backup /data/chk_backup.sh
        mcast_src_ip 192.168.10.102
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 1111
        }
        virtual_ipaddress {
                192.168.10.109
        }

        track_script {
           chk_nginx
        }
}
3.3.2 检测脚本设计

​ 在主从服务器,均创建以下检测脚本。

cd /data
#创建nginx检测脚本
vim chk_nginx.sh
###############################################
#!/bin/bash
counter=$(ps -ef|grep nginx | grep -v 'grep'|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/local/nginx/sbin/nginx || true
    sleep 2
    counter=$(ps -ef|grep nginx | grep -v 'grep'|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived
    fi
fi
###############################################
chmod +x chk_nginx.sh

3.4 启动

在主从服务器上,分别启动nginx和keepalived服务:

/usr/local/nginx/sbin/nginx 
systemctl start keepalived
#检查ip绑定情况
ip addr show ens33

3.5 验证

分别访问主、从和两个vip地址,以及分别停止两个节点的nginx和keepalived服务进行验证。不再赘述。

四、附加脚本

  • nginx_rsync.sh

执行方式:后台,nohup sh nginx_rsync.sh 该脚本只有一台主机在后台执行,此外执行改脚本需要提前配置ssh互信免密登录。

#!/bin/bash
ip_address="192.168.10.101"

inotify_cmd="inotifywait -mrq -e modify,create,attrib,move,delete /usr/local/nginx/"
rsync_cmd="rsync -azH --delete /usr/local/nginx/ root@${ip_address}:/usr/local/nginx/"

$inotify_cmd | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ];then
        $rsync_cmd
        ssh root@${ip_address} "/usr/local/nginx/sbin/nginx -t"
        if [ $? -eq 0 ];then
            ssh root@${ip_address} "/usr/local/nginx/sbin/nginx -s reload"
        fi        
    fi
done

PS:本文件同步脚本引用自https://blog.csdn.net/qq_25331821/article/details/54629918

  • chk_master.sh

在keepalived配置文件中配置,当发生主从切换时被调用执行,发送的内容和发送方式根据实际需要进行调整。

#!/bin/bash
time=$(date +%Y-%m-%d-%H-%M)
echo$time nginx-2已故障停机,VIP飘逸至nginx-1!”|mail -s nginx VIP飘逸提醒 137708020@qq.com
  • chk_backup.sh
#!/bin/bash
time=$(date +%Y-%m-%d-%H-%M)
echo$time nginx-1已故障停机,VIP飘逸至nginx-2!”|mail -s nginx VIP飘逸提醒 137708020@qq.com
  • chk_nginx.sh

nginx健康检查,在keepalived配置文件中配置。

#!/bin/bash  
A=`ps -C nginx --no-header |wc -l` 
if [ $A -eq 0 ];then 
    /usr/local/nginx/sbin/nginx
    sleep 3 
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ] 
    then
        systemctl stop keepalived 
    fi 
fi

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

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

相关文章

idea+tomcat+mysql 从零开始部署Javaweb项目(保姆级别)

文章目录 新建一个项目添加web支持配置tomcat优化tomcat的部署运行tomcatidea数据库连接java连接数据库 新建一个项目 new project&#xff1b;Java&#xff1b;选择jdk的版本&#xff1b;next&#xff1b;next&#xff1b;填写项目名字&#xff0c;选择保存的路径&#xff1b;…

raid 磁盘阵列

raid 磁盘阵列&#xff1a; **条带化存储&#xff1a;**数据分散在多个物理磁盘上的存储方式。利用多个磁盘并行读取和写入。 条带化的存储性能和读写性能是最好的。 磁盘的组成方式不同&#xff0c;也就是不同的raid级别&#xff1a; **raid 0&#xff08;条带化存储&#x…

.net JQ AJAX 请求 FromBody 接收格式

$.ajax({ url: “/api/banchang/EmpTble/Login2”, type: ‘Post’, data: JSON.stringify({ Emppassword: pass, EmpName: name }), contentType: ‘application/json’, beforeSend: function () { // 禁用按钮防止重复提交 /* $(“#create”).attr({ disabled: “disabled”…

SpringBoot与Spring Framework提供的缓存抽象

目录 缓存 项目总结 新建一个SpringBoot项目 pom.xml application.properties CacheConfig Book BookRepository接口 BookService服务类 BookController控制器 SpringbootCacheApplication启动类 启动项目&#xff0c;使用Postman测试 参考博文&#xff1a; 1、使用…

短视频脚本创作的五个方法 沈阳短视频剪辑培训

说起脚本&#xff0c;我们大概都听过影视剧脚本、剧本&#xff0c;偶尔可能在某些综艺节目里听过台本。其中剧本是影视剧拍摄的大纲&#xff0c;用来指导影视剧剧情的走向和发展&#xff0c;而台本则是综艺节目流程走向的指导大纲。 那么&#xff0c;短视频脚本是什么&#xf…

服务器端请求伪造--SSRF

SSRF 简介 ##SSRF定义 SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由 攻击者构造形成&#xff0c;由服务端发起请求 的一个安全漏洞。一般情况下&#xff0c;SSRF攻击的目标是从 外网无法访问的内部系统&#xff08;正是因为它是由服务端发起的&#xff0c;所…

FineReport帆软设计器,远程连接服务器

FineReport报表工具一款纯Java编写的企业级web报表软件工具。它能够全面支持主流的B/S架构以及传统的C/S架构&#xff0c;部署方式简单而灵活. 需要使用FineReport帆软设计器&#xff0c;配置远程服务器的方式如下&#xff1a; 1、打开帆软设计器&#xff0c;点击文件&#x…

工程项目管理系统的Java实现:高效协同与信息共享

在当今的工程领域&#xff0c;项目管理的高效协同和信息共享是提升工作效率、降低成本的关键。本文将向您介绍一款基于Java技术构建的工程项目管理系统&#xff0c;该系统采用前后端分离的先进技术框架&#xff0c;功能全面&#xff0c;能够满足不同角色的需求&#xff0c;从项…

中英文语音合成芯片(TTS芯片)WT3000T8-在ETC上的应用案例

一&#xff1a;开发背景&#xff1a; 随着智能化浪潮的推进&#xff0c;ETC&#xff08;电子不停车收费&#xff09;系统已逐渐成为现代交通的重要组成部分。在这一背景下&#xff0c;唯创知音自主研发的WT3000T8中文转语音合成芯片&#xff08;TTS芯片&#xff09;以其卓越的性…

基于TAE的数字钥匙自动化测试解决方案

方案概述 在汽车发展和用户需求的推动下&#xff0c;汽车钥匙开始从传统的机械钥匙向数字化、智能化方向发展。目前常见的数字钥匙集成了蓝牙、NFC、UWB等技术实现了移动设备与车端的通信&#xff0c;可以帮助用户便捷的实现车辆功能控制。随着数字钥匙的广泛应用&#xff0c;相…

振弦式位移计在各类工程中的应用

振弦式位移计&#xff0c;作为一种高精度、高可靠性的测量工具&#xff0c;在各类工程中发挥着至关重要的作用。它通过测量弦的振动频率来间接得出结构的位移变化&#xff0c;为工程师和科学家们提供了精确的数据支持&#xff0c;从而确保工程的安全性和稳定性。 点击输入图片描…

YOLOv5改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码/涨点能手】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在图像识别中&#xff0c;学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系&#xff0c;但这种形式效率极低。因此&…

Hudi之数据读写探究

Hudi之数据读写深入探究 1. Hudi数据写入 1-1. 写操作 Hudi数据湖中的数据更新、插入和删除操作&#xff0c;是一个基于Apache Hadoop的库&#xff0c;为数据湖提供了一种有效的方法来处理更新和增量数据&#xff0c;并支持基于时间的快照和增量数据处理。Hudi支持三种主要的…

Linux源码编译安装MySQL + Qt连接MySQL

一、准备工作 1. 编译环境&#xff1a; 银河麒麟V10 飞腾D2000 CPU 2. 下载MySQL源码 这里编译的是5.7.44版本&#xff0c;带Boost库&#xff0c;这是官网的下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 3. 解压压缩包 tar -zxvf mys…

Guns框架:基于主流技术Spring Boot2 + Vue3 + Antd Vue的现代Java应用开发新纪元

Guns框架&#xff1a;基于主流技术Spring Boot2 Vue3 Antd Vue的现代Java应用开发新纪元 摘要&#xff1a;随着信息技术的飞速发展&#xff0c;软件开发框架在提升开发效率、降低成本方面扮演着至关重要的角色。Guns框架&#xff0c;作为一个现代化的Java应用开发框架&#x…

vue3 组件的动态渲染 <component :is=“componentTag“ />

1、动态渲染组件 <component :is""></component> 通过isShow来切换显示A、B组件 首先创建父组件.vue文件和两个子组件A、B文件&#xff0c;并引入。 template&#xff1a; <div><h3>我是父组件dynamicComp.vue</h3><button clic…

firebase如何自定义上传日志

我们可以很轻松的得到2个代码&#xff1a; Firebase.crashlytics.log(str) Firebase.crashlytics.recordException(ex)这就是firebase提供的自定义日志和excption上传的方法。 但是如果你认为log函数调用后&#xff0c;直接就能查看到日志就错了。 我们在这个page是找不到日志…

端午节粽子龙舟主题互动趣味小游戏效果是什么

端午三天乐&#xff0c;无论节日当天还是之前&#xff0c;行业商家都可以自己的品牌为主借势营销&#xff0c;趣味活动形式玩法和内容呈现达成多种效果&#xff0c;品牌传播、公众号涨粉、线下互动、商品促销、用户促活等。 在【雨科】平台拥有多款端午节互动小游戏类型&#…

操作系统真象还原:编写MBR主引导记录,让我们开始掌权

第2章-编写MBR主引导记录&#xff0c;让我们开始掌权 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 在开机的一瞬间&#xff0c;也就是接电的一瞬间&#xff0c; CPU 的 CS: ip 寄存器被强制初始化为 0XF000: 0XFFF0。由于开机的时候处于实模式&…

第一课、Power BI 集成Python

1&#xff0c;下载安装python Python软件地址&#xff1a;Welcome to Python.org 双击自定义安装指定位置并勾选配置环境变量。 后续一直往下&#xff0c;安装完成。 检验是否成功&#xff0c;在cmd命令窗口下输入python 即可看到版本。 安装 pip install pandas 和 pip…