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

Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述

本教程旨在助力您搭建一个基于 Keepalived 和 LVS(Linux Virtual Server)的高可用负载均衡环境,同时使其完美适配 Websocket 长连接场景,确保您的 Web 应用能够高效、稳定地运行,从容应对高并发访问,并且在服务器遭遇故障时实现自动无缝切换,为服务的连续性保驾护航。

二、环境准备

  1. 服务器规划
    • 准备至少 3 台服务器,推荐选用 CentOS 7 或以上版本的 Linux 操作系统,且在安装系统时确保已勾选基础网络工具与开发包。本教程中服务器角色及对应示例 IP 地址分配如下:
      • LVS 负载均衡器(MASTER):192.168.1.100
      • LVS 负载均衡器(BACKUP):192.168.1.101
      • Real Server 1:192.168.1.102
      • Real Server 2:192.168.1.103
      • VIP:192.168.1.200
    • 所有服务器需处于同一局域网内,务必保证相互之间能够通过 ping 命令顺畅连通,并且具备访问互联网的能力,用于后续软件安装及更新操作。
  2. 网络配置检查与调整
    • 在每台服务器上,执行 ifconfig 或 ip addr show 命令查看网卡配置信息,确保网卡正常工作且 IP 地址配置准确无误。例如,在 LVS MASTER 服务器上运行 ip addr show eth0(假设网卡名为 eth0),应得到类似如下输出:
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0valid from Sat, 01 Jan 2022 00:00:00 UTC valid until Sun, 01 Jan 2023 00:00:00 UTC
    • 若发现网络配置有误,使用 vi /etc/sysconfig/network-scripts/ifcfg-eth0(以 eth0 为例)编辑网卡配置文件,按需修改 IP 地址、子网掩码、网关等参数,修改完成后执行 systemctl restart network 重启网络服务,使新配置生效。 

三、安装软件

  1. 在 LVS 负载均衡器(MASTER 和 BACKUP)以及 Real Server 上,打开终端,通过 yum 命令安装所需软件:
    • yum install -y ipvsadm keepalived
    • ipvsadm:这是配置 LVS 规则的核心工具,利用它能够灵活地定义虚拟服务器、关联 Real Server 并指定负载均衡算法,是构建 LVS 功能体系的关键组件。
    • keepalived:一方面,它基于 VRRP(Virtual Router Redundancy Protocol)协议提供高可用保障,能将多台物理路由器虚拟化为一个 “虚拟路由器”,使得在主路由器出现故障时,备份路由器可迅速自动接管服务,有效规避单点故障风险;另一方面,它能够与 LVS 紧密协作,实现对 Real Server 的健康监测以及根据服务器状态动态调整负载均衡策略。

四、配置 Keepalived + Lvs(MASTER)节点

  1. 打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf,该文件是 Keepalived 的核心配置枢纽,所有与高可用、负载均衡及相关辅助功能的设定均在此文件内完成。
  2. 进行如下配置:
    global_defs {notification_email {your_email@example.com  # 务必替换为您真实有效的报警邮箱地址,其用途在于接收 Keepalived 运行过程中的异常报警信息,诸如主备切换失败、健康检查持续报错等突发状况。一旦出现问题,Keepalived 会自动向此邮箱发送详细通知邮件,以便系统管理员能够及时察觉并着手处理。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS1  # 路由器标识,在当前搭建的这个高可用环境所构成的 VRRP 域内,MASTER 和 BACKUP 的 router_id 必须不同,此处设定为 LVS1,它用于在 VRRP 协议数据包中标识不同的路由器实例,从而确保节点间能够准确无误地相互识别。
    }vrrp_instance VI_1 {state MASTER  # 明确此节点在 VRRP 实例中扮演“主”的角色,意味着在通常运行状态下,它将掌控对外提供服务的虚拟 IP(VIP),并肩负起主要的负载均衡重任。interface eth0  # 根据服务器实际使用的网卡名称进行修改,该参数指定 Keepalived 用于收发 VRRP 数据包的网卡接口,务必确保与所在服务器的实际网卡保持一致,否则整个系统将无法正常运转。virtual_router_id 51  # 虚拟路由 ID,在同一个 VRRP 域内,MASTER 和 BACKUP 的此项 ID 必须严格一致,它用于唯一标识一组虚拟路由器,取值范围通常为0 - 255,不同的 ID 代表不同的虚拟路由群组。priority 100  # 优先级数值,在主备节点选举过程中起着决定性作用,MASTER 的优先级必须高于 BACKUP,数值越大优先级越高,本示例中设为 100,如此一来,当主节点遭遇故障时,备份节点将依据优先级高低判断是否接管服务。advert_interval 1authentication {type PASSpassword 1111  # 密码,MASTER 和 BACKUP 需确保一致,其主要功能是用于 VRRP 节点间的认证,确保只有授权的节点才能参与虚拟路由器的运作,防止非法节点接入。}virtual_ipaddress {192.168.1.200/24  # 虚拟 IP(VIP),依据实际网络网段进行合理设置,这是面向外部客户端提供服务的统一 IP 地址,客户端将通过访问此 IP 来获取相应服务。在主节点正常运行期间,此 VIP 会绑定在主节点的网卡之上,一旦主节点发生故障,VIP 将自动无缝切换至备份节点的网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上述设置紧密对应,在此处定义了一个虚拟服务器,明确了对外服务的 IP 地址与端口号,后续的 Real Server 将挂载在此虚拟服务器之下,依照负载均衡策略接收并处理分发而来的请求。lb_algo wrr  # 加权轮询调度算法,您可根据实际需求进行灵活切换,如选用 rr(轮询)、sh(源地址散列)等其他算法。wrr 算法的优势在于能够依据 Real Server 的权重值来合理分配请求,不同权重的 Real Server 获取请求的机会不尽相同,权重越大则机会越多,相较于简单的轮询算法,它能更为精准地适配不同性能的 Real Server,进而实现更为优化、合理的负载分配效果。lb_kind DR  # 工作模式,DR(Direct Routing)模式在性能表现上较为出色,当然您也可根据实际情况选择 NAT 等其他模式。在 DR 模式下,客户端请求的数据包将直接发送至 Real Server,而响应数据包同样会直接返回客户端,LVS 负载均衡器在此过程中仅负责高效处理请求的分发与调度工作,极大地减轻了自身负担,显著提升了整体系统性能。不过,采用 DR 模式需要对 Real Server 进行一系列特殊配置(如设置 VIP 等操作),后续步骤会详细阐述。persistence_timeout 3600  # 持久连接超时时间,单位为秒,考虑到 Websocket 长连接的特性,特意将此值设置得较长,您也可根据实际业务场景进行适当调整。该参数决定了源自同一源 IP 的请求在多长时间内会被持续转发至同一个 Real Server,对于 Websocket 长连接而言,充足的超时时间能够确保在连接存续期间,客户端后续发出的所有请求都能被精准导向最初建立连接的 Real Server,有效避免因负载均衡调度而意外导致连接中断的情况发生。persistence_granularity SOURCE_IP  # 以源 IP 实现持久连接,这一设置能够切实确保同一客户端的请求始终被定向到同一 Real Server。其原理是基于客户端的源 IP 进行哈希运算,只要源 IP 保持不变,后续所有请求都将被稳定送达最初建立连接的那台 Real Server,这对于维护 Websocket 长连接的稳定性起着举足轻重的作用。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:vi /etc/sysctl.conf
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时主节点会依据新配置尝试绑定虚拟 IP(VIP),并基于设定好的调度算法、健康检查机制等对 Real Server 进行负载均衡调度。

五、配置 Keepalived + Lvs(BACKUP)节点

  1. 同样打开 Keepalived 的配置文件:vi /etc/keepalived/keepalived.conf
  2. 修改如下内容:
    global_defs {notification_email {your_email@example.com  # 替换为真实的报警邮箱地址,作用与 MASTER 节点配置相同。}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id LVS2  # 更改为与 MASTER 不同的标识,此处设为 LVS2,用于清晰区分主备节点。
    }vrrp_instance VI_1 {state BACKUP  # 表明此节点在 VRRP 实例中的角色为“备份”,正常运行时不承担对外服务职责,处于待命状态,一旦主节点出现故障,将立即接管服务。interface eth0  # 根据实际网卡名修改,需与 MASTER 节点对应网卡保持一致。virtual_router_id 51  # 与 MASTER 一致,同属一个虚拟路由组。priority 99  # 低于 MASTER 的优先级,本示例中设为 99,当主节点发生故障且此备份节点在剩余备份节点中优先级最高时,将顺利接管主节点工作,成为新的主节点。advert_interval 1authentication {type PASSpassword 1111  # 与 MASTER 一致,用于节点间认证。}virtual_ipaddress {192.168.1.200/24  # 与 MASTER 一致的 VIP,当主节点故障时,此 VIP 将自动切换到该备份节点网卡上。}
    }virtual_server 192.168.1.200 80 {  # VIP 和端口,与上面设置对应,配置与 MASTER 节点类似,确保备份节点也能准确无误地对 Real Server 进行负载均衡调度。lb_algo wrr  # 加权轮询调度算法,可按需更换,如 rr(轮询)、sh(源地址散列)等。lb_kind DR  # 工作模式,DR 模式性能较好,也可按需选 NAT 等。persistence_timeout 3600  # 持久连接超时时间,单位秒,为适应 Websocket 长连接设长些,可调整。persistence_granularity SOURCE_IP  # 以源 IP 实现持久,确保同一客户端请求到同一 Real Server。protocol TCPreal_server 192.168.1.102 80 {  # Real Server 1 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}real_server 192.168.1.103 80 {  # Real Server 2 的 IP 和端口weight 1TCP_CHECK {connect_timeout 3nb_get_replies 3delay_loop 5}}
    }
  3. 保存并退出配置文件。
  4. 开启路由转发功能:
    • 编辑 /etc/sysctl.conf 文件:
    • 添加或确认以下内容:
      net.ipv4.ip_forward = 1
    • 执行命令使配置生效:sysctl -p
  5. 重启 Keepalived 服务:
    • 执行命令 systemctl restart keepalived,使 Keepalived 按照新配置运行,此时备份节点会依据新配置进入监听状态,时刻准备在主节点出现故障时接管服务,保障整个高可用负载均衡系统的正常运作。

六、配置 Real Server

  1. 在 Real Server(以 192.168.1.102 和 192.168.1.103 为例)上:
    • 编辑 /etc/sysctl.conf 文件:
# 防止 ARP 冲突,调整 ARP 相关内核参数
net.ipv4.arp_ignore = 1
net.ipv4.arp_announce = 2
  • net.ipv4.arp_ignore = 1:当设置为 1 时,若接收到 ARP 请求,且目标 IP 为本地配置的 VIP,此时仅当请求的源 IP 与本机某一网卡的 IP 处于同一网段时,才会响应 ARP 请求,这样能够有效规避不必要的 ARP 响应,最大程度防止 ARP 冲突的发生。
  • net.ipv4.arp_announce = 2:设置为 2 时,当本机向外发送 ARP 宣告时,将始终使用本机的真实 IP 地址,而非 VIP,以此确保 ARP 信息的准确性与一致性,避免网络中的其他设备出现混淆情况。
  • 执行命令使配置生效:sysctl -p
  • 编写设置 VIP 的脚本,如 vi /etc/init.d/lvsrs,内容如下:
#!/bin/bash
VIP=192.168.1.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 256.256.256.255 up
/sbin/route add -host $VIP dev lo:0
  • 该脚本的目的在于在 Real Server 的本地环回接口(0) 上设置 VIP。在 LVS 的 DR 模式下,Real Server 需要能够精准识别并妥善处理发往 VIP 的请求,将 VIP 绑定至本地环回接口,既便于统一管理,又能有效避免与真实网卡 IP 发生冲突。首先明确定义 VIP 的值,随后通过 ifconfig 命令将 VIP 绑定到 lo:0 接口,并设置相应的广播地址和子网掩码,最后利用 route 命令添加一条指向 VIP 的的路由,确保发往 VIP 的数据包能够在本地得到有效处理。
  • 赋予脚本执行权限:chmod +x /etc/init.d/lvsrs
  • 启动脚本:/etc/init.d/lvsrs start

七、测试

在客户端上

  • 使用 ping 命令测试能否连通虚拟 IP(VIP),例如在一台与搭建环境处于同一局域网且能正常访问网络的客户端机器上执行:
ping 192.168.1.200
  • 如果能收到来自 VIP 的正常响应(不断显示类似 Reply from 192.168.1.200: bytes=32 time<1ms TTL=64 的信息),则说明客户端到 VIP 的网络链路是通畅的,初步表明负载均衡前端配置没有问题。

在 LVS 负载均衡器(MASTER 和 BACKUP)上

  • 使用 ping 命令分别测试能否连通各个 Real Server 的 IP 地址,例如在 MASTER 节点上执行:
ping 192.168.1.102
ping 192.168.1.103
  • 若都能正常收到回应,表明负载均衡器与后端 Real Server 之间的网络连接正常,不存在物理层面的网络故障,这是后续负载均衡功能能正常发挥的基础条件。

验证虚拟 IP(VIP)绑定情况

  1. 在 LVS 负载均衡器(MASTER)上
    • 执行 ip addr show 命令查看网卡信息,检查 VIP 是否正确绑定在 MASTER 节点的网卡上,正常情况下应该能看到类似如下输出(假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 其中 inet 192.168.1.200/24 这一行就表示 VIP 已成功绑定在该网卡上,这意味着 MASTER 节点已经做好准备利用此 VIP 接收客户端请求并进行负载均衡处理。

  1. 手动停止 MASTER 节点的 Keepalived 服务(仅用于测试 VIP 切换)
    • 在 MASTER 节点上执行 systemctl stop keepalived 命令。
    • 接着迅速在 LVS 负载均衡器(BACKUP)上再次执行 ip addr show 命令查看网卡信息,此时应该能看到 VIP 已经切换绑定到 BACKUP 节点的网卡上,类似如下输出(同样假设网卡名为 eth0):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_RETURNS> mtu 1500 qid 10000link/ether 00:11:22:33:44:55inet 192.168.1.101/24 brd 192.168.1.255 scope global noprefixroute eth0inet 192.168.1.200/24 brd 192.168.1.255 scope global secondary noprefixroute eth0
  • 这就验证了 Keepalived 的高可用切换机制生效,VIP 能够在主节点故障时自动迁移到备份节点,保障服务持续可用。完成测试后,可以在 MASTER 节点上再次执行 systemctl start keepalived 恢复正常状态。

相关文章:

Keepalived + LVS 搭建高可用负载均衡及支持 Websocket 长连接

一、项目概述 本教程旨在助力您搭建一个基于 Keepalived 和 LVS&#xff08;Linux Virtual Server&#xff09;的高可用负载均衡环境&#xff0c;同时使其完美适配 Websocket 长连接场景&#xff0c;确保您的 Web 应用能够高效、稳定地运行&#xff0c;从容应对高并发访问&…...

01-spring-理-beanFactory

需要掌握 拿到容器中的 实例这个可以debug IOC容器SpringBootApplication(exclude {DataSourceAutoConfiguration.class}) public class RuoYiApplication {public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {// System.setProp…...

【pytorch】卷积神经网络

1 图像卷积 1.1 互相关运算 在二维互相关运算中&#xff0c;卷积窗口从输入张量的左上角开始&#xff0c;从左到右、从上到下滑动。当卷积窗口滑动到新一个位置时&#xff0c;包含在该窗口中的部分张量与卷积核张量进行按元素相乘&#xff0c;得到的张量再求和得到一个单一的标…...

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具&#xff0c;可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API&#xff0c;数据可视化来显示…...

RISCV学习(3)HPM5301 MCU芯片学习

RISCV学习(3)HPM5301 MCU芯片学习 1、HPM5301 背景介绍 笔者在RT-Thread开发者大会上领了一个HPM5301EVKLite的盲盒板子,就抽空点个灯介绍一下。主要板子如下图所述,类似于一个最小系统板。 开发厂商:先楫半导体,HPMICRO芯片架构:32位的RISC-V,RV32,支持IMAFDCPB指…...

拆解 | 公募REITs:发售上市流程及细节

Hi,围炉喝茶聊产品的新老朋友好,在国庆假期写了两篇有关公募REITs的文章,先简单回顾下,以达到温故知新的效果。 第一篇:一起探索:公募REITs,它从本质、背景、概念等维度较系统介绍了公募REITs,如:明明是“不动产基金”,为什么叫REITs?说到底,投资REITs的实质是什么…...

嵌入式系统 第七讲 ARM-Linux内核

• 7.1 ARM-Linux内核简介 • 内核&#xff1a;是一个操作系统的核心。是基于硬件的第一层软件扩充&#xff0c; 提供操作系统的最基本的功能&#xff0c;是操作系统工作的基础&#xff0c;它负责管理系统的进程、内存、设备驱动程序、文件和网络系统&#xff0c; 决定着系统的…...

记一次 dockerfile 的循环依赖错误

文章目录 1. 写在最前面1.1 具体循环依赖的例子 2. 报错的位置2.1 代码快速分析2.2 代码总结2.3 关于 parser 的记录 3. 碎碎念 1. 写在最前面 笔者在使用 dockerfile 多阶段构建的功能时&#xff0c;写出了一个「circular dependency detected on stage: xx」的错误。 解决方…...

用css实现瀑布流布局

上效果 知识理解 column-count: 4; column-gap: 15px;实现固定四行瀑布流布局 columns: 200px auto;column-gap: 15px;由浏览器根据容器的宽度自动调整&#xff0c;尽可能一行多个200px宽度的列数 <!DOCTYPE html> <html lang"en"><head><me…...

Spring Bean required a single bean, but 2 were found,发现多个 Bean

问题复现 在使用 Autowired 时&#xff0c;不管你是菜鸟级还是专家级的 Spring 使用者&#xff0c;都应该制造或者遭遇过类似的错误&#xff1a; required a single bean, but 2 were found 顾名思义&#xff0c;我们仅需要一个 Bean&#xff0c;但实际却提供了 2 个&#xff…...

用 Python 从零开始创建神经网络(十八):模型对象(Model Object)

模型对象&#xff08;Model Object&#xff09; 引言到目前为止的完整代码&#xff1a; 引言 我们构建了一个可以执行前向传播、反向传播以及精度测量等辅助任务的模型。通过编写相当多的代码并在一些较大的代码块中进行修改&#xff0c;我们实现了这些功能。此时&#xff0c;…...

Springboot 升级带来的Swagger异常

当升级到Springboot 2.6.0 以上的版本后&#xff0c;Swagger 就不能正常工作了, 启动时报如下错误。当然如果你再使用sping boot Actuator 和 Springfox, 也会引起相关的NPE error. (github issue: https://github.com/springfox/springfox/issues/3462) NFO | jvm 1 | 2022/04…...

【蓝桥杯研究生组】第15届Java试题答案整理

D 题 试题 D: 商品库存管理 时间限制: 3.0s 内存限制: 512.0MB 本题总分&#xff1a;10 分 【问题描述】 在库存管理系统中&#xff0c;跟踪和调节商品库存量是关键任务之一。小蓝经营的仓库中存有多种商品&#xff0c;这些商品根据类别和规格被有序地分类并编号&#xff0c;…...

数据结构(链式栈)

链式栈 链式栈&#xff08;Linked Stack&#xff09;是一种基于链表的数据结构&#xff0c;用于实现栈&#xff08;后进先出&#xff0c;LIFO&#xff09;的特性。与基于数组的栈不同&#xff0c;链式栈通过动态分配内存来存储数据&#xff0c;这使得它更加灵活&#xff0c;能…...

《代码随想录》Day22打卡!

回溯算法 《代码随想录》回溯算法&#xff1a;组合 本题完整题目如下&#xff1a; 本题的完整思路如下&#xff1a; 1.本题使用回溯算法&#xff0c;其实回溯和递归是一样的道理&#xff0c;也是分为三步曲进行&#xff1a; 2.第一步&#xff1a;确定递归函数的返回值和参数&…...

NetSuite Formula(HTML)超链打开Transaction

当Saved Search作为Sublist应用在Form时&#xff0c;如果Document Number是Group过的&#xff0c;则会出现如下超链失效的情况。 解决办法&#xff1a; 可以利用Saved Search中的Formula&#xff08;HTML&#xff09;功能来构建超链&#xff0c;用于打开Transaction。 以下图…...

传统听写与大模型听写比对

在快节奏的现代生活中&#xff0c;听写技能仍然是学习语言和提升认知能力的重要环节。然而&#xff0c;传统的听写练习往往枯燥乏味&#xff0c;且效率不高。现在&#xff0c;随着人工智能技术的发展&#xff0c;大模型听写工具的问世&#xff0c;为传统听写带来了革命性的变革…...

本地快速推断的语言模型比较:Apple MLX、Llama.cpp与Hugging Face Candle Rust

本地快速推断的语言模型比较&#xff1a;Apple MLX、Llama.cpp与Hugging Face Candle Rust 在自然语言处理&#xff08;NLP&#xff09;部署中&#xff0c;推断速度是一个关键因素&#xff0c;尤其是对于支持大型语言模型&#xff08;LLM&#xff09;的应用来说。随着Apple M1…...

Tomcat调优相关理解

什么是QPS&#xff1f; 是Queries Per Second 的缩写&#xff0c;是指服务器每秒查询数&#xff0c;比如定义一个a接口&#xff0c;该接口是10QPS&#xff0c;那么就是指该接口每秒可以处理10个请求 springboot默认并发处理数是多少&#xff1f; springboot并发处理要看serv…...

python爬虫--小白篇【selenium自动爬取文件】

一、问题描述 在学习或工作中需要爬取文件资源时&#xff0c;由于文件数量太多&#xff0c;手动单个下载文件效率低&#xff0c;操作麻烦&#xff0c;采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件&#xff0c;并将其转为Markdown格式。…...

Flink读写Kafka(DataStream API)

在Flink里,已经预定义了kafka connector,使用该connector我们可以读写kafka,并且能实现exactly once的语义。 要使用需要引入相关的maven依赖,在这里,因为读写kafka,就会涉及一个问题,kafka-client和broker的版本兼容问题,不过因为kafka client和broker的双向兼容的良…...

活动预告 | Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…...

nginx核心配置文件及常用功能

华子目录 配置文件说明配置文件格式说明nginx配置文件中的变量默认nginx.conf配置文件格式说明main全局配置events配置段 nginx配置中的root和aliaslocation用法详解虚拟主机配置nginx账户认证功能nginx自定义错误页面nginx自定义日志 配置文件说明 nginx官方帮助文档&#xf…...

基于AT89C51单片机的可暂停八路抢答器设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90196607?spm1001.2014.3001.5503 C15 部分参考设计如下&#xff1a; 摘要 随着社会进步和科技发展&#xff0c;电子设备在各类活动中的应用日益普遍&#xff0c…...

github加速源配置

访问github速度很慢&#xff1f; 试试一下方法 1&#xff1a; 编辑配置 vim /etc/docker/daemon.json 2&#xff1a;都复制粘贴上 { "registry-mirrors": [ "https://docker.211678.top", "https://docker.1panel.live…...

骑行解压:身心的奇妙之旅,VELO Angel Revo坐垫

在快节奏的都市生活中&#xff0c;骑行不仅是一种健康的生活方式&#xff0c;更是一种心灵的释放。从心理生理学的角度来看&#xff0c;骑行能够促使身体分泌内啡肽&#xff0c;带来愉悦感&#xff0c;同时&#xff0c;它还能转移注意力&#xff0c;缓解焦虑。在这场身心的奇妙…...

(七)- plane/crtc/encoder/connector objects

1&#xff0c;framebuffer/plane Rockchip RK3399 - DRM framebuffer、plane基础知识 - 大奥特曼打小怪兽 - 博客园 2&#xff0c;crtc Rockchip RK3399 - DRM crtc基础知识 - 大奥特曼打小怪兽 - 博客园 3&#xff0c;encoder/connector/bridge Rockchip RK3399 - DRM en…...

从零开始:如何在 .NET Core 中优雅地读取和管理配置文件

在.net中的配置文件系统支持丰富的配置源&#xff0c;包括文件(json、xml、ini等)、注册表、环境变量、命令行、Azure Key Vault等&#xff0c;还可以配置自定义配置源并跟踪配置的改变&#xff0c;然后按照优先级进行覆盖&#xff0c;总之对文件的配置有很多方法&#xff0c;这…...

Python中PDF转Word的技术

Python PDF转Word技术概述 在日常办公和数据处理中&#xff0c;经常需要将PDF文档转换为Word文档&#xff0c;以便进行编辑、修改或格式调整。Python作为一种强大的编程语言&#xff0c;提供了多种库和工具来实现这一功能。以下是对Python中PDF转Word技术的详细介绍。 一、技…...

挑战春招找到java后端实习第一天(1.1)

八股文 1.java中有哪些集合类请简单介绍一下 集合类分为两大类Collection和Map。前者是对象的集合&#xff0c;后者是键值对。 Collection分为List&#xff0c;Set&#xff0c;Queue三个接口。 List有LinkedList&#xff0c;ArrayList&#xff0c;Vector Set&#xff08;不…...

leetcode hot 小偷

class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""# 使用动态规划&#xff0c;把之前的给保存起来ans[0,nums[-1]]for i in range(1,len(nums)):ans.append(max(ans[-1],ans[-2]nums[-1*i-1]))return ans[-1]…...

一、Git与GitHub基础说明

Git与GitHub Git与GitHub一、Git1定义2核心功能(1) 版本控制(2) 分支管理(3) 合并操作 二、GitHub1定义2核心功能(1)远程仓库托管(2)Pull Requests&#xff08;拉取请求&#xff09;(3) Issue Tracking&#xff08;问题跟踪&#xff09;(4) 团队管理(5) 社交功能(6)个人资料和贡…...

Unity-Mirror网络框架-从入门到精通之Room示例

文章目录 前言Room示例场景设置NetworkRoomManagerSpawnerRewardRoomPlayerGamePlayer 最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人游戏开发设计。它使得开发者能够轻松实现…...

httpslocalhostindex 配置的nginx,一刷新就报404了

当你的Nginx配置导致页面刷新时报404错误时&#xff0c;通常是由于以下几个原因造成的&#xff1a; 静态文件路径配置错误&#xff1a;Nginx没有正确地指向静态文件的目录。前端路由问题&#xff1a;如果是SPA&#xff08;单页应用&#xff09;&#xff0c;刷新页面时Nginx没有…...

Java重要面试名词整理(十九):Seata

文章目录 分布式事务概述实现思路&#xff1a;两阶段提交协议(2PC) SeataSeata的三大角色Seata的生命周期Seata解决方案 AT模式一阶段二阶段 XA模式TCC模式如何处理空回滚如何处理幂等如何处理悬挂 SAGA模式四种模式对比 分布式事务概述 在微服务架构中&#xff0c;完成某一个…...

OpenCV和PyQt的应用

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行翻…...

【Linux】进程间通信(一)

目录 一、进程间通信1.1 进程间通信目的1.2 理解进程间通信1.3 进程间通信发展1.4 进程间通信分类 二、管道2.1 什么是管道2.2 管道的原理2.3 匿名管道2.3.1 pipe函数2.3.2 匿名管道的实现2.3.3 匿名管道小结2.3.3.1 匿名管道的四种情况2.3.3.2 匿名管道的五种特性 2.3.4 匿名管…...

Fama MacBeth两步法与多因子模型的回归检验

Fama MacBeth两步法与多因子模型的回归检验 – 潘登同学的因子投资笔记 本文观点来自最近学习的石川老师《因子投资&#xff1a;方法与实践》一书 文章目录 Fama MacBeth两步法与多因子模型的回归检验 -- 潘登同学的因子投资笔记 多因子回归检验时序回归检验截面回归检验Fama–…...

Postman[4] 环境设置

作用&#xff1a;不同的环境可以定义不同的参数&#xff0c;在运行请求时可以根据自己的需求选择需要的环境 1.创建Environment 步骤&#xff1a; Environment-> ->命名->添加环境变量 2.使用Environment 步骤&#xff1a;Collection- >右上角选择需要的环境...

【paddle】初次尝试

张量 张量是 paddlepaddle&#xff0c; torch&#xff0c; tensorflow 等 python 主流机器学习包中唯一通货变量&#xff0c;因此应当了解其基本的功能。 张量 paddle.Tensor 与 numpy.array 的转化 import paddle as paddle import matplotlib.pyplot as plt apaddle.to_t…...

开源架构中的数据库选择优化版

上一篇文章推荐&#xff1a; 开源架构学习指南&#xff1a;文档与资源的智慧锦囊&#xff08;New&#xff09; 我管理的社区推荐&#xff1a;【青云交社区】和【架构师社区】 推荐技术圈福利社群&#xff1a;点击快速加入 开源架构中的数据库选择优化版 一、引言二、关系型开源…...

Echarts+vue电商平台数据可视化——webSocket改造项目

websocket的基本使用&#xff0c;用于测试前端能否正常获取到后台数据 后台代码编写&#xff1a; const path require("path"); const fileUtils require("../utils/file_utils"); const WebSocket require("ws"); // 创建WebSocket服务端的…...

【网络安全实验室】SQL注入实战详情

如果额头终将刻上皱纹&#xff0c;你只能做到&#xff0c;不让皱纹刻在你的心上 1.最简单的SQL注入 查看源代码&#xff0c;登录名为admin 最简单的SQL注入&#xff0c;登录名写入一个常规的注入语句&#xff1a; 密码随便填&#xff0c;验证码填正确的&#xff0c;点击登录…...

【信息系统项目管理师】第14章:项目沟通管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划沟通管理1、输入2、工具与技术3、输出二、管理沟通1、输入2、工具与技术3、输出三、监督沟通1、输入2、工具与技术3、输出一、规划沟通管理 定义:规划沟通管理是基于每个干系人或干系人群体的信息需求…...

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html&#xff09;显示图片界面 总结 前言 最近&#xff0c;老板让写一个程序把yolov5检测模型部署到web端&#xff0c;在网页直接进行目标检测。经过1个星期的努力&#xff0c;终于实…...

什么是自治系统和非自治系统

自治系统 自治系统的特征是其状态方程不依赖于时间。举个简单的例子&#xff0c;考虑一阶常微分方程&#xff1a; d x d t − x \frac{dx}{dt} -x dtdx​−x 这是一个经典的指数衰减过程&#xff0c;其中状态 (x) 随时间 (t) 衰减。这个系统是自治的&#xff0c;因为它的演…...

使用 CSS 的 `::selection` 伪元素来改变 HTML 文本选中时的背景颜色

定义 ::selection 伪元素&#xff1a; 在你的 CSS 文件中&#xff0c;添加 ::selection 伪元素&#xff0c;并设置 background-color 属性来改变选中文本的背景颜色。 示例代码&#xff1a; ::selection {background-color: yellow; /* 你可以根据需要更改颜色 */color: black…...

从0入门自主空中机器人-3-【环境与常用软件安装】

关于本课程&#xff1a; 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程&#xff0c;包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程&#xff0c;带你从0开始&#xff0c;组装属于自己的自主无人机&#xff0c;并让…...

jmeter分布式启动

https://www.cnblogs.com/qtclm/p/11082081.html 1、代理机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在Jmeter/bin/jmeter.properties设置remote host 启动jmeter server 1、控制机&#xff1a;输入“ipconfig”&#xff0c;找到IP地址&#xff0c;在J…...

【Linux】HTTP cookie与session

在登录B站时&#xff0c;有登录和未登录两种状态&#xff0c; 问题&#xff1a;B站是如何认识我这个登录用户的&#xff1f;问题&#xff1a;HTTP是无状态、无连接的&#xff0c;怎么能够记住我&#xff1f; HTTP协议是无状态、无连接的。比如客户端&#xff08;浏览器&#…...