Keepalived入门指南:实现故障转移和负载均衡
文章目录
- 一、简介
- 1. Keepalived概述
- 2. 高可用性和负载均衡的重要性
- 二、故障转移
- 1. 什么是故障转移
- 2. Keepalived的故障转移原理
- a) VRRP协议
- b) 虚拟路由器ID和优先级
- 3. 配置Keepalived实现故障转移
- a) 主备服务器的设置
- b) 监控网络接口
- c) 虚拟IP的配置
- d) 备份服务器接管流程
- 三、负载均衡
- 1. 什么是负载均衡
- 2. Keepalived的负载均衡原理
- 3. 配置Keepalived实现负载均衡
- a) 健康检查脚本的设置
- b) 调整权重和优先级
- 四、高效配置和调优
- 1. 使用Keepalived的最佳实践
- a) 合理选择虚拟路由器ID和优先级
- 2. 性能调优技巧
- a) 调整健康检查的时间间隔
- b) 优化Keepalived的日志设置
- 五、总结
一、简介
1. Keepalived概述
Keepalived是一个开源软件,用于实现高可用性和负载均衡。它通过使用VRRP协议来监测服务器的状态并在主服务器故障时自动进行故障转移。
2. 高可用性和负载均衡的重要性
介绍高可用性和负载均衡的概念,以及它们对于保障系统稳定性和提高性能的重要性。
二、故障转移
1. 什么是故障转移
解释故障转移的概念,即在发生故障时,将服务从一个节点切换到另一个节点,以保证服务的连续性。
2. Keepalived的故障转移原理
a) VRRP协议
介绍VRRP(Virtual Router Redundancy Protocol)协议的工作原理,它允许多个路由器共享一个虚拟IP地址,当主服务器不可用时,备份服务器会接管虚拟IP。
b) 虚拟路由器ID和优先级
讲解虚拟路由器ID和优先级的作用,用于确定主备服务器的角色和状态。
3. 配置Keepalived实现故障转移
a) 主备服务器的设置
在Keepalived中,主备服务器分别被称为"MASTER"和"BACKUP"。下面是主备服务器的配置示例:
- 配置主服务器(MASTER):
vrrp_instance VI_1 {state MASTER # 设置服务器为主服务器interface eth0 # 监听哪个网络接口的状态virtual_router_id 51 # 虚拟路由器ID,确保不与其他服务器冲突priority 100 # 主服务器的优先级advert_int 1 # VRRP广告包发送的时间间隔authentication {auth_type PASS # 使用密码进行认证auth_pass mypassword # 认证密码,确保与备份服务器一致}virtual_ipaddress {192.168.1.100/24 # 配置虚拟IP地址和子网掩码}
}
- 配置备份服务器(BACKUP):
vrrp_instance VI_1 {state BACKUP # 设置服务器为备份服务器interface eth0 # 监听哪个网络接口的状态virtual_router_id 51 # 虚拟路由器ID,确保不与其他服务器冲突priority 50 # 备份服务器的优先级,必须低于主服务器advert_int 1 # VRRP广告包发送的时间间隔authentication {auth_type PASS # 使用密码进行认证auth_pass mypassword # 认证密码,确保与主服务器一致}virtual_ipaddress {192.168.1.100/24 # 配置虚拟IP地址和子网掩码,与主服务器一致}
}
以上配置示例中,需要根据实际情况修改参数,包括网络接口(interface)、虚拟路由器ID(virtual_router_id)、优先级(priority)、密码(auth_pass)和虚拟IP地址(virtual_ipaddress)等。请根据自己的实际场景进行配置。
b) 监控网络接口
在Keepalived中,可以使用健康检查来监测网络接口的可用性,以便及时进行故障切换。下面是一种常用的健康检查方式:
- 使用Ping健康检查:
通过发送ICMP Echo请求来检测网络接口的可用性。如果无法得到响应,即认为网络接口不可用,并进行故障切换。
配置示例:
vrrp_script chk_interface {script "/usr/local/sbin/check_interface.sh" # 健康检查脚本的路径interval 5 # 检查的时间间隔,单位为秒weight -20 # 如果检查失败,降低服务器的优先级
}vrrp_instance VI_1 {...track_script {chk_interface # 添加健康检查脚本到实例中}
}
上述配置示例中,我们使用了名为chk_interface
的健康检查脚本,每5秒执行一次。如果脚本执行失败,即网络接口不可用,服务器的优先级会降低。通过在vrrp_instance
中添加了track_script
来启用该健康检查。
- 编写健康检查脚本:
创建一个检查网络接口的脚本,例如check_interface.sh
,并将其放置在指定路径(上述示例中为/usr/local/sbin/check_interface.sh
)。以下是一个简单的示例:
#!/bin/bashping -c 1 192.168.1.1 > /dev/null # 替换为你要监测的目标IP地址或域名if [ $? -eq 0 ]; thenexit 0 # 返回0表示网络接口可用
elseexit 1 # 返回1表示网络接口不可用
fi
请根据你的实际情况修改脚本中的目标IP地址或域名,并确保脚本具有执行权限。
通过以上配置和健康检查脚本,Keepalived会定期执行健康检查,并根据检查结果进行相应的故障切换。如果网络接口不可用,备份服务器将接管虚拟IP并成为主服务器。
c) 虚拟IP的配置
在Keepalived中,配置虚拟IP地址是确保在故障发生时可以快速切换到备份服务器的关键步骤。下面是一种常用的配置方式:
-
确定虚拟IP地址:
首先,确定一个可用的虚拟IP地址。这个IP地址应该与主、备份服务器所在的网络接口位于同一子网,并且尽量不冲突。 -
配置虚拟IP地址:
打开Keepalived的配置文件(一般位于/etc/keepalived/keepalived.conf
),找到要配置虚拟IP地址的vrrp_instance部分。
示例配置:
vrrp_instance VI_1 {...virtual_ipaddress {192.168.1.100/24 # 配置虚拟IP地址和子网掩码}
}
在virtual_ipaddress
块中,添加虚拟IP地址和相应的子网掩码。
- 应用配置:
保存并关闭Keepalived的配置文件后,重新加载或重启Keepalived服务以使配置生效。
示例重启Keepalived服务命令(适用于Systemd):
sudo systemctl restart keepalived.service
- 验证配置:
通过执行ip addr show
命令,可以查看虚拟IP地址是否已经成功配置在相应的网络接口上。
示例命令:
ip addr show eth0
在命令输出中,可以看到虚拟IP地址与子网掩码是否正确地绑定到了网络接口上。
配置完成后,当主服务器发生故障时,备份服务器会检测到,并自动接管虚拟IP地址,确保服务的可用性。这样,客户端请求就会被路由到备份服务器上,实现快速切换。
d) 备份服务器接管流程
当Keepalived监测到主服务器故障后,备份服务器会接管虚拟IP地址,以确保服务的连续性。以下是备份服务器在主服务器故障时接管虚拟IP的详细流程和步骤:
-
主服务器故障检测:
Keepalived会定期向主服务器发送心跳,如果连续若干次(可配置)没有收到心跳响应,Keepalived会判断主服务器故障。 -
备份服务器检测到主服务器故障:
当备份服务器检测到无法收到来自主服务器的心跳响应时,它会开始执行接管流程。 -
备份服务器优先级提升:
备份服务器会将自己的优先级提升,以确保成为新的主服务器。这可以通过在Keepalived的配置文件中设置合适的优先级值来实现。 -
虚拟IP地址接管:
备份服务器会发送VRRP通告,通知网络中的其他设备它已经接管了虚拟IP地址。这样,其他设备就会将流量路由到备份服务器。 -
配置同步:
如果需要,备份服务器还可以同步主服务器的配置文件、数据等,以确保继续提供相同的服务。 -
客户端请求路由至备份服务器:
一旦备份服务器接管了虚拟IP地址,并且网络中的其他设备更新了路由表,客户端请求将会被正确地路由到备份服务器上。 -
主服务器恢复后的处理:
当主服务器的故障修复后,它会发送心跳包来竞争虚拟IP的所有权。如果配置为优先级更高,主服务器将重新成为主节点,并接管虚拟IP地址。否则,备份服务器将继续保持为主服务器。
通过上述流程和步骤,备份服务器能够在主服务器故障时快速接管虚拟IP地址,并继续提供服务,以确保系统的高可用性和连续性。
三、负载均衡
1. 什么是负载均衡
负载均衡是一种将网络流量或任务分发到多个服务器上的技术,旨在提高系统的性能、可扩展性和可靠性。通过将请求均匀地分发到服务器集群中的各个节点上,负载均衡可以有效地避免单一服务器过载,提高整个系统的响应速度和处理能力。
负载均衡的工作原理通常基于以下几个关键组件:
-
服务器集群:多台服务器组成的集群,每台服务器都运行着相同的应用程序和服务。
-
负载均衡器(Load Balancer):负责接收客户端请求并将其分发到服务器集群中的某个节点。负载均衡器可以是硬件设备(如专用负载均衡器)或软件实现。
-
健康检查:负载均衡器会定期检查服务器的状态和可用性,确保只将请求发送到正常工作的服务器上。
-
负载分发算法:负载均衡器使用不同的算法来决定将请求分发给服务器集群中的哪个节点。常见的算法包括轮询、加权轮询、最小连接数等。
-
会话保持:某些应用程序需要确保客户端的请求在整个会话期间始终被发送到同一台服务器,负载均衡器可以通过会话保持功能实现这一需求。
负载均衡的好处包括:
-
提高性能:负载均衡将请求分发到多个服务器,可以减轻单一服务器的负载压力,提高整个系统的吞吐量和响应速度。
-
提高可扩展性:通过添加更多的服务器节点,负载均衡可以轻松地扩展系统的处理能力,满足不断增长的用户需求。
-
提高可靠性:如果某台服务器发生故障或下线,负载均衡可以自动将流量重新路由到其他正常工作的服务器上,确保服务的连续性和可靠性。
-
实现高可用性:通过在多个地理位置部署负载均衡器和服务器,可以实现跨地域的冗余,并且在单个节点或区域发生故障时仍然能够提供服务。
总之,负载均衡是一种重要的技术,可以有效地优化资源利用、提高系统性能和可靠性,适用于各种规模的应用程序和网络环境。
2. Keepalived的负载均衡原理
Keepalived 是一个开源的高可用性解决方案,可以实现负载均衡和故障切换。它的负载均衡原理基于 Virtual IP(VIP)和调度算法。
-
Virtual IP(VIP):在 Keepalived 中,Virtual IP 是一个虚拟的 IP 地址,客户端将请求发送到该 IP 地址。VIP 被绑定到一组真实的服务器节点上,负载均衡器通过将请求转发给这些服务器实现流量的分发。
-
调度算法:Keepalived 提供了多种调度算法来决定将请求分发到哪个服务器节点上。常见的调度算法有轮询(Round Robin)、加权轮询(Weighted Round Robin)、最小连接数(Least Connections)等。
- 轮询(Round Robin):按照服务器列表的顺序依次将请求分发给每个服务器。
- 加权轮询(Weighted Round Robin):根据服务器节点的权重设置,将请求按比例分配给服务器。设置更高的权重值将导致服务器接收到更多的请求。
- 最小连接数(Least Connections):将请求发送给当前连接数最少的服务器,以实现负载的均衡。
-
权重设置:Keepalived 允许为每个服务器节点设置权重值。权重值表示服务器处理请求的能力和优先级。较高权重的服务器将获得更多的请求,从而分担较低权重服务器的负载。通过适当设置权重,可以在集群中实现负载均衡。
Keepalived 还实现了故障检测和故障切换的机制,以确保高可用性:
-
健康检查:Keepalived 定期检查服务器节点的可用性。如果一个节点未响应或发生故障,Keepalived 将将其标记为不可用,并停止将请求发送给该节点。
-
故障切换:当一个节点被标记为不可用时,Keepalived 可以自动切换流量到其他正常工作的节点上。它会根据预先设定的故障切换策略,将流量重新路由到其他可用节点,从而实现故障的快速恢复。
通过这些原理和机制,Keepalived 可以实现负载均衡和高可用性,提供稳定和可靠的服务。
3. 配置Keepalived实现负载均衡
a) 健康检查脚本的设置
在 Keepalived 中配置健康检查脚本是确保服务器可用性的重要步骤。下面是设置健康检查脚本的步骤:
-
创建健康检查脚本:
首先,创建一个可以检测服务器可用性的脚本。该脚本可以使用任何编程语言编写,但需要返回以下两个状态之一:- 0:表示服务器正常可用。
- 1:表示服务器不可用,需要将流量转发到其他节点。
健康检查脚本应该根据服务器的特定指标进行检测,例如端口连通性、HTTP 响应码等。确保脚本可执行,并且返回正确的状态代码。
-
将健康检查脚本添加到 Keepalived 配置文件:
打开 Keepalived 的配置文件(通常是 “/etc/keepalived/keepalived.conf”),找到你配置的虚拟服务器段(Virtual Server Section)。
在该段中,添加以下配置项来设置健康检查脚本:vrrp_script <script_name> {script "<path_to_script>"; # 设置健康检查脚本的路径和名称interval <check_interval>; # 设置检查的时间间隔,单位为秒weight <check_weight>; # 设置检查脚本的权重 }
其中:
<script_name>
:健康检查脚本的名称。<path_to_script>
:健康检查脚本的路径。<check_interval>
:检查的时间间隔,即多久执行一次脚本,单位为秒。<check_weight>
:健康检查脚本的权重。如果设置了多个检查脚本,可以使用权重来优先执行某些检查。
-
配置虚拟服务器(Virtual Server)的健康检查:
在同一个配置文件中,找到虚拟服务器段的配置项。在该段中,设置健康检查脚本的名称和其他相关参数:virtual_server <virtual_IP> <port> {...delay_loop <delay_loop>; # 设置健康检查的延迟循环次数lb_algo <load_balancing_algorithm>; # 设置负载均衡算法lb_kind <load_balancing_kind>; # 设置负载均衡模式persistence_timeout <persistence_timeout>; # 设置会话持久化超时时间protocol <protocol>; # 设置协议类型...check_script {<script_name> # 对应健康检查脚本的名称} }
其中:
<virtual_IP>
: 虚拟 IP 地址。<port>
: 监听的端口号。<delay_loop>
: 健康检查的延迟循环次数。每个循环期间会执行一次检查脚本。<load_balancing_algorithm>
: 负载均衡算法,如 roundrobin(轮询)、wlc(加权轮询)等。<load_balancing_kind>
: 负载均衡模式,如 NAT、DR 等。<persistence_timeout>
: 会话持久化超时时间,指定在多长时间内保持与同一服务器的连接。<protocol>
: 协议类型,如 TCP、HTTP 等。
-
保存配置文件并重启 Keepalived:
保存 Keepalived 配置文件,并重启 Keepalived 服务以应用更改。
完成上述步骤后,Keepalived 将根据配置的健康检查脚本定期执行检查,并根据返回的状态决定是将流量继续发送到该服务器还是转发到其他服务器。通过设置适当的健康检查脚本,可以确保只有正常工作的服务器接收到请求,实现负载均衡和高可用性。
b) 调整权重和优先级
当需要根据服务器性能和负载情况进行负载均衡时,可以通过调整权重和优先级来实现。下面是具体的步骤:
-
了解服务器性能和负载情况:
在进行权重和优先级的调整之前,首先需要了解各个服务器的性能和当前的负载情况。这可以通过监控工具或性能分析工具来获取相关数据。重要的指标包括 CPU 使用率、内存使用率、磁盘 I/O、网络带宽等。 -
调整权重:
权重决定了服务器接收到的流量比例。可以根据服务器性能进行调整,使得性能更高的服务器能够承担更多的负载。例如,如果服务器 A 的性能较好,可以增加其权重,以便它接收更多的请求。而如果服务器 B 的性能较差,可以降低其权重,减少其接收请求的比例。 -
调整优先级:
优先级决定了服务器在故障转移过程中的顺序。设置较高优先级的服务器将担当主要的负载处理角色,而设置较低优先级的服务器将充当备份或辅助角色。根据服务器的性能和负载情况,可以调整优先级,确保性能更好的服务器具有较高的优先级。 -
修改 Keepalived 配置文件:
打开 Keepalived 的配置文件,找到虚拟服务器段的配置项。根据权重和优先级的调整,修改相应的配置。例如,可以通过增加weight
参数来调整权重,通过调整<priority>
参数来调整优先级。 -
保存配置文件并重启 Keepalived:
在完成对配置文件的修改后,保存文件,并重启 Keepalived 服务以使更改生效。
重新调整权重和优先级后,Keepalived 将根据新的配置进行负载均衡。权重高的服务器将承担更多的负载,而优先级较高的服务器将作为主要处理节点。这样可以根据实际情况动态地分配负载,提高系统的性能和可靠性。请记住,在进行任何更改之前,请确保对服务器进行充分测试和验证,以确保调整后的负载均衡符合预期。
四、高效配置和调优
1. 使用Keepalived的最佳实践
a) 合理选择虚拟路由器ID和优先级
在选择虚拟路由器ID(Virtual Router ID,VRID)和优先级时,需要考虑以下因素,以避免冲突和错误配置:
-
唯一性:
每个 Keepalived 实例都必须有唯一的虚拟路由器ID。确保不同的 Keepalived 实例使用不同的VRID,以避免冲突。通常,VRID可以是一个整数值,范围从0到255。 -
优先级设置:
虚拟路由器的优先级用于确定主要/备份节点的角色。较高优先级的节点将充当主节点,而较低优先级的节点将被作为备份节点。在选择优先级时,应确保主节点的优先级最高,以确保其正常运行并处理大部分的流量。存活的备份节点将根据需要接管主节点的角色。 -
管理和维护:
在选择虚拟路由器ID和优先级时,还应考虑到管理和维护的便利性。例如,可以将主节点的虚拟路由器ID设置为较低的值,例如1,以方便管理。优先级的设置也应该符合管理的逻辑,以便快速切换和故障转移。 -
其他设备和协议的影响:
如果在现有网络中已经存在其他设备或协议使用了特定的VRID或优先级,那么在选择虚拟路由器ID和优先级时,应避免与它们产生冲突。可事先了解网络中的其他设备和协议的相关设置,并相应地选择不会引起冲突的VRID和优先级。 -
文档和最佳实践:
在进行配置时,建议参考 Keepalived 的官方文档和最佳实践。官方文档通常提供了关于虚拟路由器ID和优先级的详细说明,并给出了一些推荐的配置方法和示例。遵循官方文档和最佳实践可以帮助避免配置错误和冲突。
总之,在选择虚拟路由器ID和优先级时,需要确保唯一性、管理便利性,并避免与现有设备和协议发生冲突。这样可以确保Keepalived的正常运行,并实现有效的负载均衡和高可用性。
2. 性能调优技巧
a) 调整健康检查的时间间隔
要调整健康检查的时间间隔,在保证准确性的前提下尽量减少资源消耗,可以考虑以下几个方面:
监控指标的灵敏度:确定监控指标的灵敏度,即故障发生时能够及时检测到。如果需要较高的实时性,可以缩短时间间隔;如果可以容忍稍微滞后一些,可以适当延长时间间隔。
应用的业务特点:根据应用的业务特点,结合对故障响应速度的需求来调整时间间隔。例如,对于关键业务系统,可能需要更频繁的健康检查,而对于非关键系统,可以降低检查频率。
负载情况和服务质量要求:根据系统的负载情况和对服务质量的要求,调整时间间隔。在负载较轻的情况下,可以适当延长时间间隔,以减少资源消耗。在负载较重或对响应时间有严格要求的情况下,可以缩短时间间隔,以保证系统的稳定性和可用性。
健康检查方式的选择:选择轻量级的健康检查方式,以减少资源消耗。例如,可以使用心跳检测或简单的网络连接测试来评估服务状态,而不需要过多的系统资源。
自适应调整策略:引入自适应调整策略,根据实时的系统负载和性能指标动态调整健康检查的时间间隔。例如,当系统负载较高时,可以缩短时间间隔以及时发现故障;当系统负载较轻时,可以延长时间间隔以降低资源消耗。
定期评估和优化:定期评估健康检查策略的效果,并进行优化。根据实际情况,可能需要不断地调整时间间隔,以达到在保证准确性的前提下尽量减少资源消耗的目标。
综合考虑以上因素,可以根据具体的应用场景和需求,合理地调整健康检查的时间间隔,以平衡准确性和资源消耗的关系。
b) 优化Keepalived的日志设置
要优化Keepalived的日志设置,以便更好地观察和排查问题,可以考虑以下方法:
-
设置适当的日志级别:根据需要,将Keepalived的日志级别设置为适当的级别。可以通过修改Keepalived的配置文件中的"log_level"参数来实现。一般而言,调试时可以设置为较详细的级别(如debug),生产环境可以选择更高级别(如info或notice)。
-
指定日志文件路径:可以将Keepalived的日志输出到指定的日志文件中,以便后续查看和分析。可以通过修改配置文件中的"log_file"参数来指定日志文件的路径和名称。确保所指定的目录和文件对Keepalived进程可写。
-
配置日志轮转:为了避免日志文件过大,可以配置日志的轮转机制。通过使用日志轮转工具(如logrotate)来定期备份、压缩和删除旧的日志文件,以便保持日志文件的可读性和管理性。
-
启用记录时间戳:为了更好地追踪和对比日志信息,可以在日志中记录时间戳。可以通过修改Keepalived的配置文件中的"log_timestamp"参数来启用时间戳记录。
-
结合系统日志:将Keepalived的日志与系统的日志结合起来,可以更全面地观察和排查问题。可以配置Keepalived将日志输出到系统的日志文件(如/var/log/messages或/syslog),或者与其他系统日志工具(如rsyslog)进行集成。
-
配置远程日志:如果需要在多台服务器上收集和集中管理日志,可以将Keepalived的日志设置为远程日志。可以配置Keepalived的日志输出到远程日志服务器,或者使用日志收集工具(如ELK Stack)来集中管理和分析日志。
-
定期检查和分析日志:定期检查和分析Keepalived的日志,以及时发现异常和问题。注意关注警告和错误信息,并及时采取相应的措施进行故障排除。
通过以上优化方法,可以更好地设置和管理Keepalived的日志,提高观察和排查问题的效率,确保Keepalived的稳定运行和可靠性。
五、总结
在负载均衡方面,文章指出负载均衡可以提高系统的吞吐量、可扩展性和可靠性。文章提到了通过使用HAProxy和Nginx等工具来实现负载均衡,并介绍了负载均衡的原理和配置方法。此外,文章还提到了根据应用的业务特点和负载情况来调整负载均衡策略的重要性。
总结来说,故障转移和负载均衡是确保系统高可用性、稳定性和可靠性的重要策略。通过合理配置和管理,可以提高系统的性能、响应能力和用户体验,确保系统能够持续稳定地工作。
相关文章:
Keepalived入门指南:实现故障转移和负载均衡
文章目录 一、简介1. Keepalived概述2. 高可用性和负载均衡的重要性 二、故障转移1. 什么是故障转移2. Keepalived的故障转移原理a) VRRP协议b) 虚拟路由器ID和优先级 3. 配置Keepalived实现故障转移a) 主备服务器的设置b) 监控网络接口c) 虚拟IP的配置d) 备份服务器接管流程 三…...

cuOSD(CUDA On-Screen Display Library)库的学习
目录 前言1. cuOSD1.1 Description1.2 Getting started1.3 For Python Interface1.4 Demo1.5 Performance Table 2. cuOSD案例2.1 环境配置2.2 simple案例2.3 segment案例2.4 segment2案例2.5 polyline案例2.6 comp案例2.7 perf案例 3. cuOSD浅析3.1 simple_draw函数 4. 补充知…...
c++函数指针基本用法
将函数像变量一样传递,实际上拿到的是函数的地址,由于函数类型的多样,可以使用auto关键字,可以使用 void(*function2)() ,不过它太繁琐,因此使用typedef 起个名字 typedef void(*HelloWorldFunction)(); 叫…...

Java创建对象的几种方式
在Java中,对象是程序中的一种基本元素,它通过类定义和创建。本篇教程旨在介绍Java中创建对象的几种方式,包括使用new关键字、反射、clone、反序列化等方式。 使用new关键字创建对象 在Java中,最常用的创建对象方式是使用new关键…...

Docker实战专栏简介
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

解放数据库,实时数据同步利器:Alibaba Canal
文章首发地址 Canal是一个开源的数据库增量订阅&消费组件,主要用于实时数据同步和数据订阅的场景,特别适用于构建分布式系统、数据仓库、缓存更新等应用。它支持MySQL、阿里云RDS等主流数据库,能够实时捕获数据库的增删改操作ÿ…...

机器学习基础之《分类算法(3)—模型选择与调优》
作用是如何选择出最好的K值 一、什么是交叉验证(cross validation) 1、定义 交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试&#x…...

Datawhale Django后端开发入门 TASK03 QuerySet和Instance、APIVIew
一、QuerySet QuerySet 是 Django 中的一个查询集合,它是由 Model.objects 方法返回的,并且可以用于生成数据库中所有满足一定条件的对象的列表。 QuerySet 在 Django 中表示从数据库中获取的对象集合,它是一个可迭代的、类似列表的对象集合。主要特点…...
Python 网页解析中级篇:深入理解BeautifulSoup库
在Python的网络爬虫中,BeautifulSoup库是一个重要的网页解析工具。在初级教程中,我们已经了解了BeautifulSoup库的基本使用方法。在本篇文章中,我们将深入学习BeautifulSoup库的进阶使用。 一、复杂的查找条件 在使用find和find_all方法查找…...

IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch
什么是升级补丁? 比如你本地修复的 bug,需要把增量文件发给客户,很多场景下大家都需要手工整理修改的文件,并整理好目录,这个很麻烦。那有没有简单的技巧呢?看看 IDEA 生成 patch 和使用 patch 的使用。 介…...

Redis专题-秒杀
Redis专题-并发/秒杀 开局一张图,内容全靠“编”。 昨天晚上在群友里看到有人在讨论库存并发的问题,看到这里我就决定写一篇关于redis秒杀的文章。 1、理论部分 我们看看一般我们库存是怎么出问题的 其实redis提供了两种解决方案:加锁和原子操…...

C++笔记之std::move和右值引用的关系、以及移动语义
C笔记之std::move和右值引用的关系、以及移动语义 code review! 文章目录 C笔记之std::move和右值引用的关系、以及移动语义1.一个使用std::move的最简单C例子2.std::move 和 T&& reference_name expression;对比3.右值引用和常规引用的经典对比——移动语义和拷贝语…...

ES6自用笔记
目录 原型链 引用类型:__proto__(隐式原型)属性,属性值是对象函数:prototype(原型)属性,属性值是对象 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(Object)替换已不推荐的Object._ _ proto _ _ Ob…...

【BASH】回顾与知识点梳理(二十九)
【BASH】回顾与知识点梳理 二十九 二十九. 进程和工作管理29.1 什么是进程 (process)进程与程序 (process & program)子进程与父进程:fork and exec:进程呼叫的流程系统或网络服务:常驻在内存的进程 29.2 Linux 的多人多任务环境多人环境…...

Docker的Cgroup资源限制
Docker通过Cgroup来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配颡和使用量控制。 Cgoup 是CotrolGroups 的缩写,是Linux 内核提供的一种可以限制、记录、隔高进程组所使用的物理资源(如CPU、内存…...

AI智能语音机器人的基本业务流程
先画个图,了解下AI语音机器人的基本业务流程。 上图是一个AI语音机器人的业务流程,简单来说就是首先要配置话术,就是告诉机器人在遇到问题该怎么回答,这个不同公司不同行业的差别比较大,所以一般每个客户都会配置其个性…...

uniapp 上传比较大的视频文件就超时
uni.uploadFile,上传超过10兆左右的文件就报错err:uploadFile:fail timeout,超时 解决: 在manifest.json文件中做超时配置 uni.uploadFile({url: this.action,method: "POST",header: {Authorization: uni.getStorage…...

CSS简介
目录 CSS CSS概念 核心概念 为什么需要CSS 语法 CSS的引入方式 内联样式(行内样式) 内部样式 外部样式(推荐) CSS CSS概念 CSS(Cascading Style Sheets)层叠样式表,又叫级联样式表&am…...

卡方分箱(chi-square)
统计学,风控建模经常遇到卡方分箱算法ChiMerge。卡方分箱在金融信贷风控领域是逻辑回归评分卡的核心,让分箱具有统计学意义(单调性)。卡方分箱在生物医药领域可以比较两种药物或两组病人是否具有显著区别。但很多建模人员搞不清楚…...

深入理解 Flutter 图片加载原理
作者:京东零售 徐宏伟 来源:京东云开发者社区 前言 随着Flutter稳定版本逐步迭代更新,京东APP内部的Flutter业务也日益增多,Flutter开发为我们提供了高效的开发环境、优秀的跨平台适配、丰富的功能组件及动画、接近原生的交互体验…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
【实施指南】Android客户端HTTPS双向认证实施指南
🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...