MinIO部署准备

部署概述

本实验结合Kubernetes进行MinIO部署,实现MinIO于Kubernetes的融合。

minio官方支持通过简单的快速部署,以便于进行基础测试:

curl https://raw.githubusercontent.com/minio/docs/master/source/extra/examples/minio-dev.yaml -O
kubectl apply -f minio-dev.yaml

参考官方: 快速部署MinIO

本实验基于生产环境,部署一套可用于生产环境的多租户Minio。

MinIO官方推荐使用minio-operator部署多租户的minio系统。

每个 MinIO Tenant 代表 Kubernetes 集群中的一个独立的 MinIO Object Store。

部署架构

官方最佳实践推荐的架构如下:

前期规划

Kubernetes 安装

本实验不涉及 Kubernetes 部署, Kubernetes 部署参考 Kubernetes_v1.30.3高可用部署架构二

已完成部署的Kubernetes集群的规划及相关信息如下:

主机 IP 磁盘 备注
master01 172.24.10.11 —— master节点
master02 172.24.10.12 —— master节点
master03 172.24.10.13 —— master节点
worker01 172.24.10.14 /dev/nvme0n2 worker节点+ MinIO 节点
worker02 172.24.10.15 /dev/nvme0n2 worker节点+ MinIO 节点
worker03 172.24.10.16 /dev/nvme0n2 worker节点+ MinIO 节点
worker04 172.24.10.17 /dev/nvme0n2 worker节点+ MinIO 节点

集群VIP: 172.24.10.100

相关域名均能正常解析,可通过hosts解析相关域名至 VPI 。

helm 安装

生产环境下的 minio 官方建议使用 helm 部署,因此需要提前在 Kubernetes 中部署 helm 工具。

参考: Kubernetes集群管理-Helm部署及使用

MinIO Operator 组件

Minio Operator 介绍

部署 minio 之前,需要完成 minio operator 的部署,本实验使用最新稳定 Operator 版本 6.0.2。

MinIO Operator 会安装一个 Custom Resource Definition ( CRD )来支持将 MinIO 租户描述为 Kubernetes object 。

MinIO Operator 存在于它独立的命名空间中,并在其中创建 Kubernetes 资源,这些资源包括 pod 、 svc 、 replicasets 和 deployments 。

默认情况下,Operator pods 使用 MinIO CRD 监视对象的所有命名空间,并自动管理这些资源。

当使用 Operator 创建租户时,该租户必须拥有自己的命名空间,在该命名空间中,Operator 生成租户配置所需的 pod 。

每个Tenant pod运行三个容器:

  • MinIO 容器运行所有标准 MinIO 功能的容器,相当于裸机上的基本 MinIO 安装。这个容器在提供的挂载点(pv)中存储和检索object。
  • InitContainer,仅在启动 pod 期间存在,用于管理启动期间的配置secret,启动完成后,此容器终止。
  • Sidecar container 用于初始化MinIO租,sidecar 检索并验证每个租户的配置,并在 pod 中创建必要的本地资源。

在Operator 6.0.0 开始, Sidecar 有自己的 image 和释放周期,与 MinIO Operator 的其他部分分开。

MinIO Operator 将租户的环境变量存储在sidecar中,允许 Operator 在不需要滚动重启的情况下更新变量。

租户使 pvc 与存储对象的持久卷进行通信。

提示:

1:官方也支持 kubectl -k 和 kubectl --kustomize 部署,可以参考:Deploy the MinIO Operator 。本实验有限采用helm安装,也可参考: Deploy Operator With Helm

2:但若使用 Helm chart安装 Operator ,则必须使用 Helm 来管理该安装过程。不要使用kubectl krew、Kustomize或类似的方法来更新或管理 MinIO Operator 的安装。

Kubernetes TLS 证书

MinIO Operator 自动生成 TLS 证书签名请求( CSR )并使用 Kubernetes certificates.k8s.io TLS 证书管理 API创建签名的 TLS 证书。

因此 MinIO Operator要求 Kubernetes kube-controller-manager 配置包括以下配置设置:

  • --cluster-signing-key-file :指定用于签署集群范围证书的 PEM 编码的 RSA 或 ECDSA 私钥。
  • --cluster-signing-cert-file :指定用于颁发集群范围证书的 PEM 编码的 x.509 证书颁发机构证书。

如果 Kubernetes 集群未配置为相应生成的 CSR ,则 Operator 无法完成初始化。

默认情况下,Kubernetes 已完成如上自动挡配置,可通过下方式检查当前 Kubernetes 集群是否配置了 TLS 证书。

kubectl get pod kube-controller-manager-$CLUSTERNAME-control-plane -n kube-system -o yaml

提示:MinIO Operator 使用指定的证书颁发机构( CA )为所有 MinIO 租户 pod 自动生成 TLS 证书。Kubernetes 集群外部的客户端必须信任 Kubernetes 集群 CA 才能连接到 MinIO Operator 或 MinIO 租户。

不能信任 Kubernetes 集群 CA 的客户端可以尝试禁用连接 MinIO Operator 或 MinIO Tenant 的 TLS 验证。

也可以生成由已知且受信任的 CA 签署的 x.509 TLS 证书,并将这些证书传递给 MinIO 租户。

添加repo

使用 helm 添加 minio chart repo。

[root@master01 ~]# mkdir ten-minio
[root@master01 ~]# cd ten-minio
[root@master01 ten-minio]# helm repo add minio-operator https://operator.min.io
[root@master01 ten-minio]# helm repo update
[root@master01 ten-minio]# helm search repo minio-operator
NAME CHART VERSION APP VERSION DESCRIPTION
minio-operator/minio-operator 4.3.7 v4.3.7 A Helm chart for MinIO Operator
minio-operator/operator 6.0.3 v6.0.3 A Helm chart for MinIO Operator
minio-operator/tenant 6.0.3 v6.0.3 A Helm chart for MinIO Operator

提示:国内可以使用 helm repo add minio-operator https://operator.minio.org.cn 进行添加。

minio-operator/minio-operator是一个旧版本的 operator ,不需要安装。

安装 operator

运行 helm install 命令安装 operator 。

以下命令指定并创建了一个专用 minio-operator 命名空间进行安装。

[root@master01 ten-minio]# helm show values minio-operator/operator > operator-values.yaml   #可选,导出默认chart values
[root@master01 ten-minio]# cat operator-values.yaml [root@master01 ten-minio]# helm install \
--namespace minio-operator \
--create-namespace \
operator minio-operator/operator

验证 operator

验证 operator 安装情况。

[root@master01 ten-minio]# kubectl get all -n minio-operator                        #查看安装后的资源
NAME READY STATUS RESTARTS AGE
pod/minio-operator-95fd896dc-cdt84 1/1 Running 0 2m6s
pod/minio-operator-95fd896dc-rfjsr 1/1 Running 0 2m6s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/operator ClusterIP 10.20.194.160 <none> 4221/TCP 2m7s
service/sts ClusterIP 10.20.24.158 <none> 4223/TCP 2m7s NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/minio-operator 2/2 2 2 2m7s NAME DESIRED CURRENT READY AGE
replicaset.apps/minio-operator-95fd896dc 2 2 2 2m7s

持久卷

MinIO 要求专用于给对象存储的驱动器或卷的访问,本实验使用本地盘 /dev/nvme0n2 ,该磁盘独立用于部署minio。

提示:该专属磁盘用于部署minio分布式存储,其他任何进程、软件、脚本等都不得执行任何操作,也不得对MinIO放置在其上的对象或文件执行操作,否则可能带来数据破坏的风险。

MinIO 可以使用任何支持 ReadWriteOnce 访问模式的 Kubernetes PV。

MinIO 的一致性保证要求独占存储访问,而 ReadWriteOnce 正是提供这种支持。

此外,MinIO 建议为 PVC StorageClass 设置 Retain 回收策略,同时建议在配置storage class、CSI或者基于PV的存储的时候,将卷格式化为 XFS 以确保最佳性能。

MinIO可以使用任何支持ReadWriteOnce访问模式的Kubernetes Persistent Volume (PV)。

MinIO的一致性保证需要ReadWriteOnce提供的独占存储访问,在部署租户之前,持久卷必须已经存在。

此外,MinIO建议为PVC StorageClass设置Retain的回收策略,在最佳实践下,配置StorageClass、CSI或PV底层的其他提供程序,建议将卷格式化为XFS,以确保最佳性能。

对于节点具有直接连接存储的Kubernetes集群,MinIO强烈建议使用DirectPV CSI驱动程序。

DirectPV提供了一个分布式持久卷管理器,它可以发现、格式化、挂载、调度和监视Kubernetes节点上的驱动器,DirectPV解决了手动配置和监控本地持久卷的限制。

详细 DirectPV 使用见: 002.DirectPV介绍及安装003.DirectPV存储管理

本实验已完成directpv的安装,相关信息如下:

[root@master01 ten-minio]# kubectl -n directpv get all
NAME READY STATUS RESTARTS AGE
pod/controller-79f6b96bf8-t9c4l 3/3 Running 0 25m
pod/controller-79f6b96bf8-vrb2q 3/3 Running 0 25m
pod/controller-79f6b96bf8-x76gj 3/3 Running 0 25m
pod/node-server-4tj7p 4/4 Running 0 25m
pod/node-server-67c7b 4/4 Running 0 25m
pod/node-server-cjhd5 4/4 Running 0 25m
pod/node-server-k6ks2 4/4 Running 0 25m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/node-server 4 4 4 4 4 <none> 25m NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/controller 3/3 3 3 25m NAME DESIRED CURRENT READY AGE
replicaset.apps/controller-79f6b96bf8 3 3 3 25m
[root@master01 ten-minio]# kubectl -n directpv get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
directpv-min-io directpv-min-io Delete WaitForFirstConsumer true 26m

创建租户namespace

创建模拟多租户的命名空间。

[root@master01 ten-minio]# vim minio-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: minio-ns01
labels:
name: minio-ns01 [root@master01 ten-minio]# kubectl apply -f minio-ns.yaml

MinIO Helm部署

helm概述

Helm是一个自动将应用程序部署到Kubernetes集群的工具,参考:053.Kubernetes集群管理-Helm部署及使用

Helm charts是一组定义部署细节的YAML文件、模板和其他需要的文件。

如下过程使用Helm Chart来部署由MinIO Operator管理的租户。

这个过程需要Kubernetes集群有一个有效的Operator部署,不能使用MinIO Operator租户chart来部署独立于Operator的租户。

提示:MinIO Operator 租户 Chart与社区管理的MinIO chart不同。

社区 Helm Chart 由社区建立、维护和支持。

MinIO不保证支持任何给定的错误、特性请求或引用该chart的更新带来的问题。

Operator 租户 Chart 由 MinIO 正式维护和支持,MinIO 强烈建议在生产环境中使用 Operator 和 tenant 的官方 Helm Chart 。

先决条件

安装一个带 Helm 的 MinIO tenant ,需要满足以下要求:

  • 可用的Kubernetes集群;
  • 与 Kubernetes 集群匹配的kubectl CLI工具;
  • Hlem 3.8 或更高版本;
  • yq 4.18.1 或更高版本;
  • 已安装 MinIO Operator。

此安装必须具备Kubernetes集群访问管理权限。

Helm Charts部署MinIO Tenant

如下使用官方的 MinIO Tenant chart进行部署 MinIO 租户,与本地chart安装相比,此方法支持简化的安装路径。

如下的步骤是使用Helm根据官方的MinIO Tenant chart部署MinIO租户。

更多chart配置参考:MinIO Server Config Guide

验证MinIO Operator

添加repo参考: 添加repo

配置helm

配置相关helm vaule 。

[root@master01 ten-minio]# curl -sLo tenant-values.yaml https://raw.githubusercontent.com/minio/operator/master/helm/tenant/values.yaml

提示:如果使用 Helm 部署 MinIO tenant ,则必须使用 Helm 来管理或升级该部署。不要使用kubectl krew、Kustomize或类似的方法来管理或升级 MinIO tenant 。

2:也可使用 helm 命令导出 minio chart 的默认 values.yaml 。

[root@master01 ten-minio]# helm show values minio-operator/tenant > tenant-values.yaml

配置租户拓扑

pool[0]前缀控制部署在租户中的所有pod的服务器数量、每个服务器的卷数量和存储类。

配置说明:

配置项 描述
servers 要在服务器池中部署的MinIO pod的数量
volumesPerServer 要附加到每个MinIO pod(服务器)的持久卷的数量,Operator 为租户生成 volumesPerServer x servers 数量的 PVC
storageClassName 要与生成的PVC相关联的Kubernetes存储类,如果没有匹配指定值的存储类存在,或者指定的存储类不能满足请求的pvc个数或存储容量,则可能导致租户启动失败
size 为每个生成的PVC请求的存储量
[root@master01 ten-minio]# vim tenant-values.yaml
tenant:
name: tenant-01
pools:
- servers: 4
volumesPerServer: 4
name: pool-0
size: 2Gi #受限于实验磁盘空间,调整为2Gi
storageClassName: directpv-min-io #指定使用directpv创建的sc

配置亲和/或反亲和

Tenant Chart 支持以下 Kubernetes Selector、亲和性和反亲和性配置:

  • 节点选择器 (tenant.nodeSelector)
  • 节点/Pod 亲和性或反亲和性 (spec.pools[n].affinity)

MinIO 建议为租户配置 Pod 反亲和性,以确保 Kubernetes 调度程序不会将多个 Pod 部署到同一台工作节点上。

如果需要将 Pod 部署到特定的工作节点上,可将这些节点的标签或筛选器传递给 nodeSelector 或 affinity 字段,以限制调度程序将 Pod 部署到这些节点上。

[root@master01 ten-minio]# kubectl label nodes worker0{1,2,3,4} tenant-minio=enabled     #根据部署规划给节点打标签
tenant:
pools:
- servers: 4
name: pool-0
size: 2Gi #受限于实验磁盘空间,调整为2Gi
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: tenant-minio
operator: In
values:
- enabled

配置TLS证书

MinIO租户CRD提供以下字段,使用相应字段配置租户TLS网络加密:

配置 描述
tenant.certificate.requestAutoCert 启用或禁用 MinIO 自动生成 TLS 证书。
如果省略,默认为 true 或 enabled 。
tenant.certificate.certConfig 自定义自动 TLS 的行为(如果启用)。
tenant.certificate.externalCertSecret 通过服务器名称指示( SNI )为多个主机名启用TLS。
指定一个或多个 kubernetes.io/tls 或 cert-manager 的 Kubernetes secret
tenant.certificate.externalCACertSecret 启用对未知、第三方或内部 CA ( Certificate authority )签名的客户端TLS证书进行验证。
指定一个或多个 kubernetes.io/tls 的 Kubernetes secret,其中包含特定机构的 CA 证书的完整链。

提前创建证书。

[root@master01 ten-minio]# ll *com*
-rw-r--r-- 1 root root 3.9K Aug 24 06:19 api.linuxsb.com.crt
-rw-r--r-- 1 root root 1.7K Aug 24 06:19 api.linuxsb.com.key
-rw-r--r-- 1 root root 3.9K Aug 24 05:36 minio.linuxsb.com.crt
-rw-r--r-- 1 root root 1.7K Aug 24 05:36 minio.linuxsb.com.key [root@master01 ten-minio]# kubectl -n minio-ns01 create secret tls minio-webui-tls --cert=minio.linuxsb.com.crt --key=minio.linuxsb.com.key
[root@master01 ten-minio]# kubectl -n minio-ns01 create secret tls minio-api-tls --cert=api.linuxsb.com.crt --key=api.linuxsb.com.key [root@master01 ten-minio]# kubectl -n minio-ns01 describe secrets minio-webui-tls
[root@master01 ten-minio]# kubectl -n minio-ns01 describe secrets minio-api-tls

关闭 cert-manager 自动证书。

  certificate:
externalCaCertSecret: [ ]
externalCertSecret: [ ]
requestAutoCert: false
certConfig: { }

配置环境变量

可以使用tenant.configuration设置MinIO Server环境变量。

表头 表头
tenant.configuration 指定一个Kubernetes opaque secret,其数据负载config.env包含想要设置的每个MinIO环境变量。
config.env数据负载必须是一个base64编码的字符串,可以创建一个本地文件,设置环境变量,然后使用cat LOCALFILE base64来创建有效负载。

本设置可以设置minio相关用户和密码,本实验保持默认minio/minio123 。

配置ingress

配置ingress规则,将集群内minio对外暴露。

ingress:
api:
enabled: true
ingressClassName: "nginx"
labels: { }
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
tls:
- hosts:
- 'api.linuxsb.com'
secretName: minio-api-tls
host: api.linuxsb.com
path: /
pathType: Prefix
console:
enabled: true
ingressClassName: "nginx"
labels: { }
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
tls:
- hosts:
- 'minio.linuxsb.com'
secretName: minio-webui-tls
host: minio.linuxsb.com
path: /
pathType: Prefix

完整values.yaml如下:

tenant:
name: tenant-01
image:
repository: quay.io/minio/minio
tag: RELEASE.2024-08-17T01-24-54Z
pullPolicy: IfNotPresent
imagePullSecret: { }
scheduler: { }
configuration:
name: myminio-env-configuration
configSecret:
name: myminio-env-configuration
accessKey: minio
secretKey: minio123 pools:
- servers: 4
name: pool-0
volumesPerServer: 4
size: 2Gi
storageClassName: directpv-min-io
storageAnnotations: { }
annotations: { }
labels: { }
tolerations: [ ]
nodeSelector: { }
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: tenant-minio
operator: In
values:
- enabled
resources: { }
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
fsGroupChangePolicy: "OnRootMismatch"
runAsNonRoot: true
containerSecurityContext:
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
seccompProfile:
type: RuntimeDefault
topologySpreadConstraints: [ ]
mountPath: /export
subPath: /data
metrics:
enabled: false
port: 9000
protocol: http
certificate:
externalCaCertSecret: [ ]
externalCertSecret: [ ]
requestAutoCert: false
certConfig: { }
features:
bucketDNS: false
domains: { }
enableSFTP: false
buckets: [ ]
users: [ ]
podManagementPolicy: Parallel
liveness: { }
readiness: { }
startup: { }
lifecycle: { }
exposeServices: { }
serviceAccountName: ""
prometheusOperator: false
logging: { }
serviceMetadata: { }
env: [ ]
priorityClassName: ""
additionalVolumes: [ ]
additionalVolumeMounts: [ ] ingress:
api:
enabled: true
ingressClassName: "nginx"
labels: { }
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
tls:
- hosts:
- 'api.linuxsb.com'
secretName: minio-api-tls
host: api.linuxsb.com
path: /
pathType: Prefix
console:
enabled: true
ingressClassName: "nginx"
labels: { }
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
tls:
- hosts:
- 'minio.linuxsb.com'
secretName: minio-webui-tls
host: minio.linuxsb.com
path: /
pathType: Prefix

正式部署

使用配置好的values.yaml进行部署。

[root@master01 ten-minio]# helm install \
--namespace minio-ns01 \
--create-namespace \
--values tenant-values.yaml tenant-01 minio-operator/tenant

确认验证

确认相关部署成功。

  • 部署情况验证

    查看minio。
[root@master01 ten-minio]# kubectl get all -n minio-ns01 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/tenant-01-pool-0-0 2/2 Running 0 6m6s 10.10.5.9 worker01 <none> <none>
pod/tenant-01-pool-0-1 2/2 Running 0 6m6s 10.10.30.65 worker02 <none> <none>
pod/tenant-01-pool-0-2 2/2 Running 0 6m6s 10.10.196.79 worker04 <none> <none>
pod/tenant-01-pool-0-3 2/2 Running 0 6m5s 10.10.19.79 worker03 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/minio ClusterIP 10.20.208.139 <none> 80/TCP 6m7s v1.min.io/tenant=tenant-01
service/tenant-01-console ClusterIP 10.20.114.138 <none> 9090/TCP 6m7s v1.min.io/tenant=tenant-01
service/tenant-01-hl ClusterIP None <none> 9000/TCP 6m7s v1.min.io/tenant=tenant-01 NAME READY AGE CONTAINERS IMAGES
statefulset.apps/tenant-01-pool-0 4/4 6m6s minio,sidecar quay.io/minio/minio:RELEASE.2024-08-17T01-24-54Z,quay.io/minio/operator-sidecar:v6.0.2 [root@master01 ten-minio]# kubectl -n minio-ns01 get ingress -o wide
NAME CLASS HOSTS ADDRESS PORTS AGE
tenant-01 nginx api.linuxsb.com 172.24.10.11 80, 443 6m31s
tenant-01-console nginx minio.linuxsb.com 172.24.10.11 80, 443 6m31s

查看directpv。

[root@master01 ten-minio]# kubectl -n minio-ns01 get pvc
[root@master01 ten-minio]# kubectl directpv list drives

  • MC验证

    MinIO Client mc命令行工具提供了ls、cat、cp、mirror和diff等命令,支持文件系统和Amazon s3兼容的云存储服务。

mc命令行工具是为与AWS S3 API兼容而构建的,并在MinIO和AWS S3上测试了预期的功能和行为。

安装mc:

[root@master01 minio]# curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o /usr/local/bin/mc [root@master01 minio]# chmod +x /usr/local/bin/mc
[root@master01 minio]# mc --help

连接minio:

使用mc alias set命令将Amazon s3兼容的服务添加到mc配置中,将alias替换为要关联到S3服务的名称。

mc命令通常需要alias作为参数来标识要对哪个S3服务执行,如果省略ACCESS_KEY和SECRET_KEY,执行命令时会提示在CLI中输入这些值。

[root@master01 minio]# mc alias set myminio https://api.linuxsb.com minio minio123
Added `myminio` successfully.
[root@master01 minio]# mc admin info myminio

部署参考: K8S中使用helm安装MinIO书

005.MinIO-DirectPV分布式多租户存储部署的更多相关文章

  1. MinIO 的分布式部署

    目录 1 前言 2 分布式存储可靠性常用方法 2.1 冗余 2.2 校验 3 MinIO存储机制 3.1 概念理解 3.2 纠删码EC(Erasure Code) 3.3 存储形式 4 部署实践 4. ...

  2. 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

    Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效. 便于实现"强一致性& ...

  3. 淘宝分布式 key/value 存储引擎Tair安装部署过程及Javaclient測试一例

    文件夹 1. 简单介绍 2. 安装步骤及问题小记 3. 部署配置 4. Javaclient測试 5. 參考资料 声明 1. 以下的安装部署基于Linux系统环境:centos 6(64位),其他Li ...

  4. HBase 1.2.6 完全分布式集群安装部署详细过程

    Apache HBase 是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,是NoSQL数据库,基于Google Bigtable思想的开源实现,可在廉价的PC Server上搭建大规模结构化存 ...

  5. 一文搞定FastDFS分布式文件系统配置与部署

    Ubuntu下FastDFS分布式文件系统配置与部署 白宁超 2017年4月15日09:11:52 摘要: FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件 ...

  6. AIX文件系统和存储部署(转)

    文件系统和存储部署 文件系统的管理是AIX存储结构中的最后一环.定义完lv后,可采用如下两种方式使用lv: a.作为裸设备(raw)使用,一般是数据库型的应用 b.在lv上定义文件系统,并提供文件和数 ...

  7. MapGis如何实现WebGIS分布式大数据存储的

    作为解决方案厂商,MapGis是如何实现分布式大数据存储的呢? MapGIS在传统关系型空间数据库引擎MapGIS SDE的基础之上,针对地理大数据的特点,构建了MapGIS DataStore分布式 ...

  8. KubeSphere企业级分布式多租户容器管理平台

    KubeSphere企业级分布式多租户容器管理平台 KubeSphere安装部署2.1.0DEV版本

  9. Zookeeper分布式过程协同技术 - 部署及设置

    Zookeeper分布式过程协同技术 -  部署及设置 Zookeeper支持单机模式.伪集群模式.集群模式三种部署方式.演示部署环境为CentOS.jdk版本为1.8.Zookeeper版本为3.4 ...

  10. 从两个模型带你了解DAOS 分布式异步对象存储

    摘要:分布式异步对象存储 (DAOS) 是一个开源的对象存储系统,专为大规模分布式非易失性内存 (NVM, Non-Volatile Memory) 设计,利用了 SCM(Storage-Class ...

随机推荐

  1. oeasy教您玩转vim - 39 - # 剪切粘贴

    ​ 剪切粘贴 回忆上节课内容 我们大幅度地复习了整个 motion: 直接运动 h j k l 行运动 首行g g 末行G 第n行n G 单词运动 wbe w 是到下一个 word 的开头 b 是到当 ...

  2. Java 基于Apache POI实现Excel读写操作

    实践环境 Win10 Java JDK1.8 代码实现 pom.xml配置 <?xml version="1.0" encoding="UTF-8"?&g ...

  3. java中使用jdbc连接数据库操作

    先贴代码,在做说明 import java.sql.*; import java.util.ArrayList; import java.util.List; public class Conn { ...

  4. 助动词&情态动词

    助动词 (auxiliary verbs) 任何整句都分为主语和谓语,而谓语部分的核心是谓语动词, 但是谓语动词本身往往无法独立表达某些语法概念,需要其他词的辅助, 而这类来辅助构成谓语但自己本身不能 ...

  5. web3的的入口,钱包,为什么说加密钱包是Web 3活动入口

    Web3.0让未来充满了想象力,或许超越当今人类所知的互联网.有可能彻底改变人类社交互动.商业往来和整个互联网经济.同时数字加密货币行业从业者对Web 3.0赋予了很高期待,希望通过结合后打破互联网巨 ...

  6. 【ElasticSearch】突破深度分页限制的分页方案

    一.场景需求 最近在忙一个新的项目,数据源是ES,但是功能就是对文档进行翻页查询 ES提供了分页查询,就是from + size深度查找,但是使用有限制,只能在1万条内 我和同事的意见是1万条之后的数 ...

  7. 【Vue】Re11 Vue 与 Webpack

    一.案例环境前置准备: 创建一个空目录用于案例演示 mkdir vue-sample 初始化案例和安装webpack cd vue-sample npm install webpack@3.6.0 - ...

  8. 在计算机论文中suppose suggest assume 用法上的区别

    ChatGPT3.5的答案: 在计算机论文中,"suppose," "suggest," 和 "assume" 有不同的用法和含义.它们在表 ...

  9. 中国2023年GDP增速5.2%

    在中美贸易战和三年全球疫情的大背景下,我国的经济依旧保持强有力的增速,这表明了经济发展不断转好,一切恢复到疫情和贸易战之前也是有待期望的.

  10. ubuntu18.04系统环境下使用vs code安装pylint检查python的代码错误

    相关: Ubuntu18.04 系统环境下 vscode中忽略pylint某些错误或警告 ============================================ python的代码错 ...