k8s 1.28.2 集群部署 MinIO 分布式集群

news2024/10/11 16:51:13

文章目录

    • @[toc]
    • MinIO 介绍
      • MinIO 生产硬件要求
      • MinIO 存储要求
      • MinIO 内存要求
      • MinIO 网络要求
      • MinIO 部署架构
        • 分布式 MinIO
        • 复制的 MinIO
    • 部署 MinIO
      • 创建目录
      • 节点打标签
      • 创建 namespace
      • 创建 pv
      • 创建 MinIO
      • 配置 ingress
      • 问题记录
        • 通过代理服务器访问 MinIO 的 `Object Browser` 界面一直显示 loading

MinIO 介绍

  • MinIO 官网
  • MinIO 官方 linux 的部署文档
  • 以下内容从官方翻译
  • MinIO 是一款软件定义的高性能分布式对象存储服务器
  • 所有 MinIO 部署都实施纠删码后端
    • MinIO 有以下三种拓扑
      • SNSD 或者 StandaloneSingle-Node Single-Drive单节点驱动器
        • 除了底层存储卷实现的范围之外,它不会提供额外的可靠性或可用性。这些部署最适合本地测试和评估,或者没有可用性或性能要求的小型数据工作负载。
      • SNMD 或者 Standalone Multi-DriveSingle-Node Multi-Drive单节点多驱动器
        • 性能、规模和容量要求较低的工作负载
        • 驱动器级可靠性,具有可配置的容差,可丢失高达 1/2 的所有驱动器
      • MNMD 或者 DistributedMulti-Node Multi-Drive多节点多驱动器分布式
        • 提供企业级性能、可用性和可扩展性,是所有生产工作负载的推荐拓扑,该配置可容忍部署中最多丢失一半的节点或驱动器,同时继续提供读取操作
        • 多节点 / 驱动器级可靠性,可配置的容差,损失高达 1/2 所有节点 / 驱动器
        • AI/ML、分布式查询、分析和其他数据湖组件的主存储
        • 可针对 PB + 工作负载进行扩展 - 存储容量和性能
  • 站点复制(Site Replication
    • 站点复制扩展了存储桶复制的功能,包括在所有站点中都相同的 IAM、安全令牌、访问密钥和存储桶功能
    • 站点复制将多个 MinIO 部署链接在一起,并使存储桶、对象和 Identity and Access Management (IAM) 设置在所有连接的站点之间保持同步
    • 每个 MinIO 部署(“对等站点”)都会在其他对等站点之间同步以下更改:
      • 创建、修改和删除存储桶和对象
        • 存储桶和对象配置
        • Policies
        • mc tag set
        • Locks,锁定,包括保留和依法保留配置
        • 加密设置
    • 创建和删除 IAM 用户、组、策略以及到用户或组的策略映射(适用于 LDAP 用户或组)
    • 为可从本地 root 凭据验证的会话令牌创建安全令牌服务 (STS) 凭据
    • 创建和删除访问密钥(root 用户拥有的密钥除外)
    • 站点复制为所有复制站点上的所有新存储桶和现有存储桶启用存储桶版本控制
  • Not Replicate
    • 并非所有内容都可以跨站点复制
      • 存储桶通知
      • 生命周期管理 (ILM) 配置
      • 站点配置设置

MinIO 生产硬件要求

  • Production Hardware Recommendations
  • 以下清单遵循 MinIO 的生产部署推荐配置。提供的指南旨在作为基准,不能取代 MinIO SUBNET 性能诊断、架构审查和直接工程支持
  • 与任何分布式系统一样,MinIO 受益于为给定服务器池中的所有节点选择相同的配置。确保在池节点之间一致地选择硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)
  • 如果节点具有不同的硬件或软件配置,则部署可能会表现出不可预测的性能。受益于在低成本硬件上存储过时数据的工作负载应部署专用的 “暖” 或 “冷” MinIO 部署,并将数据转换到该层
硬件类型最低要求推荐配置
主机4个专用主机8+ 专用主机
每个主机的专用本地驱动器4个用于 MinIO 的驱动器每个 MinIO 服务器 8+ 个驱动器
网络基础设施25GbE 网络100GbE 网络
支持现代 SIMD 指令 (AVX-512) 的服务器级 CPU每台主机 8 个 CPU / 插槽或 vCPU每台主机 16+ CPU / 插槽或 vCPU
可用内存,以合理的缓冲区满足或超过每个服务器的使用量每台主机 32GB 可用内存每台主机 128GB+ 的可用内存
  • 以下方面对 MinIO 性能的影响最大,按重要性顺序列出
类型影响
网络基础设施吞吐量不足或受限会限制性能
存储控制器旧固件、吞吐量受限或硬件故障会限制性能并影响可靠性
存储 (驱动器)旧固件或硬件运行缓慢 / 老化 / 故障会限制性能并影响可靠性
  • 以上最低建议反映了 MinIO 在协助企业客户在各种 IT 基础设施上部署同时保持所需 SLA/SLO 的经验。
  • 虽然 MinIO 可能在低于建议的最低拓扑上运行,但任何潜在的成本节省都存在可靠性、性能或整体功能降低的风险

MinIO 存储要求

  • storage
  • 使用本地存储

    • 与网络存储(NAS、SAN、NFS)相比,直连存储 (DAS) 具有显著的性能和一致性优势。MinIO 强烈建议将闪存存储(NVMe、SSD)用于主数据或 “热” 数据
  • 使用 XFS 文件系统

    • MinIO 强烈建议配置 XFS 格式的文件系统进行存储。MinIO 使用 XFS 作为内部测试和验证套件的一部分,为所有规模的性能和行为提供额外的信心

      • 将驱动器格式化为 XFS,并将它们作为 JBOD 阵列呈现给 MinIO,没有 RAID 或其他池配置。使用任何其他类型的后备存储(SAN/NAS、ext4、RAID、LVM)通常会导致性能、可靠性、可预测性和一致性降低
    • 禁用 XFS 出错时重试

      • MinIO 强烈建议对以下错误类使用 max_retries 配置禁用 retry-on-error 行为

        • EIO :读取或写入时出错
        • ENOSPC :device no space left on device
        • default :所有其他错误
      • 默认的 max_retries 设置通常指示文件系统无限期地在出错时重试,而不是传播错误。MinIO 可以适当地处理 XFS 错误,因此 retry-on-error 行为最多会导致不必要的延迟或性能下降。

      • 下面是官方提供的脚本,遍历指定挂载路径上的所有驱动器,并将建议的错误类的 XFS max_retries 设置设置为 0 或 “fail immediately on error”。该脚本会忽略任何未挂载的驱动器,无论是手动挂载还是通过 /etc/fstab 挂载。修改 /mnt/drive 行以匹配用于 MinIO 驱动器的模式

        • 必须在所有 MinIO 节点上运行此脚本,并将脚本配置为在重新启动时重新运行,因为 Linux 操作系统通常不会保留这些更改

        • #!/bin/bash
          
          for i in $(df -h | grep /mnt/drive | awk '{ print $1 }'); do
                mountPath="$(df -h | grep $i | awk '{ print $6 }')"
                deviceName="$(basename $i)"
                echo "Modifying xfs max_retries and retry_timeout_seconds for drive $i mounted at $mountPath"
                echo 0 > /sys/fs/xfs/$deviceName/error/metadata/EIO/max_retries
                echo 0 > /sys/fs/xfs/$deviceName/error/metadata/ENOSPC/max_retries
                echo 0 > /sys/fs/xfs/$deviceName/error/metadata/default/max_retries
          done
          exit 0
          
  • 使用一致类型的驱动器

    • MinIO 不区分驱动器类型,并且不会从混合存储类型中受益。每个池必须使用相同的类型(NVMe、SSD)
    • 例如,部署一个仅包含 NVMe 驱动器的池。如果您将某些驱动器部署为 SSD 或 HDD,则 MinIO 会将这些驱动器视为与 NVMe 驱动器相同。这可能会导致性能问题,因为某些驱动器具有不同或更差的读 / 写特性,并且无法以与 NVMe 驱动器相同的速率响应
  • 使用一致大小的驱动器

    • MinIO 将每个驱动器使用的大小限制为部署中的最小驱动器
    • 例如,部署一个由相同数量的 NVMe 驱动器组成的池,这些驱动器具有相同的容量 7.68TiB。如果使用 3.84TiB 部署一个驱动器,则 MinIO 会将池中的所有驱动器视为具有较小的容量
  • 在重新启动后保留驱动器挂载和映射

    • Linux 操作系统,需要确保在 /etc/fstab 配置了驱动器挂载
      • MinIO 强烈建议使用基于标签(mkfs.xfs /dev/xxx -L MINIODRIVEx)的挂载规则,而不是基于 UUID 的规则。基于标签的规则允许将运行状况不佳或不工作的驱动器与具有匹配格式和标签的替代驱动器交换。
      • 基于 UUID 的规则需要编辑 /etc/fstab 文件以将映射替换为新的驱动器 UUID
    • 非 Linux 操作系统应使用等效的驱动器挂载管理工具
  • 独占驱动器

    • MinIO 需要为对象存储提供的驱动器或卷的独占访问权限。任何其他进程、软件、脚本或人员都不应直接对提供给 MinIO 的驱动器或卷或 MinIO 放置在其上的对象或文件执行任何操作
    • 除非 MinIO Engineering 指示,否则请勿使用脚本或工具直接修改、删除或移动所提供驱动器上的任何数据分片、奇偶校验分片或元数据文件,包括从一个驱动器或节点移动到另一个驱动器或节点。此类操作很可能导致超出 MinIO 修复能力的大范围损坏和数据丢失

MinIO 内存要求

  • Memory
  • 内存计算公式
  • 内存主要限制每个节点的并发同时连接数
    • 使用以下公式计算每个节点的最大并发请求数
      • totalRam / ramPerRequest
    • 使用以下公式计算每个请求使用的 RAM 量
      • ((2MiB + 128KiB) * driveCount) + (2 * 10MiB) + (2 * 1 MiB)
      • 10 MiB 是默认纠删块大小 v1
      • 1 MiB 是默认的纠删块大小 v2
  • RELEASE.2024-01-28T22-35-53Z 开始
    • 分布式设置中为每个节点预分配 2GiB 内存
    • 单节点设置预分配 1GiB 内存
  • 下表列出了基于主机驱动器数量和可用系统 RAM 的节点上的最大并发请求数
驱动器32GiB 内存64GiB 内存128GiB 内存256GiB 内存512GiB 内存
41,0742,1494,2978,59517,190
88401,6803,3616,72213,443
165851,1702.3414,6819,362
  • 下表提供了根据节点上的本地存储总量分配内存以供 MinIO 使用的一般准则
主机总存储建议的内存大小
最高 1Ti8GiB
最高 10Ti16GiB
最高 100Ti32GiB
最高 1PB64GiB
超过 1PB128GiB

MinIO 网络要求

  • Networking
  • MinIO 建议高速联网以支持附加存储(聚合驱动器、存储控制器和 PCIe 总线)的最大可能吞吐量。下表提供了给定物理或虚拟网络接口支持的最大存储吞吐量的一般准则。下表假定所有网络基础设施组件(如路由器、交换机和物理布线)也支持 NIC 带宽
NIC 带宽 (Gbps)估计的聚合存储吞吐量 (GBps)
10Gbps1.25GBps
25Gbps3.125GBps
50Gbps6.25GBps
100Gbps12.5GBps
  • 联网对 MinIO 性能的影响最大,其中每个主机的低带宽人为地限制了存储的潜在性能。以下网络吞吐量约束示例假定旋转驱动器具有~100MB/S 的持续 I/O
    • 1GbE 网络链接可支持高达 125MB/s 或 1 个旋转驱动器
    • 10GbE 网络可以支持大约 1.25GB/s,可能支持 10-12 个旋转驱动器
    • 25GbE 网络可以支持大约 3.125GB/s,可能支持~30 个旋转驱动器

MinIO 部署架构

  • 部署架构
  • 硬件清单
  • 安全检查表
  • 软件清单
  • 阈值和限制
  • 可用性和弹性
分布式 MinIO
  • Distributed MinIO Deployments
  • 生产 MinIO 部署由至少 4 个 MinIO 主机组成,这些主机具有同构存储和计算资源

在这里插入图片描述

MinIO 将这些资源聚合在一起作为一个池,并将自身呈现为单个对象存储服务

  • MinIO 会自动将池中的驱动器分组到纠删集中
    • 纠删集是 MinIO 可用性和弹性的基础组件
    • MinIO 在池中的节点之间对称地对纠删集进行条带化,以保持纠删集驱动器的均匀分布
    • 然后,MinIO 根据部署奇偶校验将对象划分为数据分片和奇偶校验分片,并将它们分布在纠删集中
    • 有关 MinIO 冗余和修复的更完整讨论,请参阅 纠删码对象修复
  • MinIO 使用基于对象名称和路径的确定性哈希算法来选择为给定对象设置的纠删集
    • 对于每个唯一的对象命名空间 BUCKET/PREFIX/[PREFIX/...]/OBJECT.EXTENSION,MinIO 始终为读 / 写操作选择相同的纠删集。MinIO 处理池和纠删集中的所有路由,使选择 / 读 / 写过程对应用程序完全透明
  • 每个 MinIO 服务器都有分布式拓扑的完整图,因此应用程序可以连接部署中的任何节点并针对部署中的任何节点执行直接操作
    • MinIO 响应节点会自动处理将内部请求路由到部署中的其他节点,并将最终响应返回给客户端
    • 应用程序通常不应管理这些连接,因为对部署拓扑的任何更改都需要应用程序更新。生产环境应部署负载均衡器或类似的网络控制平面组件来管理与 MinIO 部署的连接。例如,您可以部署 NGINX 负载均衡器,以对部署中的可用节点执行 “最少连接” 或 “循环” 负载均衡
  • 可以通过池扩展来扩展 MinIO 部署的可用存储
    • 每个池都由一组独立的节点组成,这些节点具有自己的纠删集。MinIO 必须查询每个池,以确定它将读取和写入操作定向到的正确擦除集,以便每个额外的池都会增加每次调用的节点间流量。然后,包含正确纠删集的池将响应该操作,对应用程序保持完全透明
    • 如果您通过池扩展修改 MinIO 拓扑,则可以通过修改负载均衡器以包含新池的节点来更新您的应用程序。应用程序可以继续使用 MinIO 部署的负载均衡器地址,而无需进行任何更新或修改。这可确保在所有池中均匀分配请求,同时应用程序继续使用单个负载均衡器 URL 进行 MinIO 操作
复制的 MinIO
  • Replicated MinIO Deployments
  • MinIO 对等站点的站点复制,可以在不同的机架、数据中心或地理区域中部署对等站点,以此来实现 BC/DR (业务连续性与灾难恢复:Business Continuity and Disaster Recovery)或提升读 / 写性能等功能
  • 复制性能主要取决于每个对等站点之间的网络延迟
    • 对于地理位置分散的对等站点,站点之间的高延迟可能会导致严重的复制滞后。这可能会与接近或等于部署整体性能容量的工作负载复合,因为复制过程本身需要足够的可用 I/O 来同步对象
  • 部署支持 Site-to-Site 故障转移协议的 Global Load Balancer 或类似网络设备对于多站点部署的功能至关重要
    • 负载均衡器应支持运行状况探测 / 检查设置,以检测一个站点的故障并自动将应用程序重定向到任何剩余的运行状况良好的对等体
    • 负载均衡器应满足与单站点部署相同的连接平衡和标头保留要求。MinIO 复制通过对要复制的对象进行排队来处理暂时性故障

部署 MinIO

我这里是自己学习使用的,部署的是 4 节点的 MinIO 分布式集群

创建目录

MinIO 运行的节点都需要创建目录

mkdir -p /approot/k8s_data/minio

节点打标签

MinIO 运行的节点都需要打标签,以自己的节点为准

kubectl label node 192.168.22.122 minio=true
kubectl label node 192.168.22.123 minio=true
kubectl label node 192.168.22.124 minio=true
kubectl label node 192.168.22.125 minio=true

创建 namespace

kubectl create ns storage

创建 pv

  • pv 采用 hostPath 的方式,并且 pv 绑定到不同的节点,我这边是 4 节点的 MinIO 集群,要创建 4 个 pv,并且绑定到 4 个不同的节点(目的是让 pod 的副本固定节点运行,如果节点发生飘移,会导致 MinIO 不可用,可以参考官方的文档:local 卷),下面的 pv yaml 内容是我自己环境的,大家需要修改成自己环境的 ip 地址
  • pvc 会直接采用 volumeClaimTemplates 的方式自动申领
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minio-minio-0
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: minio-minio-0
    namespace: storage
  hostPath:
    path: /approot/k8s_data/minio
    type: DirectoryOrCreate
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - 192.168.22.122
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minio-minio-1
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: minio-minio-1
    namespace: storage
  hostPath:
    path: /approot/k8s_data/minio
    type: DirectoryOrCreate
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - 192.168.22.123
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minio-minio-2
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: minio-minio-2
    namespace: storage
  hostPath:
    path: /approot/k8s_data/minio
    type: DirectoryOrCreate
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - 192.168.22.124
  persistentVolumeReclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: minio-minio-3
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 10Gi
  claimRef:
    apiVersion: v1
    kind: PersistentVolumeClaim
    name: minio-minio-3
    namespace: storage
  hostPath:
    path: /approot/k8s_data/minio
    type: DirectoryOrCreate
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - 192.168.22.125
  persistentVolumeReclaimPolicy: Retain

创建 MinIO

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: minio
  name: minio-svc
  namespace: storage
spec:
  ports:
  - name: http
    port: 9000
    protocol: TCP
    targetPort: 9000
  - name: console
    port: 8000
    protocol: TCP
    targetPort: 8000
  selector:
    app: minio
  type: ClusterIP
---
apiVersion: v1
kind: Secret
metadata:
  name: minio-secret
  namespace: storage
stringData:
  password: 1q@W3e$R
  username: admin
type: kubernetes.io/basic-auth
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  namespace: storage
spec:
  podManagementPolicy: Parallel
  replicas: 4
  selector:
    matchLabels:
      app: minio
  serviceName: minio-svc
  template:
    metadata:
      labels:
        app: minio
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: minio
                operator: In
                values:
                - "true"
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - minio
            topologyKey: kubernetes.io/hostname
      containers:
      - args:
        - server
        - http://minio-{0...3}.minio-svc.storage.svc.cluster.local/data
        - --console-address
        - :8000
        - --address
        - :9000
        env:
        - name: MINIO_ROOT_USER
          valueFrom:
            secretKeyRef:
              key: username
              name: minio-secret
        - name: MINIO_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              key: password
              name: minio-secret
        image: m.daocloud.io/minio/minio:RELEASE.2024-09-22T00-33-43Z
        imagePullPolicy: IfNotPresent
        name: minio
        ports:
        - containerPort: 9000
          name: http
          protocol: TCP
        - containerPort: 8000
          name: console
          protocol: TCP
        resources:
          limits:
            cpu: 1000m
            memory: 2048Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - mountPath: /data
          name: minio
  # 自动申领 pvc
  volumeClaimTemplates:
  - metadata:
      name: minio
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi

配置 ingress

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: minio
  namespace: storage
spec:
  ingressClassName: nginx
  rules:
  - host: minio.devops.icu
    http:
      paths:
      - backend:
          service:
            name: minio-svc
            port:
              number: 8000
        path: /
        pathType: Prefix

通过浏览器访问 minio.devops.icu 就可以了,用户名密码是 secret 里面配置的 usernamepassword,找到 metrics 界面,查看当前的集群情况

在这里插入图片描述

然后可以自己创建 Buckets ,然后上传文件尝试

问题记录

通过代理服务器访问 MinIO 的 Object Browser 界面一直显示 loading

在这里插入图片描述

通过浏览器的开发者工具,可以看到 console 这里很多 websocket 的报错,需要让代理服务器支持 websocket

  • 对应的 location 这块加上下面三个参数来支持 websocket
            proxy_http_version      1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
  • 重载 nginx 的配置,或者重启 nginx 服务来生效配置文件,刷新一下就发现正常了

在这里插入图片描述

然后可以自己创建 Buckets ,然后上传文件尝试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用echarts画天气预报

如图 上代码 <template><div id"temp15day"></div> </template><script setup> import * as echarts from "echarts"; const initChart () > {const machart echarts.init(document.getElementById("temp15day&q…

如何选择最合适的华为云数据库:指南与建议

在数字化转型的浪潮中&#xff0c;选择合适的数据库是企业成功的关键。华为云提供了多种数据库服务&#xff0c;以满足不同业务需求。以下是九河云总结的一些指南和建议&#xff0c;帮助您选择最合适的华为云数据库。 1. 了解业务需求 在选择数据库之前&#xff0c;首先需要了…

西米:未来的支付还能做吗?

未来支付行业还能做吗&#xff1f;一直是在洗牌&#xff0c;一直让你有上场的机会&#xff0c;做一个行业&#xff0c;最好的时间是行业刚刚开始&#xff0c;市场相对空白&#xff0c;跑马圈地&#xff0c;广撒网&#xff0c;利用时差赚钱&#xff0c;这是最好的时间。 另外&a…

【Kubernets】容器网络基础二:通讲CNI(Container Network Interface)容器网络接口实现方案

文章目录 背景知识Underlay网络Overlay网络一、基本概念二、工作原理三、实现方案四、应用场景 两者对比示意图 CNI实现有哪些&#xff1f;FlannelFlannel 的工作原理Flannel 的主要组件数据传输机制总结 Calico一、架构基础二、核心组件与功能三、路由与数据包转发四、安全策略…

Java微信支付接入(4) - API V3 API字典和相关工具

1. API列表 Native下单 - Native支付 | 微信支付商户文档中心 (qq.com) 以下是微信提供的 Native 支付的相关 API 微信提供了详细的请求接口和参数 2.接口规则 概述 - 通用规则 | 微信支付商户文档中心 (qq.com) 微信支付 APIv3 使用 JSON 作为消息体的数据交换格式。 JSO…

jupyterlab的安装与使用攻略

官网链接 Project Jupyter | Home 1.第一步安装 打开控制台 使用pip工具安装 pip install jupyterlab 如图 2.安装成功后启动 jupyter lab 会自动启动它的web页面 然后就可以正常使用咯&#xff01;&#xff01; 如果需要更换浏览器访问 新开控制台执行下面命令 jupy…

PowerJob做定时任务调度

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、区别对比二、使用步骤1. 定时任务类型2.PowerJob搭建与部署 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; PowerJob是基于java开…

文件夹访问被拒绝:深度解析、恢复策略与预防指南

一、文件夹访问被拒绝现象概述 在日常的电脑使用中&#xff0c;我们时常会遇到文件夹访问被拒绝的情况。这一现象通常表现为在尝试打开某个文件夹时&#xff0c;系统弹出权限不足的提示&#xff0c;阻止用户进行访问或操作。文件夹访问被拒绝不仅会影响用户的正常使用&#xf…

KingbaseES数据库迁移-SHELL方式

目录说明 bin: 启动脚本 conf: 配置文件 doc: 帮助文档 drivers: 数据库连接驱动&#xff08;注意不同版本驱动的存放目录差别&#xff0c;详见readme.md&#xff09; jdk: jdk kdms: kdms程序 lib: 程序包 logs: 日志 result: 迁移报告 配置数据库连接信息 进入KDT…

FTP连接池与多线程FTP上传下载算法(Java)

设计一个能够处理FTP连接池在多线程环境下,尤其是涉及到故障重连时避免竞争条件的算法,需要综合考虑线程同步、连接状态管理和重试机制。以下是一个设计思路和实现方案: 设计思路 连接池管理: 维护一个连接池,其中包含多个FTP连接对象。每个FTP连接对象需有状态标记(如…

Windows系统安装Fooocus结合内网穿透实现公网环境远程生成AI图片

前言 本篇文章将介绍如何在本地Windows11电脑部署开源AI生图软件Fooocus&#xff0c;并结合Cpolar内网穿透工具轻松实现公网环境远程访问与使用。 Fooocus 是一个图像生成软件&#xff08;基于 Gradio&#xff09;&#xff0c;目前最流行的文生图大模型是 Stable Diffusion&a…

卷积的物理意义

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P146 一个计算的例子

【python】AI Navigator的使用及搭建本机大模型

使用 大模型下载 随机下载一款大模型用于尝试&#xff0c;作者尝试的是codegemma-7b-it该大模型&#xff0c;具体每一款大模型简单介绍请查看【Anaconda】AI Navigator中大模型简单介绍-CSDN博客 聊天对话 下载完成后点击New Chat即可对话聊天 搭建本机大模型 启动大模型服…

E. Expected Power (Codeforces 976 Div2)

这道题好难 原题 E. Expected Power 提示 Hint 1 试着找 f(S) 的期望值而不是 Hint 2 从f(S)的二进制表示中找规律来求 代码1 对答案代码做了注释 #include <bits/stdc.h> using namespace std;const int mod 1e97, N 2e5 10;// 最高只有1023, 小于等于2的10…

HAL+M4学习记录_5

一、串口 记录使用HAL库开发串口 1.1 简介 USART中文意思是通用同步异步收发器&#xff0c;常用串口是异步串口&#xff0c;简记为UART&#xff0c;是内部集成的硬件外设。使用两根通信线&#xff0c;发送端TX和接收端RX&#xff0c;工作时RX和TX交叉连接。由于计算机的USB接口…

【计算机网络】详谈TCP协议确认应答机制捎带应答机制超时重传机制连接管理机制流量管理机制滑动窗口拥塞控制延迟应答

一、TCP 协议段格式 1.1、4位首部长度 4位首部长度的基本单位是4字节&#xff0c;也就是说如果4位首部长度填6&#xff0c;那报头长度就是24字节。报头长度的取值范围为[0,60]字节&#xff0c;也就是说选项的最大长度为40字节。 二、确认应答机制 发送数据和发送应答&#x…

python爬虫 - 初识正则表达式

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、正则表达式 &#xff08;一&#xff09;正则表达式的基本作用 &#xf…

DAY7 继承多态

继承 目的 提高代码的重用性&#xff0c;减少一些重复代码的书写 权限修饰符 就是是用来限制类中的成员&#xff08;成员变量、成员方法、构造器&#xff09;能够被访问的范围。 private 只能本类 缺省 本类、同一个包中的类 protected 本类&#xff0c;同一个包中的类、子…

thenable的执行时机

thenable执行只有2个时机 1.触发resolve()时,代码尚未注册then的内容,那么直到代码扫描到then那一行,才会把then的内容放进队列 2.先注册then,直到后期遇到resolve(),才会进入队列 视频教学 https://www.bilibili.com/video/BV12zsqeMEyt

传智杯 第六届—C

题目描述&#xff1a; 输入两个字符串&#xff0c;从第一字符串中删除第二个字符串中所有的字符。例如&#xff1a;第一个字符串是"They are students."&#xff0c;第二个字符串是”aeiou"。删除之后的第一个字符串变成"Thy r stdnts."。保证两个字符…