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

【kubernetes】k8s高可用集群搭建(三主三从)

目录

【kubernetes】k8s高可用集群搭建(三主三从)

一、服务器设置

二、环境配置

1、关闭防火墙

2、关闭selinux

3、关闭swap

4、修改主机名(根据主机角色不同,做相应修改)

5、主机名映射

6、将桥接的IPv4流量传递到iptables的链

7、时间同步

8、master之间进行免密登录设置

三、安装部署

(一)配置部署keepalived服务

1、安装Keepalived(所有master主机)

2、k8s-master1/2/3节点配置

3、启动和检查

4、查看启动状态

5、启动完成后在master1查看网络信息

(二)配置部署haproxy服务

1、所有master主机安装haproxy

2、修改配置文件

3、启动和检查

4、查看启动状态

5、检查端口

(三)配置部署Docker服务(所有主机)

(四)部署kubelet kubeadm kubectl工具

1、使用 YUM 方式安装Kubernetes时,推荐使用阿里的yum。

2、安装kubelet kubeadm kubectl

(五)部署Kubernetes Master

1、创建kubeadm-config.yaml文件

2、查看所需镜像信息

3、下载k8s所需的镜像(所有master主机)

4、使用kubeadm命令初始化k8s

5、根据初始化的结果操作

6、查看集群状态

1)修改kube-controller-manager.yaml文件

2)修改kube-scheduler.yaml文件

3)查看集群状态

4)查看pod信息

5)查看节点信息

(六)安装集群网络

在k8s-master1节点执行

没有变成ready:(原因是网络插件缺失)

上传插件:

再次查看节点信息:

(七)添加master节点

1、在k8s-master2和k8s-master3节点创建文件夹

2、在k8s-master1节点执行

3、将其他master节点加入集群

查看节点信息

(八)加入Kubernetes Node

查看节点信息

查看pod信息

(九)测试Kubernetes集群

1、所有node主机下载测试镜像

2、在Kubernetes集群中创建一个pod,验证是否正常运行。

3、创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。

4、创建Service资源清单

5、访问测试

四、拓展试验

(一)宕机master1,验证服务

(二)宕机master1/2,验证服务

(三)两台宕机主机恢复,验证服务

五、实验总结


【kubernetes】k8s高可用集群搭建(三主三从)

一、服务器设置

准备6台虚拟机,3台master节点,3台node节点,保证master节点数为>=3的奇数。

网络:所有机器网络互通、可以访问外网

硬件:2核CPU+、2G内存+、硬盘20G+

IP地址

角色

主机名

需要用到的服务

192.168.100.131

master

k8s-master1

keepalived

haproxy

docker

kubectl

kubeadm

kubelet

192.168.100.132

master

k8s-master2

192.168.100.133

master

k8s-master3

192.168.100.134

node

k8s-node1

docker

kubectl

kubeadm

kubelet

192.168.100.135

node

k8s-node2

192.168.100.136

node

k8s-node3

192.168.100.154

VIP

master.k8s.io

代理master1/2/3

二、环境配置

1、关闭防火墙

[root@localhost ~]# systemctl stop firewalld

[root@localhost ~]# systemctl disable firewalld

2、关闭selinux

[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config

[root@localhost ~]# setenforce 0

3、关闭swap

[root@localhost ~]# swapoff -a

[root@localhost ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

 

4、修改主机名(根据主机角色不同,做相应修改)

hostname k8s-node1  建议做永久主机名配置  hostnamectl  set-hostname k8s-master1

bash

5、主机名映射

[root@k8s-master1 ~]# cat >> /etc/hosts << EOF192.168.100.131 master1.k8s.io k8s-master1192.168.100.132 master2.k8s.io k8s-master2192.168.100.133 master3.k8s.io k8s-master3192.168.100.134 node1.k8s.io k8s-node1192.168.100.135 node2.k8s.io k8s-node2192.168.100.136 node3.k8s.io k8s-node3192.168.100.154 master.k8s.io k8s-vipEOF

 

6、将桥接的IPv4流量传递到iptables的链

[root@k8s-master1 ~]# cat << EOF >> /etc/sysctl.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF

[root@k8s-master1 ~]# modprobe br_netfilter

[root@k8s-master1 ~]# sysctl -p

 

7、时间同步

[root@k8s-master1 ~]# yum install ntpdate -y

[root@k8s-master1 ~]# ntpdate time.windows.com

8、master之间进行免密登录设置

[root@k8s-master1 ~]# ssh-keygen

[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.131

[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.132

[root@k8s-master1 ~]# ssh-cpoy-id 192.168.100.133

同理:

master2/3操作,互相之间免密登录

三、安装部署

(一)配置部署keepalived服务

1、安装Keepalived(所有master主机)

[root@k8s-master1 ~]# yum install -y keepalived

 

2、k8s-master1/2/3节点配置

[root@k8s-master1 ~]#

cat /etc/keepalived/keepalived.conf

 

k8s-master2节点配置

[root@k8s-master2 ~]#

cat  /etc/keepalived/keepalived.conf

 

k8s-master3节点配置

[root@k8s-master3 ~]#

cat  /etc/keepalived/keepalived.conf

 

3、启动和检查

所有master节点都要执行

[root@k8s-master1 ~]# systemctl start keepalived

[root@k8s-master1 ~]# systemctl enable keepalived

4、查看启动状态

[root@k8s-master1 ~]# systemctl status keepalived

 

5、启动完成后在master1查看网络信息

[root@k8s-master1 ~]# ip a s ens33

 

(二)配置部署haproxy服务

1、所有master主机安装haproxy

[root@k8s-master1 ~]# yum install -y haproxy

        每台master节点中的配置均相同,配置中声明了后端代理的每个master节点服务器,指定了haproxy的端口为16443,因此16443端口为集群的入口。

2、修改配置文件

[root@k8s-master1 ~]# cat  /etc/haproxy/haproxy.cfg

 

3、启动和检查

所有master节点都要执行

[root@k8s-master1 ~]# systemctl start haproxy

[root@k8s-master1 ~]# systemctl enable haproxy

4、查看启动状态

[root@k8s-master1 ~]# systemctl status haproxy

 

5、检查端口

[root@k8s-master1 ~]# netstat -lntup|grep haproxy

 

(三)配置部署Docker服务(所有主机)

        所有主机上分别部署 Docker 环境,因为 Kubernetes 对容器的编排需要 Docker 的支持。

[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。

[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

[root@k8s-master ~]# yum clean all && yum makecache fast

[root@k8s-master ~]# yum -y install docker-ce

[root@k8s-master ~]# systemctl start docker

[root@k8s-master ~]# systemctl enable docker

镜像加速器(所有主机配置)

[root@k8s-master ~]# cat /etc/docker/daemon.json

[root@k8s-master ~]# systemctl daemon-reload

[root@k8s-master ~]# systemctl restart docker

(四)部署kubelet kubeadm kubectl工具

1、使用 YUM 方式安装Kubernetes时,推荐使用阿里的yum。

所有主机配置

[root@k8s-master ~]#

cat  /etc/yum.repos.d/kubernetes.repo

[root@k8s-master ~]# ls /etc/yum.repos.d/

backup  Centos-7.repo  CentOS-Media.repo  CentOS-x86_64-kernel.repo  docker-ce.repo  kubernetes.repo

 

2、安装kubelet kubeadm kubectl

所有主机配置

[root@k8s-master ~]# yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0

[root@k8s-master ~]# systemctl enable kubelet

 

(五)部署Kubernetes Master

在具有vip的master上操作。此处的vip节点为k8s-master1。

1、创建kubeadm-config.yaml文件

[root@k8s-master1 ~]# cat  kubeadm-config.yaml

 

2、查看所需镜像信息

[root@k8s-master1 ~]# kubeadm config images list --config kubeadm-config.yaml

 

3、下载k8s所需的镜像(所有master主机)

[root@k8s-master1 ~]# kubeadm config images pull --config kubeadm-config.yaml

 

4、使用kubeadm命令初始化k8s

[root@k8s-master1 ~]# kubeadm init --config kubeadm-config.yaml

初始化中的错误:

 

执行以下命令后重新执行初始化命令

[root@k8s-master1 ~]# echo "1" >  /proc/sys/net/ipv4/ip_forward

[root@k8s-master1 ~]# kubeadm init --config kubeadm-config.yaml

 

5、根据初始化的结果操作

[root@k8s-master1 ~]# mkdir -p $HOME/.kube

[root@k8s-master1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

6、查看集群状态

[root@k8s-master1 manifests]# kubectl get cs

                                     

        注意:出现以上错误情况,是因为/etc/kubernetes/manifests/下的kube-controller-manager.yaml和kube-scheduler.yaml设置的默认端口为0导致的,解决方式是注释掉对应的port即可

1)修改kube-controller-manager.yaml文件

 

2)修改kube-scheduler.yaml文件

 

3)查看集群状态

[root@k8s-master1 ~]# kubectl get cs

 

4)查看pod信息

[root@k8s-master1 ~]# kubectl get pods -n kube-system

 

5)查看节点信息

[root@k8s-master1 ~]# kubectl get nodes

 

(六)安装集群网络

在k8s-master1节点执行

[root@k8s-master1 ~]# docker load < flannel_v0.12.0-amd64.tar

 

没有变成ready:(原因是网络插件缺失)

 

上传插件:

[root@k8s-master1 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz

[root@k8s-master1 ~]# cp flannel /opt/cni/bin/

[root@k8s-master1 ~]# kubectl delete -f kube-flannel.yml   删除之前的apply操作

 

再次查看节点信息:

[root@k8s-master1 ~]# kubectl apply -f kube-flannel.yml

[root@k8s-master1 ~]# kubectl get nodes

 

(七)添加master节点

1、在k8s-master2和k8s-master3节点创建文件夹

[root@k8s-master2 ~]# mkdir -p /etc/kubernetes/pki/etcd

[root@k8s-master3 ~]# mkdir -p /etc/kubernetes/pki/etcd

2、在k8s-master1节点执行

从k8s-master1复制秘钥和相关文件到k8s-master2和k8s-master3

[root@k8s-master1 ~]# scp /etc/kubernetes/admin.conf root@192.168.100.132:/etc/kubernetes 

[root@k8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@192.168.100.132:/etc/kubernetes/pki

[root@k8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root@192.168.100.132:/etc/kubernetes/pki/etcd

[root@k8s-master1 ~]# scp /etc/kubernetes/admin.conf root@192.168.100.133:/etc/kubernetes

[root@k8s-master1 ~]# scp /etc/kubernetes/pki/{ca.*,sa.*,front-proxy-ca.*} root@192.168.100.133:/etc/kubernetes/pki

[root@k8s-master1 ~]# scp /etc/kubernetes/pki/etcd/ca.* root@192.168.100.133:/etc/kubernetes/pki/etcd

3、将其他master节点加入集群

注意:kubeadm init生成的token有效期只有1天,生成不过期token

[root@k8s-master1 manifests]# kubeadm token create --ttl 0 --print-join-command

[root@k8s-master1 manifests]# kubeadm token list

k8s-master2和k8s-master3都需要加入

[root@k8s-master2 ~]# kubeadm join master.k8s.io:6443 --token pj2haa.zf72tyum7uiyeamx     --discovery-token-ca-cert-hash sha256:aaec80f6efa10581c329034bef7e2c2f2f1cb2ef4228f8ddcfcbbb44df55aae3  --control-plane

[root@k8s-master2 ~]# mkdir -p $HOME/.kube

[root@k8s-master2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

[root@k8s-master2 ~]# docker load < flannel_v0.12.0-amd64.tar

[root@k8s-master2 ~]# tar xf cni-plugins-linux-amd64-v0.8.6.tgz

[root@k8s-master2 ~]# cp flannel /opt/cni/bin/

查看节点信息

[root@k8s-master1 ~]# kubectl get nodes

[root@k8s-master1 manifests]# kubectl get pods --all-namespaces

(八)加入Kubernetes Node

直接在node节点服务器上执行k8s-master1初始化成功后的消息即可:

[root@k8s-node1 ~]# kubeadm join master.k8s.io:6443 --token o3j9wj.58io4u28r6q8o9lj     --discovery-token-ca-cert-hash sha256:6ad29ff932b12680844e140938eaeaaca120d6020c273b6b56d69d256fbc44b0

 

[root@k8s-node1 ~]# docker load < flannel_v0.12.0-amd64.tar

 

查看节点信息

[root@k8s-master1 ~]# kubectl get nodes

 

查看pod信息

[root@k8s-master1 ~]# kubectl get pods -n kube-system

(九)测试Kubernetes集群

1、所有node主机下载测试镜像

[root@k8s-node1 ~]# docker pull  nginx:1.19.0

 

2、在Kubernetes集群中创建一个pod,验证是否正常运行。

[root@k8s-master1 ~]# mkdir demo

[root@k8s-master1 ~]# cd demo

[root@k8s-master1 demo]# vim nginx-deployment.yaml

 

3、创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。

通过 get pods 可以查看到 Pod 容器资源已经自动创建完成。

[root@k8s-master1 demo]# kubectl create -f nginx-deployment.yaml

[root@k8s-master1 demo]# kubectl get pods

[root@k8s-master1 ~]# kubectl get pods -o wide

 

4、创建Service资源清单

        在创建的 nginx-service 资源清单中,定义名称为 nginx-service 的 Service、标签选择器为 app: nginx、type 为 NodePort 指明外部流量可以访问内部容器。在 ports 中定义暴露的端口库号列表,对外暴露访问的端口是 80,容器内部的端口也是 80。

[root@k8s-master1 demo]# vim nginx-service.yaml

[root@k8s-master1 demo]# kubectl create -f nginx-service.yaml

[root@k8s-master1 demo]# kubectl get svc

 

5、访问测试

通过浏览器访问nginx:http://master.k8s.io:31350 域名或者VIP地址

[root@k8s-master1 demo]# elinks --dump http://master.k8s.io:31350

 

浏览器测试:192.168.100.154:31350

 

四、拓展试验

(一)宕机master1,验证服务

挂起k8s-master1节点,刷新页面还是能访问nginx,说明高可用集群部署成功。

 

 

检查会发现VIP已经转移到k8s-master2节点上

[root@k8s-master2 ~]# ip a s ens33

 

验证操作master

[root@k8s-master2 ]#kubectl get nodes

 

至此Kubernetes企业级高可用环境完美实现。

(二)宕机master1/2,验证服务

以此类推,停掉master2的服务,vip跳转至master3,服务仍保持

 

 

检查会发现VIP已经转移到k8s-master3节点上

[root@k8s-master3 ~]# ip a s ens33

 

验证操作master

[root@k8s-master3 ]#kubectl get nodes

(三)两台宕机主机恢复,验证服务

Master1:

 

Master2:

 

Master3:

 

访问服务:

 

 

五、实验总结

        1、集群中只要有一个master节点正常运行就可以正常对外提供业务服务。

        2、如果需要在master节点使用kubectl相关的命令,必须保证至少有2个master节点正常运行才可以使用,不然会有 Unable to connect to the server: net/http: TLS handshake timeout 这样的错误。

        3、当一台可以查看nodes节点的master宕机之后,其余两台随机一台获取vip,然后可以观察nodes节点,但是当超过两台master宕机之后,集群需重建才可以观察nodes节点,但服务未停止;当两台宕机主机回复之后,服务停止,node节点不可观察,集群停止,需重建!

        4、Node节点故障时pod自动转移:当pod所在的Node节点宕机后,根据 controller-manager的–pod-eviction-timeout 配置,默认是5分钟,5分钟后k8s会把pod状态设置为unkown, 然后在其它节点启动pod。当故障节点恢复后,k8s会删除故障节点上面的unkown pod。如果你想立即强制迁移,可以用 kubectl drain nodename

        5、为了保证集群的高可用性,建议master节点和node节点至少分别部署3台及以上,且master节点应该部署基数个实例(3、5、7、9)。

相关文章:

【kubernetes】k8s高可用集群搭建(三主三从)

目录 【kubernetes】k8s高可用集群搭建&#xff08;三主三从&#xff09; 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名&#xff08;根据主机角色不同&#xff0c;做相应修改&#xff09; 5、主机名映射 6、将桥接的IPv4流量…...

凸优化基础学习——凸集

凸优化基础学习——凸集 文章内容全部来自对Stephen Boyd and Lieven vandenberghe的Convex Optimization的总结归纳。 电子书资源&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1dP5zI6h3BEyGRzSaJHSodg?pwd0000 提取码&#xff1a;0000 基本概念 仿射集合 **…...

oracle 19c环境常见问题汇总

1、rman备份时会消耗这么多临时表空间 参考MOS&#xff1a; RMAN-08132: Warning: Cannot Update Recovery Area ORA-01652: unable to extend temp segment by 64 in tablespace TEMP (Doc ID 2658437.1) Known RMAN Performance Problems (Doc ID 247611.1) 处理办法&…...

django实现悲观锁乐观锁

前期准备 # 线上卖图书-图书表 图书名字&#xff0c;图书价格&#xff0c;库存字段-订单表&#xff1a; 订单id&#xff0c;订单名字# 表准备class Book(models.Model):name models.CharField(max_length32)price models.IntegerField() #count models.SmallIntegerField…...

vector【2】模拟实现(超详解哦)

vector 引言&#xff08;实现概述&#xff09;接口实现详解默认成员函数构造函数析构函数赋值重载 迭代器容量size与capacityreserveresizeempty 元素访问数据修改inserterasepush_back与pop_backswap 模拟实现源码概览总结 引言&#xff08;实现概述&#xff09; 在前面&…...

金融助贷公司怎么获客——大数据获客

2023年已过去大半&#xff0c;整个贷款领域遭遇的现象仍然是拓客难、拓客贵、顾客精确度不高难题。从业者工作压力与日俱增&#xff0c;每日遭遇各种各样考评&#xff0c;因此大家并不是在开发客户便是在开发客户的路上。贷款市场销售艰难变成一个问题&#xff0c;很多贷款营销…...

Java进阶-Oracle(二十一)(2)

&#x1f33b;&#x1f33b; 目录 一、Oracle 数据库的操作(DDL DML DQL DCL TPL)1.1 标识符、关键字、函数等1.1.1 数值类型&#xff1a;1.1.2 字符串类型&#xff1a;1.1.3 日期类型1.1.4 大的数据类型--适合保存更多的数据 1.2 运算符1.3 函数---预定义函数、自定义函数&…...

SpringCloud实用篇4——MQ RabbitMQ SpringAMQP

目录 1 初识MQ1.1 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 技术对比 2.快速入门2.1 安装RabbitMQ2.1.1 单机部署2.1.2集群部署 2.2 RabbitMQ消息模型2.3.导入Demo工程2.4 入门案例2.4.1 publisher实现2.4.2 consumer实现 3 SpringAMQP3.1 Basic Queue 简单队列模型3.1…...

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

【BASH】回顾与知识点梳理 二十二 二十二. Linux 账号管理22.1 Linux 的账号与群组使用者标识符&#xff1a; UID 与 GID使用者账号/etc/passwd 文件结构/etc/shadow 文件结构 关于群组&#xff1a; 有效与初始群组、groups, newgrp/etc/group 文件结构有效群组(effective grou…...

shell脚本之正则表达式

目录 一.常见的管道命令1.1sort命令1.2uniq命令1.3tr命令1.4cut命令1.5实例1.5.1统计当前主机连接状态1.5.2统计当前主机数 二.正则表达式2.1正则表达式的定义2.2常见元字符&#xff08;支持的工具&#xff1a;find&#xff0c;grep&#xff0c;egrep&#xff0c;sed和awk&…...

将SM2根证书预置到chromium中

最近花了很多精力在做chromium的GmSSL适配&#xff0c;协议和算法都已经完成&#xff0c;这篇文章是关于将SM2根证书预置到chromium中 我的开发测试环境是macos12.4&#xff0c;从chromium的代码和文档中得知证书获取和校验都是通过操作系统以及native api接口完成&#xff0c…...

linux安装mysql-8.0.33正确方式及常见问题

目录 获取mysql下载地址链接 解压安装包 复制文件到安装目录 添加用户和用户属组修改权限 创建存储数据的文件夹/usr/local/mysql 初始化安装 修改配置文件 创建日志文件并赋予对应权限 启动成功​编辑 创建软链接 之前安装过mysql&#xff0c;时间比较长忘记安装步骤了今天…...

Vim的插件管理器之Vundle

1、安装Vundle插件管理器 Vim可以安装插件&#xff0c;但是需要手动安装比较麻烦&#xff0c;Vim本身没有提供插件管理器&#xff0c;所以会有很多的第三方的插件管理器&#xff0c;有一个vim的插件叫做 “vim-easymotion”&#xff0c;在它的github的安装说明里有列出对于不同…...

机器学习丨1. 机器学习概述

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…...

清除pip安装库时的缓存

目录 1、命令清除缓存 2、路径手动清除 在使用pip安装Python库时&#xff0c;如果之前已经下载过该库&#xff0c;pip会默认使用缓存来安装库&#xff0c;而不是重新从网络上下载。缓存文件通常存储在用户目录下的缓存文件夹中&#xff0c;具体位置因操作系统和Python版本而异…...

gitee上传一个本地项目到一个空仓库

gitee上传一个本地项目到一个空仓库 引入 比如&#xff0c;你现在本地下载了一个半成品的框架&#xff0c;现在想要把这个本地项目放到gitee的仓库上&#xff0c;这时就需要我们来做到把这个本地项目上传到gitee上了。 具体步骤 1. 登录码云 地址&#xff1a;https://gite…...

力扣:63. 不同路径 II(Python3)

题目&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从…...

【C语言】每日一题(多数元素)

多数元素&#xff0c;链接奉上 方法 1.摩尔投票2.合理但错误的方法2.1暴力循环2.2排序求出中间元素中间元素 1.摩尔投票 先来简单的介绍摩尔投票&#xff1a; 摩尔投票是一种用来解决绝对众数问题的算法。 什么是绝对众数呢&#xff1f; 在一个集合中&#xff0c;如果一个元素…...

后端 .net7 Minimal API 限流中间件(微信小程序无师自通十)

我的微信小程序使用.net7 Minimal API 作为后端&#xff0c;当服务器摆上公网后&#xff0c;可以观察到很多的攻击行为和暴力访问。所以&#xff0c;我需要使用微软的限流中间件部署相应的功能在服务器上 关键字&#xff1a; AddFixedWindowLimiter using Microsoft.AspNetCo…...

背上沉重的书包准备面试之react篇

目录 react特性&#xff1f; react生命周期&#xff1f; state和props区别 react中setState执行机制&#xff1f; 在react类组件形式中&#xff0c;setState第二个参数的作用&#xff1f; react事件机制&#xff1f; react事件绑定方式有哪些&#xff1f; react组件之间…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...