当前位置: 首页 > news >正文

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"。下面是主备服务器的配置示例:

  1. 配置主服务器(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地址和子网掩码}
}
  1. 配置备份服务器(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中,可以使用健康检查来监测网络接口的可用性,以便及时进行故障切换。下面是一种常用的健康检查方式:

  1. 使用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来启用该健康检查。

  1. 编写健康检查脚本:
    创建一个检查网络接口的脚本,例如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地址是确保在故障发生时可以快速切换到备份服务器的关键步骤。下面是一种常用的配置方式:

  1. 确定虚拟IP地址:
    首先,确定一个可用的虚拟IP地址。这个IP地址应该与主、备份服务器所在的网络接口位于同一子网,并且尽量不冲突。

  2. 配置虚拟IP地址:
    打开Keepalived的配置文件(一般位于/etc/keepalived/keepalived.conf),找到要配置虚拟IP地址的vrrp_instance部分。

示例配置:

vrrp_instance VI_1 {...virtual_ipaddress {192.168.1.100/24  # 配置虚拟IP地址和子网掩码}
}

virtual_ipaddress块中,添加虚拟IP地址和相应的子网掩码。

  1. 应用配置:
    保存并关闭Keepalived的配置文件后,重新加载或重启Keepalived服务以使配置生效。

示例重启Keepalived服务命令(适用于Systemd):

sudo systemctl restart keepalived.service
  1. 验证配置:
    通过执行ip addr show命令,可以查看虚拟IP地址是否已经成功配置在相应的网络接口上。

示例命令:

ip addr show eth0

在命令输出中,可以看到虚拟IP地址与子网掩码是否正确地绑定到了网络接口上。

配置完成后,当主服务器发生故障时,备份服务器会检测到,并自动接管虚拟IP地址,确保服务的可用性。这样,客户端请求就会被路由到备份服务器上,实现快速切换。

d) 备份服务器接管流程

当Keepalived监测到主服务器故障后,备份服务器会接管虚拟IP地址,以确保服务的连续性。以下是备份服务器在主服务器故障时接管虚拟IP的详细流程和步骤:

  1. 主服务器故障检测:
    Keepalived会定期向主服务器发送心跳,如果连续若干次(可配置)没有收到心跳响应,Keepalived会判断主服务器故障。

  2. 备份服务器检测到主服务器故障:
    当备份服务器检测到无法收到来自主服务器的心跳响应时,它会开始执行接管流程。

  3. 备份服务器优先级提升:
    备份服务器会将自己的优先级提升,以确保成为新的主服务器。这可以通过在Keepalived的配置文件中设置合适的优先级值来实现。

  4. 虚拟IP地址接管:
    备份服务器会发送VRRP通告,通知网络中的其他设备它已经接管了虚拟IP地址。这样,其他设备就会将流量路由到备份服务器。

  5. 配置同步:
    如果需要,备份服务器还可以同步主服务器的配置文件、数据等,以确保继续提供相同的服务。

  6. 客户端请求路由至备份服务器:
    一旦备份服务器接管了虚拟IP地址,并且网络中的其他设备更新了路由表,客户端请求将会被正确地路由到备份服务器上。

  7. 主服务器恢复后的处理:
    当主服务器的故障修复后,它会发送心跳包来竞争虚拟IP的所有权。如果配置为优先级更高,主服务器将重新成为主节点,并接管虚拟IP地址。否则,备份服务器将继续保持为主服务器。

通过上述流程和步骤,备份服务器能够在主服务器故障时快速接管虚拟IP地址,并继续提供服务,以确保系统的高可用性和连续性。

三、负载均衡

1. 什么是负载均衡

负载均衡是一种将网络流量或任务分发到多个服务器上的技术,旨在提高系统的性能、可扩展性和可靠性。通过将请求均匀地分发到服务器集群中的各个节点上,负载均衡可以有效地避免单一服务器过载,提高整个系统的响应速度和处理能力。

负载均衡的工作原理通常基于以下几个关键组件:

  1. 服务器集群:多台服务器组成的集群,每台服务器都运行着相同的应用程序和服务。

  2. 负载均衡器(Load Balancer):负责接收客户端请求并将其分发到服务器集群中的某个节点。负载均衡器可以是硬件设备(如专用负载均衡器)或软件实现。

  3. 健康检查:负载均衡器会定期检查服务器的状态和可用性,确保只将请求发送到正常工作的服务器上。

  4. 负载分发算法:负载均衡器使用不同的算法来决定将请求分发给服务器集群中的哪个节点。常见的算法包括轮询、加权轮询、最小连接数等。

  5. 会话保持:某些应用程序需要确保客户端的请求在整个会话期间始终被发送到同一台服务器,负载均衡器可以通过会话保持功能实现这一需求。

负载均衡的好处包括:

  1. 提高性能:负载均衡将请求分发到多个服务器,可以减轻单一服务器的负载压力,提高整个系统的吞吐量和响应速度。

  2. 提高可扩展性:通过添加更多的服务器节点,负载均衡可以轻松地扩展系统的处理能力,满足不断增长的用户需求。

  3. 提高可靠性:如果某台服务器发生故障或下线,负载均衡可以自动将流量重新路由到其他正常工作的服务器上,确保服务的连续性和可靠性。

  4. 实现高可用性:通过在多个地理位置部署负载均衡器和服务器,可以实现跨地域的冗余,并且在单个节点或区域发生故障时仍然能够提供服务。

总之,负载均衡是一种重要的技术,可以有效地优化资源利用、提高系统性能和可靠性,适用于各种规模的应用程序和网络环境。

2. Keepalived的负载均衡原理

Keepalived 是一个开源的高可用性解决方案,可以实现负载均衡和故障切换。它的负载均衡原理基于 Virtual IP(VIP)和调度算法。

  1. Virtual IP(VIP):在 Keepalived 中,Virtual IP 是一个虚拟的 IP 地址,客户端将请求发送到该 IP 地址。VIP 被绑定到一组真实的服务器节点上,负载均衡器通过将请求转发给这些服务器实现流量的分发。

  2. 调度算法:Keepalived 提供了多种调度算法来决定将请求分发到哪个服务器节点上。常见的调度算法有轮询(Round Robin)、加权轮询(Weighted Round Robin)、最小连接数(Least Connections)等。

    • 轮询(Round Robin):按照服务器列表的顺序依次将请求分发给每个服务器。
    • 加权轮询(Weighted Round Robin):根据服务器节点的权重设置,将请求按比例分配给服务器。设置更高的权重值将导致服务器接收到更多的请求。
    • 最小连接数(Least Connections):将请求发送给当前连接数最少的服务器,以实现负载的均衡。
  3. 权重设置:Keepalived 允许为每个服务器节点设置权重值。权重值表示服务器处理请求的能力和优先级。较高权重的服务器将获得更多的请求,从而分担较低权重服务器的负载。通过适当设置权重,可以在集群中实现负载均衡。

Keepalived 还实现了故障检测和故障切换的机制,以确保高可用性:

  • 健康检查:Keepalived 定期检查服务器节点的可用性。如果一个节点未响应或发生故障,Keepalived 将将其标记为不可用,并停止将请求发送给该节点。

  • 故障切换:当一个节点被标记为不可用时,Keepalived 可以自动切换流量到其他正常工作的节点上。它会根据预先设定的故障切换策略,将流量重新路由到其他可用节点,从而实现故障的快速恢复。

通过这些原理和机制,Keepalived 可以实现负载均衡和高可用性,提供稳定和可靠的服务。

3. 配置Keepalived实现负载均衡

a) 健康检查脚本的设置

在 Keepalived 中配置健康检查脚本是确保服务器可用性的重要步骤。下面是设置健康检查脚本的步骤:

  1. 创建健康检查脚本:
    首先,创建一个可以检测服务器可用性的脚本。该脚本可以使用任何编程语言编写,但需要返回以下两个状态之一:

    • 0:表示服务器正常可用。
    • 1:表示服务器不可用,需要将流量转发到其他节点。

    健康检查脚本应该根据服务器的特定指标进行检测,例如端口连通性、HTTP 响应码等。确保脚本可执行,并且返回正确的状态代码。

  2. 将健康检查脚本添加到 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>:健康检查脚本的权重。如果设置了多个检查脚本,可以使用权重来优先执行某些检查。
  3. 配置虚拟服务器(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 等。
  4. 保存配置文件并重启 Keepalived:
    保存 Keepalived 配置文件,并重启 Keepalived 服务以应用更改。

完成上述步骤后,Keepalived 将根据配置的健康检查脚本定期执行检查,并根据返回的状态决定是将流量继续发送到该服务器还是转发到其他服务器。通过设置适当的健康检查脚本,可以确保只有正常工作的服务器接收到请求,实现负载均衡和高可用性。

b) 调整权重和优先级

当需要根据服务器性能和负载情况进行负载均衡时,可以通过调整权重和优先级来实现。下面是具体的步骤:

  1. 了解服务器性能和负载情况:
    在进行权重和优先级的调整之前,首先需要了解各个服务器的性能和当前的负载情况。这可以通过监控工具或性能分析工具来获取相关数据。重要的指标包括 CPU 使用率、内存使用率、磁盘 I/O、网络带宽等。

  2. 调整权重:
    权重决定了服务器接收到的流量比例。可以根据服务器性能进行调整,使得性能更高的服务器能够承担更多的负载。例如,如果服务器 A 的性能较好,可以增加其权重,以便它接收更多的请求。而如果服务器 B 的性能较差,可以降低其权重,减少其接收请求的比例。

  3. 调整优先级:
    优先级决定了服务器在故障转移过程中的顺序。设置较高优先级的服务器将担当主要的负载处理角色,而设置较低优先级的服务器将充当备份或辅助角色。根据服务器的性能和负载情况,可以调整优先级,确保性能更好的服务器具有较高的优先级。

  4. 修改 Keepalived 配置文件:
    打开 Keepalived 的配置文件,找到虚拟服务器段的配置项。根据权重和优先级的调整,修改相应的配置。例如,可以通过增加 weight 参数来调整权重,通过调整 <priority> 参数来调整优先级。

  5. 保存配置文件并重启 Keepalived:
    在完成对配置文件的修改后,保存文件,并重启 Keepalived 服务以使更改生效。

重新调整权重和优先级后,Keepalived 将根据新的配置进行负载均衡。权重高的服务器将承担更多的负载,而优先级较高的服务器将作为主要处理节点。这样可以根据实际情况动态地分配负载,提高系统的性能和可靠性。请记住,在进行任何更改之前,请确保对服务器进行充分测试和验证,以确保调整后的负载均衡符合预期。

四、高效配置和调优

1. 使用Keepalived的最佳实践

a) 合理选择虚拟路由器ID和优先级

在选择虚拟路由器ID(Virtual Router ID,VRID)和优先级时,需要考虑以下因素,以避免冲突和错误配置:

  1. 唯一性:
    每个 Keepalived 实例都必须有唯一的虚拟路由器ID。确保不同的 Keepalived 实例使用不同的VRID,以避免冲突。通常,VRID可以是一个整数值,范围从0到255。

  2. 优先级设置:
    虚拟路由器的优先级用于确定主要/备份节点的角色。较高优先级的节点将充当主节点,而较低优先级的节点将被作为备份节点。在选择优先级时,应确保主节点的优先级最高,以确保其正常运行并处理大部分的流量。存活的备份节点将根据需要接管主节点的角色。

  3. 管理和维护:
    在选择虚拟路由器ID和优先级时,还应考虑到管理和维护的便利性。例如,可以将主节点的虚拟路由器ID设置为较低的值,例如1,以方便管理。优先级的设置也应该符合管理的逻辑,以便快速切换和故障转移。

  4. 其他设备和协议的影响:
    如果在现有网络中已经存在其他设备或协议使用了特定的VRID或优先级,那么在选择虚拟路由器ID和优先级时,应避免与它们产生冲突。可事先了解网络中的其他设备和协议的相关设置,并相应地选择不会引起冲突的VRID和优先级。

  5. 文档和最佳实践:
    在进行配置时,建议参考 Keepalived 的官方文档和最佳实践。官方文档通常提供了关于虚拟路由器ID和优先级的详细说明,并给出了一些推荐的配置方法和示例。遵循官方文档和最佳实践可以帮助避免配置错误和冲突。

总之,在选择虚拟路由器ID和优先级时,需要确保唯一性、管理便利性,并避免与现有设备和协议发生冲突。这样可以确保Keepalived的正常运行,并实现有效的负载均衡和高可用性。

2. 性能调优技巧

a) 调整健康检查的时间间隔

要调整健康检查的时间间隔,在保证准确性的前提下尽量减少资源消耗,可以考虑以下几个方面:

监控指标的灵敏度:确定监控指标的灵敏度,即故障发生时能够及时检测到。如果需要较高的实时性,可以缩短时间间隔;如果可以容忍稍微滞后一些,可以适当延长时间间隔。

应用的业务特点:根据应用的业务特点,结合对故障响应速度的需求来调整时间间隔。例如,对于关键业务系统,可能需要更频繁的健康检查,而对于非关键系统,可以降低检查频率。

负载情况和服务质量要求:根据系统的负载情况和对服务质量的要求,调整时间间隔。在负载较轻的情况下,可以适当延长时间间隔,以减少资源消耗。在负载较重或对响应时间有严格要求的情况下,可以缩短时间间隔,以保证系统的稳定性和可用性。

健康检查方式的选择:选择轻量级的健康检查方式,以减少资源消耗。例如,可以使用心跳检测或简单的网络连接测试来评估服务状态,而不需要过多的系统资源。

自适应调整策略:引入自适应调整策略,根据实时的系统负载和性能指标动态调整健康检查的时间间隔。例如,当系统负载较高时,可以缩短时间间隔以及时发现故障;当系统负载较轻时,可以延长时间间隔以降低资源消耗。

定期评估和优化:定期评估健康检查策略的效果,并进行优化。根据实际情况,可能需要不断地调整时间间隔,以达到在保证准确性的前提下尽量减少资源消耗的目标。

综合考虑以上因素,可以根据具体的应用场景和需求,合理地调整健康检查的时间间隔,以平衡准确性和资源消耗的关系。

b) 优化Keepalived的日志设置

要优化Keepalived的日志设置,以便更好地观察和排查问题,可以考虑以下方法:

  1. 设置适当的日志级别:根据需要,将Keepalived的日志级别设置为适当的级别。可以通过修改Keepalived的配置文件中的"log_level"参数来实现。一般而言,调试时可以设置为较详细的级别(如debug),生产环境可以选择更高级别(如info或notice)。

  2. 指定日志文件路径:可以将Keepalived的日志输出到指定的日志文件中,以便后续查看和分析。可以通过修改配置文件中的"log_file"参数来指定日志文件的路径和名称。确保所指定的目录和文件对Keepalived进程可写。

  3. 配置日志轮转:为了避免日志文件过大,可以配置日志的轮转机制。通过使用日志轮转工具(如logrotate)来定期备份、压缩和删除旧的日志文件,以便保持日志文件的可读性和管理性。

  4. 启用记录时间戳:为了更好地追踪和对比日志信息,可以在日志中记录时间戳。可以通过修改Keepalived的配置文件中的"log_timestamp"参数来启用时间戳记录。

  5. 结合系统日志:将Keepalived的日志与系统的日志结合起来,可以更全面地观察和排查问题。可以配置Keepalived将日志输出到系统的日志文件(如/var/log/messages或/syslog),或者与其他系统日志工具(如rsyslog)进行集成。

  6. 配置远程日志:如果需要在多台服务器上收集和集中管理日志,可以将Keepalived的日志设置为远程日志。可以配置Keepalived的日志输出到远程日志服务器,或者使用日志收集工具(如ELK Stack)来集中管理和分析日志。

  7. 定期检查和分析日志:定期检查和分析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++函数指针基本用法

将函数像变量一样传递&#xff0c;实际上拿到的是函数的地址&#xff0c;由于函数类型的多样&#xff0c;可以使用auto关键字&#xff0c;可以使用 void(*function2)() &#xff0c;不过它太繁琐&#xff0c;因此使用typedef 起个名字 typedef void(*HelloWorldFunction)(); 叫…...

Java创建对象的几种方式

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

Docker实战专栏简介

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

解放数据库,实时数据同步利器:Alibaba Canal

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

机器学习基础之《分类算法(3)—模型选择与调优》

作用是如何选择出最好的K值 一、什么是交叉验证&#xff08;cross validation&#xff09; 1、定义 交叉验证&#xff1a;将拿到的训练数据&#xff0c;分为训练和验证集。以下图为例&#xff1a;将数据分成5份&#xff0c;其中一份作为验证集。然后经过5次(组)的测试&#x…...

Datawhale Django后端开发入门 TASK03 QuerySet和Instance、APIVIew

一、QuerySet QuerySet 是 Django 中的一个查询集合&#xff0c;它是由 Model.objects 方法返回的&#xff0c;并且可以用于生成数据库中所有满足一定条件的对象的列表。 QuerySet 在 Django 中表示从数据库中获取的对象集合,它是一个可迭代的、类似列表的对象集合。主要特点…...

Python 网页解析中级篇:深入理解BeautifulSoup库

在Python的网络爬虫中&#xff0c;BeautifulSoup库是一个重要的网页解析工具。在初级教程中&#xff0c;我们已经了解了BeautifulSoup库的基本使用方法。在本篇文章中&#xff0c;我们将深入学习BeautifulSoup库的进阶使用。 一、复杂的查找条件 在使用find和find_all方法查找…...

IDEA 如何制作代码补丁?IDEA 生成 patch 和使用 patch

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

Redis专题-秒杀

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

C++笔记之std::move和右值引用的关系、以及移动语义

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

ES6自用笔记

目录 原型链 引用类型&#xff1a;__proto__(隐式原型)属性&#xff0c;属性值是对象函数&#xff1a;prototype(原型)属性&#xff0c;属性值是对象 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(Object)替换已不推荐的Object._ _ proto _ _ Ob…...

【BASH】回顾与知识点梳理(二十九)

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

Docker的Cgroup资源限制

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

AI智能语音机器人的基本业务流程

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

uniapp 上传比较大的视频文件就超时

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

CSS简介

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

卡方分箱(chi-square)

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

深入理解 Flutter 图片加载原理

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

【电子通识】什么是异常分析中的A-B-A方法

工作有了一定的经验之后&#xff0c;在做问题分析的时候&#xff0c;经常会听到别人说把这个部品&#xff08;芯片/模块&#xff09;拿去ABA一下&#xff0c;看看跟谁走。那么对于新人来说是否就会问一个问题&#xff1a;什么是ABA呢&#xff1f; A-B-A 交换是一种简单直接的交…...

[Linux] C获取键盘输入值

检测指令&#xff1a;cat /dev/input/event1 | hexdump 当键盘有输入时&#xff0c;会有对应的一堆16进制输出。它其实对应着input_event结构体【24字节】。 struct input_event ​​​​​​​{struct timeval time;__u16 type;__u16 code;__s32 value; }; #include <st…...

探索Python编程世界:开启你的代码之旅

亲爱的小伙伴们&#xff0c;大家好&#xff01;很高兴向大家推荐我的新专栏《Python编程指南&#xff1a;从入门到高级》。在这个专栏里&#xff0c;我将带领大家深入探索Python编程的奇妙世界&#xff0c;为您提供有趣、实用、易懂的内容&#xff0c;帮助您在编程的道路上越走…...

金融术语总结

洗钱 将犯罪或其他非法违法行为所获得的违法收入&#xff0c;通过各种手段掩饰、隐瞒、转化&#xff0c;使其在形式上合法化的行为。 存量客户 某个时间段里原先已有的客户,与新增客户相对应。 月活跃用户数量&#xff0c;MAU&#xff08;Monthly Active User&#xff0c;M…...

Linux驱动开发(Day5)

思维导图&#xff1a; 不同设备号文件绑定&#xff1a;...

[机器学习]特征工程:主成分分析

目录 主成分分析 1、简介 2、帮助理解 3、API调用 4、案例 本文介绍主成分分析的概述以及python如何实现算法&#xff0c;关于主成分分析算法数学原理讲解的文章&#xff0c;请看这一篇&#xff1a; 探究主成分分析方法数学原理_逐梦苍穹的博客-CSDN博客https://blog.csdn.…...

Python爬虫实战案例——第一例

X卢小说登录(包括验证码处理) 地址&#xff1a;aHR0cHM6Ly91LmZhbG9vLmNvbS9yZWdpc3QvbG9naW4uYXNweA 打开页面直接进行分析 任意输入用户名密码及验证码之后可以看到抓到的包中传输的数据明显需要的是txtPwd进行加密分析。按ctrlshiftf进行搜索。 定位来到源代码中断点进行调…...

一、openlayer开发介绍

首先需要引入openlayer api开发包。两种方式&#xff1a; 1、import方式&#xff0c;也就是npm安装&#xff0c;npm install ol 2、外部js引入。 下载地址&#xff1a;https://github.com/openlayers/openlayers 历史版本地址&#xff1a;Releases openlayers/openlayers …...

利用Jackson封装常用的JsonUtil工具类

在实际开发中&#xff0c;我们对于 JSON 数据的处理&#xff0c;通常有这么几个第三方工具包可以使用&#xff1a; gson&#xff1a;谷歌的fastjson&#xff1a;阿里巴巴的jackson&#xff1a;美国FasterXML公司的&#xff0c;Spring框架默认用的 由于以前一直用习惯了阿里的…...

阿里云2核4G服务器配置汇总表_轻量和ECS

阿里云2核4G服务器配置价格表&#xff0c;297元一年&#xff0c;配置为轻量应用服务器2核4G、4M带宽、60GB高效云盘&#xff0c;折合24元一个月。 目录 2核4G服务器轻量&#xff1a; 2核4G服务器ECS 关于轻量和ECS的区别&#xff1a; 2核4G服务器轻量&#xff1a; 云服务器…...

攻防世界-ics-06

原题解题思路 看着页面多&#xff0c;其实只有报表中心能够跳转&#xff0c;但是选了确定后没反应&#xff0c;应该不是注入&#xff0c;只有id会变化。 在burp中设置好负载进行爆破 有一个长度与众不同的包 打开发现flag。...

人工智能轨道交通行业周刊-第56期(2023.8.14-8.20)

本期关键词&#xff1a;数字化建设、巡检机器人、智慧城轨、福州地铁4号线、避雷器、LangChain 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…...

ruoyi-vue-pro yudao 项目报表设计器 积木报表模块启用及相关SQL脚本

目前ruoyi-vue-pro 项目虽然开源&#xff0c;但是report模块被屏蔽了&#xff0c;查看文档却要收费 199元&#xff08;知识星球&#xff09;&#xff0c;价格有点太高了吧。 分享下如何启用 report 模块&#xff0c;顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xml …...

【第三阶段】kotlin中使用带let的安全调用

let常常和&#xff1f;.配合使用&#xff0c;如果前面的对象为null,let不执行&#xff0c;能够执行到let里面 对象一定不为null 1.不为null fun main() {var name:String?"kotlin" //name是一个可空类型&#xff0c;发出广播&#xff0c;调用的地方必须补救措施var…...

JavaScript 快速入门手册

本篇文章学习&#xff1a; 菜鸟教程、尚硅谷。 JavaScript 快速入门手册 &#x1f4af; 前言&#xff1a; 本人目前算是一个Java程序员&#xff0c;但是目前环境… ε(ο&#xff40;*))) 一言难尽啊&#xff0c;blog也好久好久没有更新了&#xff0c;一部分工作原因吧(外包真…...

FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)

原文网址&#xff1a;FreeMarker系列--list的用法&#xff08;长度,遍历,下标,嵌套,排序&#xff09;_IT利刃出鞘的博客-CSDN博客 简介 本文介绍FreeMarker的list的用法。 大小 Java ArrayList<String> list new ArrayList<String>(); Freemaker ${list?s…...

【观察】戴尔科技:构建企业创新“韧性”,开辟数实融合新格局

过去几年&#xff0c;国家高度重视发展数字经济&#xff0c;将其上升为国家战略。其中&#xff0c;“十四五”规划中&#xff0c;就明确提出要推动数字经济和实体经济的深度融合&#xff0c;以数字经济赋能传统产业转型升级&#xff1b;而2023年年初正式发布的《数字中国建设整…...

数据管理平台

数据管理平台项目 文章目录 数据管理平台项目业务1-登录验证代码步骤&#xff1a; token 技术token的使用代码步骤 axios 请求拦截器语法代码示例 axios响应拦截器优化axios响应结果发布文章-富文本编辑器发布文章-频道列表发布文章-封面设置发布文章-收集并保存内容管理-文章列…...

手搓大语言模型 使用jieba分词制作词表,词表大小几十万 加强依赖性

jieba分词词表生成与训练 import numpy as np import paddle import pandas as pd from multiprocessing import Process, Manager, freeze_support from just_mask_em import JustMaskEm, HeadLoss from tqdm import tqdm from glob import glob import jieba import warning…...

【校招VIP】java语言类和对象之map、set集合

考点介绍&#xff1a; map、set集合相关内容是校招面试的高频考点之一。 map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索效率与其具体的实例化子类有关系。 『java语言类和对象之map、set集合』相关题目及解析内容可点击文章末尾链接查看&#xff01; …...

windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动

前两天由于项目需要&#xff0c;一个windows上的批处理任务&#xff08;kitchen.bat&#xff09;&#xff0c;需要接到mq的消息通知后执行&#xff0c;为了快速实现这里我们通过springboot写了一个jar程序&#xff0c;用于接收mq的消息&#xff0c;并调用bat文件。 本程序需要实…...

七夕特辑(一)浪漫表白方式 用神经网络生成一首情诗

目录 一、准备工作二、用神经网络生成一首诗&#xff0c;代码说明 牛郎织女相会&#xff0c;七夕祝福要送来。祝福天下有情人&#xff0c;终成眷属永相伴。 七夕是中国传统的情人节&#xff0c;也是恋人们表达爱意的好时机。在这个特别的日子里&#xff0c;送上温馨的祝福&…...

springboot的 spring.redis.lettuce的max-active、max-idle、min-idle的搭配

在Spring Boot中&#xff0c;使用Lettuce作为Redis客户端是一种常见的选择。Lettuce是一个高性能、可扩展的异步Redis客户端。下面是关于application.yml配置文件中spring.redis.lettuce的一些配置&#xff1a; spring:redis:host: localhostport: 6379database: 0lettuce:poo…...

盒子模型样式

&#x1f353;盒子属性 属性名称中文注释备注border设置盒子的边框边框宽度 边框类型 边框颜色border-left设置左边框边框宽度 边框类型 边框颜色border-right设置右边框边框宽度 边框类型 边框颜色border-top设置上边框边框宽度 边框类型 边框颜色border-bottom设置下边框边框…...

动态规划入门之线性动态规划

P1115 最大子段和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目要求求连续得一段子串使其累加和最大。 我们做动态规划首先考虑小情况&#xff0c;然后推而广之。 假设三个数1&#xff0c;-2&#xff0c;5. 我们先选1然后我们在-2以及-2加1里边选&#xff0c;我们选…...

基于HTML+CSS+Echarts大屏数据可视化集合共99套

基于HTMLCSSEcharts大屏数据可视化集合共99套 一、介绍二、展示1.大数据展示系统2.物流订单系统3.物流信息系统4.办税渠道监控平台5.车辆综合管控平台 三、其他系统实现四、获取源码 一、介绍 基于HTML/CSS/Echarts的会议展览、业务监控、风险预警、数据分析展示等多种展示需求…...

Leetcode 0814周总结

本周刷题&#xff1a; 88, 108, 121, 219, 228, 268, 283, 303, 349, 350, 414, 448 88 合并两个有序数组 nums1{1, 2, 3 ,0, 0, 0} nums2{2, 5, 6} 合成效果&#xff1a;nums1{1, 2, 2, 3, 5, 6} 思路&#xff1a;【双指针】对两个数组设置双指针&#xff0c;依次比较哪…...

华为网络篇 OSPF的Silent-Interface-33

难度1复杂度1 目录 一、实验拓扑 二、实验步骤 三、实验过程 总结 一、实验拓扑 二、实验步骤 1.搭建如图所示的网络拓扑&#xff1b; 2.初始化各设备&#xff0c;配置相应的IP地址&#xff0c;测试直连网络的连通性&#xff1b; 3.整个网络配置OSPF协议&#xff0c;查看…...

longtext,bigint是什么数据类型

longtext 是一种数据类型&#xff0c;用于在关系型数据库中存储长文本或大段的文本数据。它通常用于存储超过普通文本长度限制的内容&#xff0c;比如文章、博客内容、HTML 代码等。 在多数关系型数据库中&#xff0c;longtext 是一种用于存储可变长度字符数据的类型&#xff…...

Hive无法启动的解决方案

关掉虚拟机后&#xff0c;重新启动后&#xff0c;按照Hadoop和Hive的流程重新启动&#xff0c;发现无法启动成功&#xff0c;特别是元数据服务无法启动&#xff0c;出现以下错误: Exception in thread “main” java.lang.RuntimeException: java.net.ConnectException: Call F…...

Threejs环境、透视相机、坐标系、光源

文章目录 如何引入threejsnpm方式script方式script module方式 基本流程与坐标摄像机Geometry(几何体)和Material(材质)光源 如何引入threejs 对于很多刚刚上手threejs的朋友&#xff0c;可能第一步引入threejs就出问题了&#xff0c; 明明已经导入了&#xff0c;就是这样问题…...

浏览器打不开网页、但是电脑有网络,解决办法(win11)

2023.07.06测试有效 华为电脑拿去免费拆机保养后&#xff0c;发现浏览器连接不上网了&#xff0c;但是&#xff01;微信又能登录得上&#xff0c;也就是说电脑还是有网的。 原文链接 一、问题截图 二、解决方法 1.右键打开“网络和Internet设置” 2.打开“代理” 3.将该选项设…...

【车载开发系列】GIT安装详细教程

【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程 【车载开发系列】GIT安装详细教程一. GIT软件概念二. GIT安装步骤三. GIT安装确认三. GIT功能使用1&#xff09;Git Bash2&#xff09;Git CMD3&#xff09;Git FAQs4&#xff09;Git GUI 一. GIT软件概念 G…...

2024年马蹄杯专科组第三场初赛 解题报告 | 珂学家

前言 题解 VP了这场比赛&#xff0c;整体还是偏简单&#xff0c;最难的题是数论相关&#xff0c;算一道思维题。 也看了赛时榜单&#xff0c;除了数论&#xff0c;大模拟和图论题也是拦路虎。 打工人 有趣的一道数学题&#xff0c;有点绕 很像数列和 ∑ i 1 i n i n ∗ …...

ubuntu运行qq音乐闪退

ubuntu运行qq音乐闪退 修改/usr/share/applications中的qqmusic.desktop&#xff0c;在Exec后加上 --no-sandbox,如下图所示&#xff1a; 该文件有可能是只读&#xff0c;权限不够的话用sudo vim qqmusic.desktop...

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型

相机网线RJ45连接器双端带线5米8芯绿色网线注塑成型&#xff0c;这款网线采用了环保的绿色材质&#xff0c;线长5米&#xff0c;足够满足大多数拍摄场景的需求。更重要的是&#xff0c;它采用了8芯设计&#xff0c;保证了数据传输的稳定性和高速性。在接口方面&#xff0c;它采…...

这几款让人上头AO级车

在心里一直就有这几款车的位置,那就是海豚、元PLUS、元UP。这几款车虽说定位是95后、00后,其实70、80后也被深深吸引,所以说时尚没有界限,大家对美的追求都是一致的。这几款车自上市后就是炸街产品,赢得了市场的青睐。这几款车型是比亚迪细分市场后的产物,刚开始上市的时…...

读创公司调研|江波龙:两款自研主控芯片已批量出货,并实现数千万颗规模化产

读创公司调研|江波龙:两款自研主控芯片已批量出货,并实现数千万颗规模化产品导入)江波龙海透露,公司两款自研主控芯片已经批量出货,赋能公司eMMC和SD卡两大核心产品线,并已经实现了数千万颗的规模化产品导入。江波龙公告截图公开资料显示,江波龙主要从事Flash及DRAM存储器…...

型格/飞度無限MUGEN版上市售价9.78万元起

3月7日,广汽本田無限MUGEN热血双核在亚洲规模最大的改装车展“2024深圳国际定制改装汽车展览会”上市。型格無限MUGEN版售价15.79万元起,飞度無限MUGEN版售价9.78万元起。型格/飞度無限MUGEN版是市面少有的量产官改神车,上路合规,配齐玩车迷梦寐以求的無限MUGEN定制套件,每…...

2.0T275马力,油耗6.3L能加92,5米大7座

探险者固然是一款很好的车型,特别是昆仑巅峰版还带后桥限滑差速器,脱困能力更强。但探险者的价格终归比较高,退而求其次也可以看看全新换代的锐界L,整体实力也不差。新车指导价为22.98-30.98万元,目前终端优惠8800元左右。??优缺点速览优点:1、提供纯燃油和油电混动2、提…...

记录使用 Vue3 过程中的一些技术点

1、自定义组件&#xff0c;并使用 v-model 进行数据双向绑定。 简述&#xff1a; 自定义组件使用 v-model 进行传参时&#xff0c;遵循 Vue 3 的 v-model 机制。在 Vue 3 中&#xff0c;v-model 默认使用了 modelValue 作为 prop 名称&#xff0c;以及 update:modelValue 作为…...

GPT-4o:重塑人机交互的未来

一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能&#xff08;AI&#xff09;领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术一直被视为连接人类与机器的桥梁。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;NLP领域迎来了前所未有的变革…...