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

打造高可用集群的基石:深度解析Keepalived实践与优化

高可用集群

集群类型

集群类型主要分为负载均衡集群(LB)、高可用集群(HA)和高性能计算集群(HPC)三大类。每种集群类型都有其特定的应用场景和优势。

1. 负载均衡集群(LB)

负载均衡集群主要用于提高系统的性能、响应效率和可靠性,通过将访问请求分散到多个服务器上,以减少单个服务器的负载压力,从而提高整体的处理能力和访问速度。在负载均衡集群中,LVS(Linux Virtual Server)和haproxy是两种常用的软件解决方案。

  • LVS(Linux Virtual Server)
    • LVS是一个开源的负载均衡器,它工作在OSI模型的第四层(传输层),通过IP负载均衡技术实现高效的请求分发。
    • LVS支持多种工作模式,包括NAT(网络地址转换)、DR(直接路由)和TUN(IP隧道)等,每种模式都有其特定的应用场景和优缺点。
    • LVS通过IPVS(IP Virtual Server)模块实现负载均衡,IPVS是LVS集群系统的核心软件,负责将客户端的请求转发到后端的真实服务器上。
  • haproxy
    • haproxy是一个高性能的TCP/HTTP反向代理服务器和负载均衡器,支持大量的并发连接和高可用性。
    • haproxy提供了灵活的负载均衡算法,如轮询、最少连接数、源地址哈希等,可以根据实际需求进行配置。
    • haproxy还支持SSL卸载、HTTP压缩、会话保持等高级功能,可以进一步提升系统的性能和安全性。

2. 高可用集群(HA)

高可用集群主要用于提高系统的可靠性和可用性,确保在部分服务器出现故障时,整个系统仍然能够持续提供服务。在高可用集群中,keepalived是一款常用的开源软件。

  • keepalived
    • keepalived通过虚拟路由冗余协议(VRRP)实现高可用性,它可以在主服务器出现故障时,自动将虚拟IP地址和服务切换到备份服务器上,从而确保服务的连续性。
    • keepalived还提供了多种健康检查机制,如ICMP Ping、TCP端口检测和HTTP GET等,用于监测后端服务器的运行状态。
    • keepalived的配置相对简单,易于管理和维护,是构建高可用集群的常用选择之一。

3. 高性能计算集群(HPC)

高性能计算集群主要用于处理大规模的计算任务,如科学计算、数据分析、工程仿真等。HPC集群通过将多个高性能计算机连接在一起,利用并行计算和分布式计算技术,提高整体的计算能力和处理速度。

  • HPC集群的特点
    • 高性能:HPC集群采用高性能的计算机和存储设备,能够提供卓越的计算能力和存储性能。
    • 可扩展性:HPC集群可以根据实际需求进行扩展,增加更多的计算节点和存储设备,以满足更大规模的计算任务。
    • 灵活性:HPC集群支持多种操作系统和应用程序,可以灵活配置和部署,以适应不同的计算需求。

实现高可用

提升系统高用性的解决方案:降低MTTR- Mean Time To Repair(平均故障时间)

解决方案:建立冗余机制

主备、主主

active/passive 主/备

active/active 双主

active --> HEARTBEAT --> passive

active <--> HEARTBEAT <--> active

VRRP虚拟路由冗余协议

解决单点故障

VIP

VMAC

工作方式:抢占、非抢占、延时抢占

keepalived部署

简介

vrrp协议的软件实现,设计目的是为了高可用ipvs服务

 负载均衡是一种在真实集群之间分配 IP 流量的方法 服务器,提供一个或多个高可用性虚拟服务。在设计负载均衡拓扑时,必须考虑负载均衡器本身以及后面的真实服务器的可用性。

        Keepalived 为负载均衡和高可用性提供了框架。 负载均衡框架依赖于众所周知且广泛使用的 Linux 虚拟服务器 (IPVS) 内核模块,提供第 4 层负载均衡。 Keepalived 实现了一组健康检查器,以动态和自适应的方式 根据服务器池的运行状况维护和管理负载均衡的服务器池。 高可用性是通过虚拟冗余路由协议实现的 (VRRP)。VRRP是路由器故障切换的基础砖块。keepalived也 实现了一组到 VRRP 有限状态机的钩子 提供低级和高速协议交互。每个Keepalived 框架可以单独使用,也可以一起使用,以提供弹性基础设施。

简而言之,Keepalived 提供了两个主要功能:

  • LVS系统的健康检查
  • 实施 VRRPv2 堆栈以处理负载均衡器故障切换

架构

用户空间核心组件:

vrrp stack:VIP消息通告

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

特点

  • 部署简单,只需要配置一个配置文件即可
  • 加入了虚拟路由冗余协议,可以保证业务或网络不间断稳定运行

核心功能

  • 健康检查

        1、采用tcp三次握手,icmp请求,http请求,udp 、

        2、echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活

  • 故障切换

        1、主要应用在配置了主备的服务器上,使用虚拟路由冗余协议维持主备之间的心跳

        2、当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性

环境部署

四台主机 vip:100

realserver1:110

realserver2:120

KA1:10

KA2:20

关闭selinux、防火墙

[root@realserver1 ~]# getenforceDisabled[root@realserver1 ~]# systemctl status firewalld

realserver1/2中安装httpd

[root@realserver1 ~]# yum install httpd -y[root@realserver1 ~]# echo 192.168.86.110 > /var/www/html/index.html[root@realserver1 ~]# systemctl enable --now httpd[root@realserver2 ~]# echo 192.168.86.120 > /var/www/html/index.html

安装配置服务

KA1/2中

[root@Ka1 ~]# yum install keepalived -y

配置文件都是以块(block)的形式组成,每一个块的内容都包含在{ }中

主配置文件

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

修改全局配置

! Configuration File for keepalived
global_defs {
notification_email {
594233887@qq.com #keepalived 
timiniglee-zln@163.com
}
notification_email_from keepalived@KA1.timinglee.org
smtp_server 127.0.0.1         
smtp_connect_timeout 30         
router_id KA1.timinglee.org     vrrp_skip_check_adv_addr vrrp_strict 
vrrp_garp_interval 0 
vrrp_gna_interval 0 
vrrp_mcast_group4 224.0.0.18 
}

vrrp_gna_interval 0  后面有0

vrrp_route_id--必须唯一


vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 100priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}
}

修改后重启

[root@Ka1 ~]# systemctl enable --now keepalived.service

把配置复制到另一台

[root@Ka1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.86.20:/etc/keepalived/keepalived.conf

修改优先级、state

vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 100

测试效果--抓包命令

[root@Ka1 ~]# tcpdump -i eth0 -nn host 224.0.0.18

解决VIP不能通信

global_defs {notification_email {1540509690@qq.com}notification_email_from keepalived@timinglee.orgsmtp_server 127.0.0.1smtp_connect_timeout 30router_id ka1.timinglee.orgvrrp_skip_check_adv_addrvrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0vrrp_mcast_group4 224.0.0.18vrrp_iptables
}

日志

生成日志

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

指定0-7

KEEPALIVED_OPTIONS="-D -S 6"

[root@ka1 ~]# systemctl restart keepalived.service[root@ka1 ~]# vim /etc/rsyslog.conf# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local6.*                                                /var/log/keepalived.log

查看是否生成

[root@ka1 ~]# systemctl restart rsyslog.service[root@ka1 ~]# systemctl restart keepalived.service测试[root@ka1 ~]# ll /var/log/keepalived.log
-rw------- 1 root root 8168 Aug 11 21:11 /var/log/keepalived.log

独立配置子文件

创建子配置目录

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

修改主配置文件

[root@Ka1 ~]# vim /etc/keepalived/keepalived.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 {
#        192.168.86.100/24 dev eth0 label eth0:1
#    }
#}
include "/etc/keepalived/conf.d/*.conf"

注释掉上面的加入指向子配置文件路径

include "/etc/keepalived/conf.d/*.conf"

在子配置文件写配置

[root@Ka1 ~]# cat /etc/keepalived/conf.d/192.168.86.100.confvrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 100priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}}[root@Ka1 ~]#

 

然后重启服务

[root@Ka1 ~]# systemctl restart keepalived.service[root@Ka1 ~]# systemctl restart rsyslog.service

Keepalived企业应用示例

抢占模式和非抢占模式

默认为抢占模式,推荐使用非抢占模式

[root@Ka1 ~]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 100priority 100advert_int 1nopreempt          #设置非抢占模式authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.86.100/24 dev eth0 label eth0:1}
}#include "/etc/keepalived/conf.d/*.conf"

重启keepalived

延时抢占

[root@Ka1 ~]# vim /etc/keepalived/keepalived.confpreempt_delay 5s   #设置延迟5s抢占

VIP单播配置

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

禁用vrrp_strict

10:

    unicast_src_ip 192.168.86.10unicast_peer {192.168.86.20}

20:

    unicast_src_ip 192.168.86.20unicast_peer {192.168.86.10}

效果:

[root@Ka1 ~]# tcpdump -i eth0 -nn src host 192.168.86.10 and dst 192.168.86.20tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes14:46:13.904625 IP 192.168.86.10 > 192.168.86.20: VRRPv2, Advertisement, vrid 100, prio 100, authtype simple, intvl 1s, length 20

邮件通知

[root@ka1 ~]# yum install mailx -y[root@ka1 ~]# vim /etc/mail.rc[root@ka1 ~]# echo hello world | mail -s test 2584896723@qq.com

set from=2584896723@qq.comset smtp=smtp.qq.comset smtp-auth-user=2584896723@qq.comset smtp-auth-password=rbdnzxqskffidjjjset smtp-auth=loginset ssl-verify=ignore

QQ邮箱-->账号与安全-->安全设置

[root@ka1 ~]# vim /etc/keepalived/mail.sh#! /bin/bashmail_dst="2584896723@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 inmaster)send_message master;;backup)send_message backup;;fault)send_message fault;;*);;esac

[root@ka1 ~]# chmod +x /etc/keepalived/mail.sh[root@ka1 ~]# 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"

实现master/master的keepalived双主架构

ka1第二个

ka2第二个

实现IPVS的高可用性(LVS+keepalived)

[root@realserver2 ~]# vim /etc/sysctl.d/arp.confnet.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@realserver2 ~]# sysctl -p
[root@realserver2 ~]# sysctl --system


[root@ka1 ~]# vim /etc/keepalived/keepalived.confvirtual_server 192.168.86.100 80 {delay_loop 6lb_algo wrrlb_kind DR.#persistence_timeout 50protocol TCPreal_server 192.168.86.110 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

    real_server 192.168.86.110 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
###############################################################real_server 192.168.86.120 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
}

[root@ka2 ~]# vim /etc/keepalived/keepalived.confvirtual_server 192.168.86.100 80{delay_loop 6lb_algo wrrlb_kind DR#persistence_timeout 50protocol TCPreal_server 192.168.86.110 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}
##################################################################real_server 192.168.86.120 80 {weight 1SSL_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 2delay_before_retry 2}}}


[root@ka2 ~]# curl 172.25.254.110
172.25.254.110[root@ka2 ~]# systemctl restart keepalived.service

实现其他应用的高可用性 VRRP Script(keepalived+haproxy)

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

[root@ka1 ~]# vim /etc/keepalived/test.sh
#! /bin/bash
[ ! -f /mnt/lee ][root@ka1 ~]# sh /etc/keepalived/test.sh[root@ka1 ~]# echo $?
​0[root@ka1 ~]# touch /mnt/lee[root@ka1 ~]# chmod +x /etc/keepalived/test.sh[root@ka1 ~]# sh /etc/keepalived/test.sh

[root@ka1 ~]# vim /etc/keepalived/keepalived.confvrrp_script check_file {script "/etc/keepalived/test.sh"interval 1weight -30fall 2rise 2timeout 2
}...track_script {check_file}...

[root@ka1 ~]# systemctl restart keepalived.service[root@ka1 ~]# ls /mnt/lee/mnt/lee

keepalived+haproxy实现高可用

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

两台主机都做

[root@ka1 ~]# vim /etc/sysctl.conf# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.#For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_nonlocal_bind=1[root@ka1 ~]# sysctl -pnet.ipv4.ip_nonlocal_bind = 1[root@ka1 ~]# systemctl enable --now haproxy.service

listen webclusterbind 192.168.86.100:80mode httpbalance roundrobinserver web1 192.168.86.110:80 check inter 3 fall 2 rise 5server web2 192.168.86.120:80 check inter 3 fall 2 rise 5

[root@ka1 ~]# vim /etc/sysctl.d/arp.confnet.ipv4.conf.all.arp_ignore=0net.ipv4.conf.all.arp_announce=0net.ipv4.conf.lo.arp_ignore=0net.ipv4.conf.lo.arp_announce=0

检测HAproxy状态

[root@ka2 ~]# killall -0 haproxy
[root@ka2 ~]# echo $?
0
[root@ka2 ~]# 

检测脚本

[root@ka1 ~]# vim /etc/keepalived/test.sh[root@ka1 ~]# cat /etc/keepalived/test.sh
#!/bin/bash
killall -0 haproxy[root@ka1 ~]# 

相关文章:

打造高可用集群的基石:深度解析Keepalived实践与优化

高可用集群 集群类型 集群类型主要分为负载均衡集群&#xff08;LB&#xff09;、高可用集群&#xff08;HA&#xff09;和高性能计算集群&#xff08;HPC&#xff09;三大类。每种集群类型都有其特定的应用场景和优势。 1. 负载均衡集群&#xff08;LB&#xff09; 负载均衡集…...

Web大学生网页作业成品——环保主题介绍网页网站设计与实现(HTML+CSS)(5个页面)

&#x1f389;&#x1f389;&#x1f389; 常见网页设计作业题材有**汽车、环保、明星、文化、国家、抗疫、景点、人物、体育、植物、公益、图书、节日、游戏、商城、旅游、家乡、学校、电影、动漫、非遗、动物、个人、企业、美食、婚纱、其他**等网页设计题目, 可满足大学生网…...

Qt登录窗口设计

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> //图标类 #include <QPushButton> #include <QLineEdit> //行编辑 #include <QLabel> #include <QTextEdit> #include <QMovie>class Widge…...

探索数据矿藏:我的AI大模型与数据挖掘实战经验分享

&#x1f680; 探索数据矿藏&#xff1a;我的AI大模型与数据挖掘实战经验分享 &#x1f496; 前言&#xff1a;数据的金矿&#xff0c;AI的翅膀 在人工智能的浪潮中&#xff0c;我有幸作为项目负责人&#xff0c;带领团队深入挖掘数据的潜力&#xff0c;利用AI大模型的力量&am…...

linux C语言strcat函数及相关函数

讯飞星火 strcat函数是C语言中的一个字符串处理函数,用于将一个字符串追加到另一个字符串的末尾。它的原型如下: char *strcat(char *dest, const char *src);参数说明: dest:目标字符串,即要将src字符串追加到这个字符串的末尾。src:源字符串,即要追加到dest字符串末…...

使用 sort 进行文本文件处理

sort 使用经验笔记 一、简介 sort 是一个命令行工具&#xff0c;用于对文本文件中的行进行排序。它广泛应用于 Unix/Linux 系统中&#xff0c;可以用来对文件的内容进行简单的排序操作&#xff0c;也可以与其他命令结合使用来完成更复杂的任务。 二、基本用法 排序文件: sor…...

HarmonyOS笔记4:从云数据库获取数据

移动应用获取数据的方式主要有&#xff1a; 1.从网络中获取数据接口API。 2.从华为云数据库获取云数据库的资源。 3.从移动终端直接获取本地的数据 在HarmonyOS笔记3中已经完成了方式一从网络中获取数据接口API的方式。在本篇笔记中&#xff0c;将讨论从云数据库中获取数据。 因…...

QT5生成独立运行的exe文件

目录 1 生成独立运行的exe文件1.1 设置工程Release版本可执行文件存储路径1.2 将工程编译成Release版本 2 使用QT5自带的windeployqt拷贝软件运行依赖项3 将程序打包成一个独立的可执行软件exe4 解决QT5 This application failed to start because no Qt platform plugin could…...

LabVIEW光纤水听器闭环系统

开发了一种利用LabVIEW软件开发的干涉型光纤水听器闭环工作点控制系统。该系统通过调节光源频率和非平衡干涉仪的光程差&#xff0c;实现了工作点的精确控制&#xff0c;从而提高系统的稳定性和检测精度&#xff0c;避免了使用压电陶瓷&#xff0c;使操作更加简便。 项目背景 …...

Shell——流程控制语句(if、case、for、while等)

在 Shell 编程中&#xff0c;流程控制语句用于控制脚本的执行顺序和逻辑。这些语句包括 if、case、for、while 等&#xff0c;它们的使用可以使脚本实现更复杂的逻辑。以下是它们的详细说明和语法结构&#xff1a; 1. if 语句 if 语句用于条件判断&#xff0c;执行符合条件的…...

【redis的大key问题】

在使用 Redis 的过程中&#xff0c;如果未能及时发现并处理 Big keys&#xff08;下文称为“大Key”&#xff09;&#xff0c;可能会导致服务性能下降、用户体验变差&#xff0c;甚至引发大面积故障。 本文将介绍大Key产生的原因、其可能引发的问题及如何快速找出大Key并将其优…...

HighPoint SSD7749M2:128TB NVMe 存储卡实现28 GB/s高速传输

HighPoint Technologies推出了一款全新的SSD7749M2 RAID卡&#xff0c;能够在标准的桌面工作站中安装多达16个M.2 SSD&#xff0c;实现高达128TB的闪存存储。该卡通过PCIe Gen4 x16接口提供高达28 GB/s的顺序读写性能。这些令人瞩目的性能规格伴随着高昂的价格标签。 #### 技术…...

ARM 裸机与 Linux 驱动对比及 Linux 内核入门

目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 ​编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…...

0101DNS TCP fallback on UDP query timeout disabled-redission-中间件

文章目录 1.问题描述2.临时解决方案 结语 1.问题描述 Springcloud 项目&#xff0c;微服务模块使用redission&#xff0c;启动报错 DNS TCP fallback on UDP query timeout disabled. Upgrade Netty to 4.1.105 or higher.相关软件版本如下 软件版本描述springboot2.7.18spr…...

位运算

x1010 原码&#xff1a;000...1010 &#xff08;一共32位&#xff09; 反码&#xff1a;111...0101 &#xff08;~x&#xff09; 补码&#xff1a;111...0110 &#xff08;反码1&#xff09;&#xff08;-x&#xff09; 1、n 的二进制表示中第 k 位是几 #include<iost…...

MemFire Cloud是否真的可以取代后端

近年来&#xff0c;随着前端技术的迅速发展&#xff0c;前端工程师们越来越多地开始思考一个问题&#xff1a;“我还能不能不依赖后端&#xff1f;” 这种想法并非空穴来风&#xff0c;尤其是随着像MemFire Cloud这样的工具出现&#xff0c;它不仅能让开发者在没有后端的情况下…...

数据结构(邓俊辉)学习笔记】优先级队列 06——完全二叉堆:批量建堆

文章目录 1. 自上而下的上滤&#xff1a;算法2. 自上而下的上滤&#xff1a;效率3. 自下而上的下滤&#xff1a;算法4. 自下而上的下滤&#xff1a;实例5. 自下而上的下滤&#xff1a;效率 1. 自上而下的上滤&#xff1a;算法 在介绍过完全二叉堆标准的静态和动态操作接口之后…...

Java | Leetcode Java题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; class Solution {public void reverseString(char[] s) {int n s.length;for (int left 0, right n - 1; left < right; left, --right) {char tmp s[left];s[left] s[right];s[right] tmp;}} }...

定制开发AI智能名片O2O商城小程序:基于限量策略与个性化追求的营销创新

摘要:随着科技的飞速发展和消费者需求的日益多元化&#xff0c;传统商业模式正经历着前所未有的变革。在数字化转型的大潮中&#xff0c;定制开发AI智能名片O2O商城小程序作为一种新兴的商业模式&#xff0c;凭借其独特的个性化定制能力、高效的线上线下融合&#xff08;O2O&am…...

Spring MVC Controller返回json日期格式配置失效的解决办法

如题&#xff0c;Spring MVC 4.3.0版本&#xff0c;配置jackson读写json。Controller层方法返回值对象包含java.util.Date类型的属性&#xff0c;并且在applicationContext.xml中配置了jackson的日期格式&#xff1a; <mvc:annotation-driven><mvc:message-converters…...

3.Default Constructor的构造操作

目录 1. 问题引入 2. 4种implicitly声明的default constructor 1. 问题引入 “default constructors......在需要的时候被编译产生出来”。关键词是“在需要的时候”&#xff0c;被谁需要&#xff0c;做什么事情&#xff1f;看看下面的代码&#xff0c;然后梳理下思路。 cl…...

CSS的:current伪类:精准定位当前活动元素

CSS&#xff08;层叠样式表&#xff09;是控制网页样式的核心语言。随着CSS4的提出&#xff0c;一系列新的选择器被引入&#xff0c;其中:current伪类便是这些新特性之一。:current伪类允许开发者选择当前处于活动状态的元素&#xff0c;这在创建动态和交互性网页时非常有用。本…...

搭建个人网站

一 个人搭建网站需要进行的操作 详细步骤&#xff1a; 1 网站目标&#xff1a;搭建在线查看法拍房拍卖价格的预测模型&#xff0c;输出预测结果 2 实际功能&#xff1a;在线爬取 阿里法拍网站的信息 3 根据实时模型建模预测法拍价格和成交概率 要搭建一个能够在线查看法拍房拍卖…...

机器学习课程学习周报八

机器学习课程学习周报八 文章目录 机器学习课程学习周报八摘要Abstract一、机器学习部分1.1 self-attention的计算量1.2 人类理解代替自注意力计算1.2.1 Local Attention/Truncated Attention1.2.2 Stride Attention1.2.3 Global Attention1.2.4 聚类Query和Key 1.3 自动选择自…...

福泰轴承股份有限公司进销存系统pf

TOC springboot413福泰轴承股份有限公司进销存系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#…...

【k8s从节点报错】error: You must be logged in to the server (Unauthorized)

k8s主节点可以获取nodes节点信息&#xff0c;但是从节点无法获取&#xff0c;且报错“error: You must be logged in to the server (Unauthorized)” 排查思路&#xff1a; 当时证书过期了&#xff0c;只处理的主节点的证书过期&#xff0c;没有处理从节点的 kubeadm alpha …...

风清扬/基于Java语言的光伏监控系统+光伏发电预测+光伏项目+光伏运维+光伏储能项目

基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 介绍 基于Java语言的光伏监控系统光伏发电系统光伏软件系统光伏监控系统源码光伏发电系统源码 基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 安装教程 参与贡献 Fork 本仓库新…...

Datawhale X 魔搭 AI夏令营第四期 魔搭-AIGC方向全过程笔记

task1: 传送门 task2&#xff1a; 传送门 task3: 传送门 目录 Task1 赛题内容 可图Kolors-LoRA风格故事挑战赛 baseline要点讲解(请配合Datawhale速通教程食用) Step1 设置算例及比赛账号的报名和授权 Step2 进行赛事报名并创建PAI实例 Step3 执行baseline Step4…...

数组---怎么样定义和引用数组

一怎么定义数组 例 int a[10]; //定义了一个一维数组&#xff0c;数组名为a&#xff0c;此数组包含10个整型元素 所以我们了解到数组的基本定义为 类型符 数组名 [常量表达式] 定义数组可以包括常量和符号常量如 int [ 35 ];但是不能利用变量定义如 int n&#xff1b; …...

Nginx—Rewrite

目录 一、Nginx—Rewrite概述 1、常用的Nginx正则表达式 2、Rewrite功能 3、Rewrite跳转实现 4、Rewrite执行顺序和语法格式 二、location概述 1、location分类 2、location 常用的匹配规则 3、location 优先级 案例一&#xff1a; 案例二&#xff1a; 案例三&…...