高可用集群keep-alive

news2024/12/29 2:14:22

keepalive简介
keepalive为LVS应用延伸的高可用服务。lvs的调度器无法做高可用。但keepalive不是为lvs专门集群服务的,也可以为其他的的代理服务器做高可用。
keepalive在lvs的高可用集群,主调度器和备调度器(可以有多个) 一主两备或一主一备。

VRRP: keepalived是基于vrrp协议实现Ivs服务的高可用。解决了调度器单节点的故障问题。
VRRP协议:提高网络路由器的可靠性开发的一种协议。

vrrp工作原理
·选举出主和备,预先设定主备的优先级。主的优先级较高,备的优先级低,一旦开启服务器,优先级高的,会自定抢占主的位置。
·VRRP组播通信: 224.0.0.18 VRRP协议当中的主备服务器通过组播地进行通信,交换主备服务器之间的运行状态。主服务会周期性的发送vrrp协议报文,告诉备:主的当前状态。
·主备切换:主服务器发生故障,或者不可达,VRRP协议会把请求转义到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常处理客户端的请求。
·故障恢复: 一旦主服务器恢复通信,由组播地址进行通信,发现在恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接受请求。

keepalive工作原理
主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器处于冗余状态。
不参与集群的运转。主调度器故障无法运行,备调度器才会承担主调度器的工作。
一旦主调度恢复工作,继续由主调度器进行处理,备调度器又成了冗余。

一、高可用集群

1.1 集群类型

Keep-alive高可用集群通常是指通过一些机制保持服务可用性的分布式系统,常见的集群类型包括:

  1. 负载均衡(LB):这种类型的集群主要用于分发用户请求到一组服务器,以平均负载并防止单台服务器过载。LB可以是硬件设备(如F5 BIG-IP)或软件解决方案(如Nginx,HAProxy)。它根据预设策略将流量分配给各个节点,提高整个系统的可用性和性能。

  2. 高可用集群(HA):设计目的是确保即使某个组件故障也能继续运行。这通常涉及到冗余配置、自动故障检测和恢复机制。比如,通过主备模式或多副本数据库来避免单点故障。常见于关键业务系统,如数据库、Web服务器等。

  3. 单点故障(Spof) 解决方案:Spof通常指系统中的某个单一元素,一旦这个元素宕机,整个系统就会失效。解决办法可能是采用高可用设计,例如前面提到的主备结构,或者是使用分布式系统来分散风险。

  4. 高性能计算集群(HPC):这类集群专为需要大量计算资源的任务设计,如科学模拟、数据分析或大规模机器学习。HPC集群通常包含大量的高性能服务器和优化的硬件配置,以及专门的调度和文件存储系统,如Slurm、SGE等。

1.2系统可用性

系统可用性是指系统在特定条件下,能够正常执行其预定功能的能力。它通常通过一系列指标来衡量,如系统的稳定性、响应时间、故障恢复能力等。高可用性的系统能够确保在面临各种故障或挑战时,仍然能够持续提供服务,从而满足用户的需求。

SLA(服务等级协议)

SLA是提供服务的企业与客户之间就服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约。它明确规定了服务提供商必须达到的服务标准,以及未达到这些标准时应承担的责任。SLA的核心目的是确保服务提供商和客户

1.3 系统故障

硬件故障:设计缺陷、 wear out (损耗)、非人为不可抗拒因素

软件故障:设计缺陷 bug

1.4 实现高可用

  • 提升系统高用性的解决方案:降低 MTTR- Mean Time To Repair( 平均故障时间 )
  • 解决方案:建立冗余机制
  • active/passive 主/备

    active/active 双主

    active --> HEARTBEAT --> passive

    active <--> HEARTBEAT <--> active

二、Keepalived配置

1.1环境搭建

k1:172.25.254.10

k2:172.25.254.20

client:172.25.254.200

webserver1:172.25.254.110

webserver2:172.25.254.120

(1).webserver1和webserver2上都装httpd、写入测试文字、开启http服务

[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo 172.25.254.110 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd.service

(2).k1和k2上测试

[root@k1 ~]# curl 172.25.254.110
172.25.254.110
[root@k1 ~]# curl 172.25.254.120
172.25.254.120

2.1配置虚拟路由器

(1).开启服务,进入k1主配置文件编写代码

[root@k1 ~]# systemctl start keepalived.service 
[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {               
   notification_email {
     2815074063@qq.com       
   }
   notification_email_from keepalived@rhel7.org       
   smtp_server 127.0.0.1                             
   smtp_connect_timeout 30                         
   router_id k1.rhel7.org                              
   vrrp_skip_check_adv_addr                           
   vrrp_strict                                         
   vrrp_garp_interval 0                               
   vrrp_gna_interval 0                                
   vrrp_mcast_group4 224.0.0.18                        
}
 
vrrp_instance VI_1 {                                  
    state MASTER
    interface eth0                                     
    virtual_router_id 100    
    priority 100            
    advert_int 1                                       
    authentication {                                  
        auth_type PASS       
        auth_pass 1111                               
    }
    virtual_ipaddress {                                
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

(2).开启服务,进入k2主配置文件编写代码

[root@k2 ~]# systemctl start keepalived.service 
[root@k2 ~]# vim /etc/keepalived/keepalived.conf 

global_defs {
   notification_email {
     3283085081@qq.com
   }
   notification_email_from keepalived@rhel7.org
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id k2.rhel7.org
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   vrrp_mcast_group4 224.0.0.18
}
 
vrrp_instance VI_1 {
    state BACKUP              
    interface eth0
    virtual_router_id 100        
    priority 80                 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

(3).重启服务

[root@k2 ~]# systemctl restart keepalived.service

(4).测试

[root@k1 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.254.10  netmask 255.255.255.0  broadcast 172.25.254.255
        inet6 fe80::20c:29ff:fe5d:d389  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5d:d3:89  txqueuelen 1000  (Ethernet)
        RX packets 5024  bytes 399854 (390.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6216  bytes 508605 (496.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.25.254.100  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 00:0c:29:5d:d3:89  txqueuelen 1000  (Ethernet)

3.1开启通信功能及独立日志

(1).进入配置文件编写策略并重启

vrrp_strict添加此选项无法访问 vip ,可以用 nft list ruleset 查看

[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

(2).开启日志功能

[root@k1 ~]# vim /etc/sysconfig/keepalived 

-D:这个选项使得 Keepalived 守护进程在前台运行,并且会打印日志到标准输出(stdout)和错误输出(stderr)。

-S 6:这个选项用于设置 Keepalived 的日志级别。Keepalived 的日志级别范围从 0 到 7,其中 0 表示最少量的日志信息(仅错误信息),而 7 表示最详细的日志信息(包括调试信息)

[root@k1 ~]# systemctl restart keepalived.service 

(3).测试:此时vip通信开启

[root@k1 ~]# ping 172.25.254.100
PING 172.25.254.100 (172.25.254.100) 56(84) bytes of data.
64 bytes from 172.25.254.100: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 172.25.254.100: icmp_seq=2 ttl=64 time=0.093 ms
64 bytes from 172.25.254.100: icmp_seq=3 ttl=64 time=0.066 ms
64 bytes from 172.25.254.100: icmp_seq=4 ttl=64 time=0.067 ms

(4).进入rsyslog.conf配置文件写日志路径并重启

[root@k1 ~]# vim /etc/rsyslog.conf 

[root@k1 ~]# systemctl restart rsyslog.service 

(5).测试:可以看到有日志生成

[root@k1 ~]# ll /var/log/keepalived.log 
-rw------- 1 root root 12086 8月  12 13:29 /var/log/keepalived.log
 
[root@k1 ~]# tail -3 /var/log/keepalived.log 
Aug 12 13:29:12 k1 Keepalived_healthcheckers[5809]: Lost quorum 1-0=1 > 0 for VS [192.168.200.100]:443
Aug 12 13:29:12 k1 Keepalived_healthcheckers[5809]: Remote SMTP server [127.0.0.1]:25 connected.
Aug 12 13:29:12 k1 Keepalived_healthcheckers[5809]: SMTP alert successfully sent.

4.1独立子配置文件
       当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理。将不同集群的配置,比如:不同集群的 VIP 配置放在独立的子配置文件中利用 include 指令可以实现包含 子配置文件。
(1).创建子文件并写策略,记得将主配置文件的策略注释掉并写入子配置文件的路径

[root@k1 ~]# mkdir -p /etc/keepalived/conf.d
[root@k1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:1
    }
}

(2).重启服务

[root@k1 ~]# systemctl restart keepalived.service 

(3).测试:可以看到子配置文件生效了

[root@k1 ~]# ll /etc/keepalived/conf.d/172.25.254.100.conf 
-rw-r--r-- 1 root root 271 8月  12 13:27 /etc/keepalived/conf.d/172.25.254.100.conf

三、应用示例

1.非抢占模式 nopreempt

默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动。

建议设置为非抢占模式 nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机。

注意:要关闭 VIP抢占,必须将各 keepalived 服务器state配置为BACKUP

(1).ka1主机配置

编辑keepalived.conf配置:

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 100
   priority 100
   nopreempt 
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       172.25.254.100/24 dev en33 label en33:1
   }
}

(2).ka2主机配置

编辑keepalived.conf配置:

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 100
   priority 80 
   advert_int 1
   nopreempt 
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
     172.25.254.100/24 dev ens33 label ens33:1
   }
}
(3).重启服务并进行测试

systemctl restart Keepalived.service

 先重启ka1服务,再重启ka2服务:

 (4).关闭ka1服务:

systemctl stop Keepalived.service

(5).再重启ka1服务:

抓包还是ka2,vip还在ka2,因为非抢占模式,即使优先级高的主机恢复,也不会抢占优先级低的主机,如果原来的主机down机,vip迁移至新的主机,后续也发生down机时,会将vip迁移会源主机。

2.1抢占延迟模式 preempt_delay

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回VIP,而是延迟一段时间(默认300s)再抢回 VIP。

注意:需要各keepalived服务器state为BACKUP,并且不要启用 vrrp_strict

(1).ka1主机配置

编辑keepalived.conf配置:

[root@ka1 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 100
   priority 100 #优先级高
   preempt_delay 5s 
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
       172.25.254.100/24 dev ens33 label ens33:1
   }
}

(2).ka2主机配置

编辑keepalived.conf配置:

[root@ka2 ~]# vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
   state BACKUP
   interface ens33
   virtual_router_id 100
   priority 80 #优先级低
   advert_int 1
   preempt_delay 5s 
   authentication {
       auth_type PASS
       auth_pass 1111
   }
   virtual_ipaddress {
     172.25.254.100/24 dev ens33 label ens33:1
   }
}

(3).测试结果

先重启ka2的服务,再重启ka1的服务:

等延迟时间过了才会抢占ka2的vip

抢占延迟模式,即优先级高的主机恢复后,不会立即抢回 VIP ,而是延迟一段时间(默认 300s )再抢回VIP

3.1VIP单播配置
       默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量。在所有节点vrrp_instance语句块中设置对方主机的IP,建议设置为专用于对应心跳线网络的地址,而非使用业务网络。注意:启用 vrrp_strict 时,不能启用单播。

(1).k1配置:

unicast_src_ip 172.25.254.10     
    unicast_peer {
        172.25.254.20           
    }                           

(2).k2配置:

unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }

(3).测试单播效果:

[root@k1 ~]# tcpdump -i eth0 -nn src host 172.25.254.20 and dst 172.25.254.10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:04:39.790162 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
15:04:40.791608 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20
15:04:41.792787 IP 172.25.254.20 > 172.25.254.10: VRRPv2, Advertisement, vrid 100, prio 80, authtype simple, intvl 1s, length 20

4.1通知脚本配置

 当 keepalived 的状态变化时,可以自动触发脚本的执行,比如:发邮件通知用户,默认以用户 keepalived_script 身份执行脚本, 如果此用户不存在,以 root 执行脚本可以用下面指令指定脚本执行用户的身份。

(1).K1和K2上安装邮件发送工具:

[root@k1 ~]# yum install mailx -y

(2).修改mail.rc配置文件:

[root@k2 ~]# vim /etc/mail.rc 

(3).创建通知脚本,并添加可执行权限:

[root@K1 ~]# vim /etc/keepalived/mail.sh

#!/bin/bash
mail_dst="3283085081@qq.com"
send_message()
{
   mail_sub="$HOSTNAME to be $1 vip move"
   mail_msg="`date +%F\ %T`: vrrp move $HOSTNAME chage $1"
   echo $mail_msg | mail -s "$mail_sub" $mail_dst
}
 
case $1 in
   master)
   send_message master
   ;;
   backup)
   send_message backup
   ;;
   fault)
   send_message fault
   ;;
   *)
   ;;
esac

[root@K1 ~]# chmod +x /etc/keepalived/mail.sh

(4).在 vrrp_instance VI_1语句块的末尾加下面三行,重启服务:

[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

    notify_master "/etc/keepalived/mail.sh master"
    notify_backup "/etc/keepalived/mail.sh backup"
    notify_fault "/etc/keepalived/mail.sh fault"

(5).测试:

5.1实现master/slave的keepalived双主架构:

master/slave 的单主架构,同一时间只有一个 Keepalived 对外提供服务,此主机繁忙,而另一台主机却很空闲,利用率低下,可以使用 master/master 的双主架构,解决此问题。
       master/master 的双主架构:即将两个或以上 VIP 分别运行在不同的 keepalived 服务器,以实现服务器并行提供 web 访问的目的,提高 服务器资源利用率 。

(1).k1配置:

vrrp_instance VI_2 {
    state BACKUP                    #备
    interface eth0
    virtual_router_id 200
    priority 80                     
    advert_int 1
    #nopreempt
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.10
    unicast_peer {
        172.25.254.20
    }
}

(2).k2配置:

vrrp_instance VI_2 {
    state MASTER                  #主 ,
    interface eth0
    virtual_router_id 200
    priority 100                  
    advert_int 1
    #nopreempt
    #preempt_delay 5s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:2
    }
    unicast_src_ip 172.25.254.20
    unicast_peer {
        172.25.254.10
    }
}

(3).测试:可以看到两台服务器各有一个vip

6.1实现IPVS的高可用性

(1).准备web服务器并使用脚本绑定VIP至web服务器lo网卡

[root@webserver1 ~]# ip a a 172.25.254.100/32 dev lo

(2).使vip不对外响应,重载生效查看

[root@webserver1 ~]# vim /etc/sysctl.d/arp.conf 

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@webserver1 ~]# sysctl -p
[root@webserver1 ~]# sysctl --system

(3).k1和k2上安装ipvsadm软件

[root@k1 ~]# yum install ipvsadm -y

(4).修改k1和k2配置文件并重启服务

[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

virtual_server 172.25.254.100 80 {     
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    protocol TCP
 
    real_server 172.25.254.110 80 {
        weight 1
        HTTP_GET {                      
            url {
                path /                  
                status_code 200         
            }
            connect_timeout 3           
            nb_get_retry 2              
            delay_before_retry 2        
         }
     }
 
    real_server 172.25.254.120 80 {
        weight 1
        HTTP_GET {
            url {
                path /
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 2
            delay_before_retry 2
         }
     }
}

(5).查看是否自动生成lvs策略,如果没有检查配置文件

[root@k1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 wrr
  -> 172.25.254.110:80            Route   1      0          0         
  -> 172.25.254.120:80            Route   1      0          1  

(6).测试:客户端访问,当K1故障时自动切换到k2,不会影响客户的体验

[root@client ~]# for i in {1..10}
> do 
> curl 172.25.254.100
> done
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110

7.1 利用脚本实现主从角色切换

keepalived 利用 VRRP Script 技术,可以调用外部的辅助脚本进行资源监控,并根据监控的结果实现优先动态调整,从而实现其它应用的高可用性功能 。
       vrrp_script :自定义资源监控脚本, vrrp 实例根据脚本返回值,公共定义,可被多个实例调用,定 义在 vrrp 实例之外的独立配置块,一般放在 global_defs 设置块之后。 通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对 MASTER 节点的权重减至低于 SLAVE 节点,从而实现 VIP 切换到 SLAVE 节点。
       track_script :调用 vrrp_script 定义的脚本去监控资源,定义在 VRRP 实例之内,调用事先定义的 vrrp_script。

(1).定义脚本并添加可执行权限

[root@k1 ~]# vim /etc/keepalived/test.sh

#!/bin/bash
[ ! -f /mnt/liu ]

(2).修改配置文件并重启服务

[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

vrrp_script check_file {              
    script "/etc/keepalived/test.sh"   
    interval 1                         
    weight -30                         
    fall 2                             
    rise 2                             
    timeout 2                          
}
    track_script {                   
        check_file
    }

(3).测试:

此时k1上有vipv

创建脚本,可以看到vip漂到了k2上

[root@k1 ~]# touch /mnt/liu
[root@k1 ~]# ls /mnt/
liu

8.1实现haproxy的高可用性

(1).k1和k2上安装haproxy服务

[root@k1 ~]# yum install haproxy -y

(2).开启k1和k2内核路由器功能

[root@k2 ~]# vim /etc/sysctl.conf 

[root@k1 ~]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1

(3).编写haproxy.cfg配置文件并重启服务

[root@k1 ~]# vim /etc/haproxy/haproxy.cfg 

listen webcluster
    bind 172.25.254.100:80
    mode http
    balance roundrobin
    server web1 172.25.254.110:80 check inter 3 fall 2 rise 5
    server web2 172.25.254.120:80 check inter 3 fall 2 rise 5

[root@k1 ~]# systemctl restart haproxy.service 

(4).编写监测脚本

[root@k1 ~]# vim /etc/keepalived/test.sh 

#!/bin/bash
killall -0 haproxy

[root@k1 ~]# vim /etc/keepalived/keepalived.conf 

(5).修改配置文件并重启服务

vrrp_script check_haproxy {
    script "/etc/keepalived/test.sh"
    interval 1
    weight -30
    fall 2
    rise 2
    timeout 2
}
    track_script {
        check_haproxy
    }

(6).测试:客户端访问,当一台服务器故障时自动切换到另一台服务器,不会影响客户的体验

[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110
172.25.254.120
172.25.254.110

抓大放小 

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

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

相关文章

Windows下枚举USB设备信息Demo

目录 1 简介 1.1 设备接口类 1.2 枚举设备信息原理 2 SetupDi系列函数介绍 2.1 SetupDiGetClassDevs 2.2 SetupDiEnumDeviceInfo 2.3 SetupDiGetDeviceRegistryProperty 2.4 SetupDiGetDeviceRegistryProperty 3 演示Demo 3.1 开发环境 3.2 功能介绍 3.3 下载地址 …

70 爬楼梯

解题思路一&#xff1a;&#xff08;动态规划&#xff09; \qquad 假设F(n)返回的是爬n阶的所有方法个数&#xff0c;由题可知&#xff0c;每次可以爬1-2级台阶&#xff0c;那么可以得到&#xff1a; \qquad \qquad \qquad \qquad \qquad F(n) F(n - 1) F(n - 2) \qquad 我…

WeTab AI桌面端的下载安装

wetab AI的使用很方便&#xff0c;收费也不高&#xff0c;专业版的最新版本的AI核心配置如下&#xff1a; 现在推出了桌面端&#xff0c;下载链接&#xff1a;桌面端下载链接 在下载页面点击windows&#xff08;Beta版&#xff09;&#xff1a; 下载并安装&#xff0c;桌面上就…

DRF组件讲解

DRF组件 1. Web应用模式 在开发Web应用中&#xff0c;有两种应用模式&#xff1a; 前后端不分离[客户端看到的内容和所有界面效果都是由服务端提供出来的。 前后端分离【把前端的界面效果(html&#xff0c;css&#xff0c;js分离到另一个服务端&#xff0c;python服务端只需…

LLM agentic模式之工具使用: Toolformer、CoA、MM-React思路

Toolformer Toolformer出自2023年2月Meta上传的论文《Toolformer: Language Models Can Teach Themselves to Use Tools》&#xff0c;它提出了一种通过自监督训练的方式来让模型决定调哪个API什么时候调用。 API调用的表示&#xff1a;为了让模型去能够调用API&#xff0c;将…

实现随机地牢与摄像机追随与拖拽

//author bilibili 民用级脑的研发记录 // 开发环境 小熊猫c 2.25.1 raylib 版本 4.5 // 2024-7-14 // AABB 碰撞检测 在拖拽&#xff0c;绘制&#xff0c;放大缩小中 // 2024-7-20 // 直线改每帧打印一个点&#xff0c;生长的直线&#xff0c;直线炮弹 // 2024-8-4 // 实现敌…

JavaScript高级程序设计 -- -- 观后记录

一、什么是 JavaScript 1、JavaScript 实现 完整的 JavaScript 实现包含以下几个部分&#xff1a; -- --  核心&#xff08;ECMAScript&#xff09;  文档对象模型&#xff08;DOM&#xff09;  浏览器对象模型&#xff08;BOM&#xff09; 2、DOM 文档对象模型&#…

橙色简洁大气体育直播自适应模板赛事直播门户自适应网站源码

源码名称&#xff1a;酷黑简洁大气体育直播自适应模板赛事直播门户网站 源码开发环境&#xff1a;帝国cms 7.5 安装环境&#xff1a;phpmysql 带采集&#xff0c;可以挂着电脑上自动采集发布&#xff0c;无需人工操作&#xff01; 橙色简洁大气体育直播自适应模板赛事直播门户…

广州必看自闭症康复机构十大排名名单出炉

在众多为自闭症儿童提供帮助的机构中&#xff0c;星贝育园以其卓越的服务和显著的成效脱颖而出&#xff0c;成功跻身广州必看自闭症康复机构十大排名。 星贝育园在广州、浙江拥有三个校区&#xff0c;为更多的自闭症儿童和家庭带来了希望。这里的特教老师和生活老师不辞辛劳&a…

一次现网redis CPU使用率异常定位

背景 618大促前&#xff0c;运维对系统做巡检时发现redis cpu利用率白天基本保持在72%左右&#xff0c;夜里也在60%以上。担心618流量比平时大&#xff0c;导致redis超负荷&#xff0c;因此找开发进行优化&#xff0c;降低redis的负载。 定位思路 其实资源使用率过高定位都…

大数据技术—— Clickhouse安装

目录 第一章 ClickHouse入门 1.1 ClickHouse的特点 1.1.1 列式存储 1.1.2 DBMS的功能 1.1.3 多样化引擎 1.1.4 高吞吐写入能力 1.1.5 数据分区与线程级并行 1.1.6 性能对比 第二章 ClickHouse的安装 2.1 准备工作 2.1.1 确定防火墙处于关闭状态 2.1.2 CentOS取消…

Vue UI - 可视化的Vue项目管理器

概述 Vue CLI 3.0 更新后&#xff0c;提供了一套全新的可视化Vue项目管理器 —— Vue UI。所以要想使用它&#xff0c;你的 Vue CL I版本必须要在v3.0以上。 一、启动Vue UI 1.1 环境准备 1.1.1 安装node.js 访问官网&#xff08;外网下载速度较慢&#xff09;或 http://nod…

民航管理局无人机运营合格证技术详解

1. 证书定义与意义 民航管理局无人机运营合格证&#xff08;以下简称“合格证”&#xff09;是对符合民航法规、规章及标准要求的无人机运营单位或个人进行资质认证的重要证明。该证书旨在确保无人机运营活动的安全、有序进行&#xff0c;保护国家空域安全&#xff0c;维护公众…

电子电气架构 --- 软件定义汽车需要怎么样的EE架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

反射型XSS的几种payload

目录 第一种&#xff1a;采用的是urlcode编码 第二种&#xff1a;前面用html实体编码&#xff0c;后面用urlcode编码 第三种&#xff1a;只对&#xff1a;使用urlcode编码 第四种&#xff1a;对<>进行html实体编码 第五种&#xff1a;textarea 第六种&#xff1a;和…

【JavaEE】锁策略和CAS

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【Java】登神长阶 史诗般的Java成神之路 &#x1f4b0;一.常见的的锁策略 锁策略&#xff08;Locking Strategy&#xff09;是指在多线程环境中&#xff0c;为了控制对共享资源的访问&#xff0c;确保…

「OC」探索CALayer:基础知识与实用技巧简要介绍

「OC」探索CALayer&#xff1a;基础知识与实用技巧简要介绍 文章目录 「OC」探索CALayer&#xff1a;基础知识与实用技巧简要介绍前言认识CALayerCALayer的相关属性 UIView和CALayer区别联系创建UIView和CALayer的原因 开始创建CALayer视图层级CALayers 和 Sublayersposition与…

javaweb-flex布局

1. flex布局原理 flex是flexible Box的缩写&#xff0c;意味着"弹性布局"&#xff0c;用来为盒子模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局。 当我们为父盒子设为flex布局以后&#xff0c;子元素的float、clear和vertical-align属性都将失…

【质因数分解】将正整数分解质因数

将一个正整数分解成质因数&#xff0c;例如&#xff1a;输入90&#xff0c;打印输出 902*3*3*5 使用C语言实现&#xff1a; #include<stdio.h>int main(){int n,i;printf("请输入需要分解的正整数&#xff1a; ");scanf("%d",&n);for(i2;i<…

六. 部署分类器-deploy-classification-basic

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main.cpp2.2 model.cpp 3. 补充说明结语下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第六章—部署分类器&#xff…