在MinIO中添加Pools(池)并扩展容量

news2025/2/24 4:46:33

服务器池可帮助您快速轻松地扩展现有 MinIO 集群的容量。这篇博文重点介绍如何增加一个集群的容量,这与添加另一个集群并在多个集群之间复制相同数据不同。将服务器池添加到现有群集时,可以增加该群集的整体可用容量。如果设置了复制,则需要平均增长复制目标,以适应复制源的增长。

服务器池是 MinIO 中的一个重要概念,因为它们有助于快速扩展存储容量。我们建议将单池集群的大小调整为至少 2-3 年的存储容量跑道,如果您预计会大幅增长,则可能会更长。这样,可以避免添加不必要的服务器池,而是从一个简单的 MinIO 群集开始,该群集会随着时间的推移而增长。尽管服务器池比单个节点更易于使用,但它们仍然会增加一点管理开销。扩展后,应考虑通过停用较小的池将多个池合并为几个大型池。

在这篇文章中,我们将向您展示在扩展服务器池之前需要考虑的事项,如何创建初始池,然后如何通过添加新池来扩展它。

构建集群

设置服务器池以扩展群集时,需要满足某些先决条件,才能获得其他池的必要规范。

网络和防火墙:新池中的节点需要能够与群集中的所有现有节点进行双向通信。所有新节点都必须侦听与现有节点相同的端口。例如,如果使用端口“9000”,则新池也必须在“9000”上进行通信。我们还建议使用 Nginx 或 HAProxy 等负载均衡器来代理请求。配置路由算法,确保基于最少连接路由流量。

顺序主机名:MinIO 使用扩展表示法“{x…y}’ 表示一系列连续的主机名。因此,必须按顺序命名池中的新节点。如果现有节点具有以下主机名:

minio1.example.com

minio2.example.com

minio3.example.com

minio4.example.com

然后,新池应具有以下主机名:

minio5.example.com

minio6.example.com

minio7.example.com

minio8.example.com

请确保在启动新池之前为这些主机名创建 DNS 记录。

顺序驱动器:与主机名类似,驱动器也需要使用相同的扩展符号按顺序安装 {x…y} 。下面是一个 /etc/fstab 文件示例。

$ mkfs.xfs /dev/sdb -L DISK1

$ mkfs.xfs /dev/sdc -L DISK2

$ mkfs.xfs /dev/sdd -L DISK3

$ mkfs.xfs /dev/sde -L DISK4


$ nano /etc/fstab


  #                  

  LABEL=DISK1      /mnt/disk1     xfs     defaults,noatime  0       2

  LABEL=DISK2      /mnt/disk2     xfs     defaults,noatime  0       2

  LABEL=DISK3      /mnt/disk3     xfs     defaults,noatime  0       2

  LABEL=DISK4      /mnt/disk4     xfs     defaults,noatime  0       2

然后,您可以使用 /mnt/disk{1…4} 指定整个驱动器范围。如果要在每个驱动器上使用特定的子文件夹,请将其指定为 /mnt/disk{1…4}/minio 。

纠删码:如前所述,MinIO 要求每个服务器池满足现有集群的部署参数。具体而言,新的池拓扑必须支持每个纠删集的最小驱动器数 2 x EC:N ,其中 EC:N 是部署的标准奇偶校验存储类。此要求可确保新服务器池能够满足部署的预期 SLA。作为参考,这篇博文介绍了如何使用纠删码计算器来确定所需的磁盘数量和容量。有关纠删码的说明,请参阅纠删码 101。

原子更新:还应确保新池尽可能与现有群集同构。它不必与规格相匹配,但驱动器和网络配置需要尽可能接近,以避免潜在的边缘情况问题。添加新的服务器池需要同时重新启动部署中的所有 MinIO 节点。MinIO 建议同时重启所有节点。不要执行滚动重启(例如一次一个节点),MinIO 操作是原子的,并且严格一致。因此,重新启动过程不会中断应用程序和正在进行的操作。

让我们继续构建集群。在此示例中,我们将使用 KIND 构建 Kubernetes 集群。我们将使用以下配置来构建虚拟 8 节点群集。

kind: Cluster

apiVersion: kind.x-k8s.io/v1alpha4

networking:

  apiServerAddress: "127.0.0.1"

  apiServerPort: 6443

nodes:

  - role: control-plane

    extraPortMappings:

    - containerPort: 30080

      hostPort: 30080

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30081

      hostPort: 30081

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30082

      hostPort: 30082

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30083

      hostPort: 30083

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30084

      hostPort: 30084

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30085

      hostPort: 30085

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30086

      hostPort: 30086

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30087

      hostPort: 30087

      listenAddress: "127.0.0.1"

      protocol: TCP

  - role: worker

    extraPortMappings:

    - containerPort: 30088

      hostPort: 30088

      listenAddress: "127.0.0.1"

      protocol: TCP

将标签添加到池 zero 中的前 4 个节点,如下所示

kubectl label nodes kind-worker  pool=zero

kubectl label nodes kind-worker2 pool=zero

kubectl label nodes kind-worker3 pool=zero

kubectl label nodes kind-worker4 pool=zero

克隆 MinIO 操作员的租户 lite Kustomize 配置

git clone https://github.com/minio/operator.git

确保 tenant.yaml 有一个如下所示的 pool-0 池

 pools:

  - name: pool-0

    nodeSelector:

      pool: zero

将租户配置应用于启动 pool-0

$ kubectl apply -k operator/resources

$ kubectl apply -k operator/examples/kustomization/tenant-lite

检查以确保池中有 4 个Pods:

$ kubectl get pods -n tenant-lite -o wide

NAME               READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES

myminio-pool-0-0   1/1     Running   0          12h   10.244.7.5    kind-worker               

myminio-pool-0-1   1/1     Running   0          12h   10.244.5.5    kind-worker3              

myminio-pool-0-2   1/1     Running   0          12h   10.244.4.10   kind-worker2              

myminio-pool-0-3   1/1     Running   0          12h   10.244.8.13   kind-worker4          

这是大多数人开始的初始设置。这可确保您的设置方式能够让您在未来无缝扩展。说到扩展池,让我们来看看它会是什么样子

扩展集群

扩展池是一种无中断操作,可导致零群集停机时间。以下是我们打算实现的最终结果的图表。

在左手边的上图中,我们看到 pool-0 前面的步骤中已经设置好了。在本节中,我们将讨论如何添加 pool-1 以扩展集群的整体容量。您需要向 pool-0 添加 4 个类似的节点,以便扩展到 pool-1。我们已经通过启动一个 8 节点集群来简化演示。

编辑 tenant-lite 配置以添加 pool-1

kubectl edit tenant -n tenant-lite


它应该打开一个 yaml 文件,找到该部分并在该 pools 部分下方添加此部分。

- affinity:

      podAntiAffinity:

        requiredDuringSchedulingIgnoredDuringExecution:

        - labelSelector:

            matchExpressions:

            - key: v1.min.io/tenant

              operator: In

              values:

              - myminio

            - key: v1.min.io/pool

              operator: In

              values:

              - pool-1

          topologyKey: kubernetes.io/hostname

    name: pool-1

    nodeSelector:

      pool: one

    resources: {}

    runtimeClassName: ""

    servers: 4

    volumeClaimTemplate:

      metadata:

        creationTimestamp: null

        name: data

      spec:

        accessModes:

        - ReadWriteOnce

        resources:

          requests:

            storage: "2147483648"

        storageClassName: standard

      status: {}

    volumesPerServer: 2
    

保存文件后,新池应立即开始部署。通过获取 Pod 列表来验证它。

$ kubectl get pods -n tenant-lite -o wide

NAME               READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES

myminio-pool-0-0   1/1     Running   0          12h   10.244.7.5    kind-worker               

myminio-pool-0-1   1/1     Running   0          12h   10.244.5.5    kind-worker3              

myminio-pool-0-2   1/1     Running   0          12h   10.244.4.10   kind-worker2              

myminio-pool-0-3   1/1     Running   0          12h   10.244.8.13   kind-worker4              

myminio-pool-1-0   1/1     Running   0          12h   10.244.3.10   kind-worker8              

myminio-pool-1-1   1/1     Running   0          12h   10.244.6.15   kind-worker6              

myminio-pool-1-2   1/1     Running   0          12h   10.244.2.7    kind-worker5              

myminio-pool-1-3   1/1     Running   0          12h   10.244.1.10   kind-worker7              

你有它。这难道不是一种非常简单的扩张方式吗?

总结

服务器池简化了 MinIO 集群的持续操作。池允许您立即扩展集群,而无需将数据移动到不同的集群或重新平衡集群。服务器池提高了运营效率,因为它们为存储管理员提供了将整个硬件群集作为单个资源进行寻址的强大快捷方式。

虽然服务器池是扩展群集容量的绝佳方式,但应谨慎使用它们。我们建议您从第一天开始调整群集的大小,以便有足够的空间来满足 3 年的预期增长,这样您就不需要立即开始添加更多池。此外,在购买更多容量之前,请考虑分层 - 将旧数据分层到较便宜的硬件,并将最新和最强大的硬件用于存储最新和访问量最大的对象。如果必须通过添加池来扩展群集,请制定一个游戏计划,最终停用较旧的池,并合并为每个站点的单个大型群集。这将进一步降低保持 MinIO 集群平稳运行所需的开销。

如果对Pools 有任何问题,请随时联系MinIO中国,为您们提供更专业的技术保障和商业授权。

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

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

相关文章

2024年广东省安全员C证第四批(专职安全生产管理人员)证模拟考试题库及广东省安全员C证第四批(专职安全生产管理人员)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年广东省安全员C证第四批(专职安全生产管理人员)证模拟考试题库及广东省安全员C证第四批(专职安全生产管理人员)理论考试试题是由安全生产模拟考试一点通提供&#…

分布式数据库原理及技术实验及个人思考

Hive的数据库及表的存储结构体系讨论 1.显示hive所在数据库的位置 方法一&#xff1a;一次性临时存储 >hive set hive.cli.print.current.dbtrue 方法二&#xff1a;永久存储 在conf文件夹下修改hive-site.xml配置文件&#xff0c;添加 <property> <name>…

报错解决:No module named ‘pytorch_lightning‘ 安装pytorch_lightning

报错记录 执行如下代码&#xff1a; import pytorch_lightning报错&#xff1a; No module named ‘pytorch_lightning’ 解决方式 安装pytorch_lightning包即可。 一般情况下&#xff0c;缺失的包通过pip安装&#xff0c;即&#xff1a; pip install pytorch_lightning然…

构建 Maven 项目时可能遇到的问题

文章目录 构建 Maven 项目时可能遇到的问题1. Maven 自动下载依赖后&#xff0c;在本地仓库中找不到2. 运行时报错如下&#xff1a;Error: java 不支持发行版本 53. 创建 Maven 项目后 pom.xml 文件为空4. 在 Settings 中 Update 了阿里云远程仓库&#xff0c;导致整个项目不能…

【Web】NSSCTF Round#16 Basic个人wp(全)

出题友好&#xff0c;适合手生复健。 目录 ①RCE但是没有完全RCE ②了解过PHP特性吗 ①RCE但是没有完全RCE 上来就是一段md5八股 (string)就是不让用数组了&#xff0c;然后强比较需要md5碰撞 ?md5_1%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc…

【Python机器学习】分类器的不确定估计——决策函数

scikit-learn接口的分类器能够给出预测的不确定度估计&#xff0c;一般来说&#xff0c;分类器会预测一个测试点属于哪个类别&#xff0c;还包括它对这个预测的置信程度。 scikit-learn中有两个函数可以用于获取分类器的不确定度估计&#xff1a;decidion_function和predict_pr…

Portalgraph VR空间投影仪:可以将VR空间投射到任意平面上的新型VR投影技术

通过一项创新的科技突破&#xff0c;Portalgraph VR空间投影仪成功地在现实与虚拟空间之间搭建起了一座神奇的“时空传送门”。这投影一技术不仅打破了传统虚拟现实设备的局限&#xff0c;更让人们无需佩戴任何头戴显示器&#xff0c;仅凭裸眼就能在任何平面上看到虚拟现实空间…

平衡小车——PID控制理论

开环控制 开环控制,全称开环控制系统(Open Loop Control System),又称为无反馈系统。即系统的输入可以影响输出,但是 输入不受输出影响 的系统。输入到输出的信号是单向传递的。 以下为生活中的例子: 控制系统 输入量 控制器 受控对象 输出量 风扇调速

基于代理IP的多线程爬虫实现

目录 前言 1. 爬虫的基本原理 2. 多线程爬虫的优势 3. 代理IP的应用 4. 基于代理IP的多线程爬虫实现 步骤1&#xff1a;导入必要的模块 步骤2&#xff1a;定义爬虫函数 步骤3&#xff1a;创建线程并启动爬虫 总结 前言 本文将介绍如何使用Python编写一个基于代理IP的多…

二十几种未授权访问漏洞合集

未授权访问漏洞是一个在企业内部非常常见的问题&#xff0c;这种问题通常都是由于安全配置不当、认证页面存在缺陷&#xff0c;或者压根就没有认证导致的。当某企业对外的服务端口、功能无限制开放&#xff0c;并且对用户的访问没有做任何限制的时候&#xff0c;可能会泄露出某…

C++重新认知:头文件的预处理

一、为什么头文件需要预处理 预处理的功能是对一个资源进行替换。 预处理的几种形式 常见的预处理指令&#xff1a; #define 宏定义 #undef 取消宏 #include 文本包含 #ifdef 如果宏被定义就进行编译 #ifndef 如果宏未被定义就进行编译 #endif 结束编译块的控制 #if 表达式非…

m1 + swoole(hyperf) + yasd + phpstorm 安装和debug

参考文档 Mac M1安装报错 checking for boost... configure: error: lib boost not found. Try: install boost library Issue #89 swoole/yasd GitHub 1.安装boost库 brew install boostbrew link boost 2.下载yasd git clone https://github.com/swoole/yasd.git 3.编…

【书生·浦语】大模型实战营——第四课笔记

教程链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/README.md 视频链接&#xff1a;https://www.bilibili.com/video/BV1yK4y1B75J/?vd_source5d94ee72ede352cb2dfc19e4694f7622 本次视频的内容分为以下四部分&#xff1a; 目录 微调简介 微调会使…

YOLOv5涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv5中如何使用 1)iAFF加入Neck替代Concat; 💡💡💡Yolov5/Yolov7魔术师,独家首发创新(原创),适用于Yolov5、Yolov7、Yolov8等各个Yolo系列,专栏文…

灰色关联度分析详细Stata代码和说明(代码+案例数据+说明)

灰色关联度分析详细Stata代码和说明&#xff08;代码案例数据说明&#xff09; 因素分析的基本方法过去采用的主要是统计的方法&#xff0c;如回归分析&#xff0c;回归分析虽然是一种较通用的方法&#xff0c;但大都只用于少因素的、线性的。 对于多因素的&#xff0c;非线性…

漏洞分析|Cacti命令执行漏洞 (CVE-2022-46169)

1.漏洞描述 Cacti是一套基于PHP&#xff0c;MySQL&#xff0c;SNMP及RRDTool开发的网络流量监测图形分析工具&#xff0c;可为用户提供强大且可扩展的操作监控和故障管理框架。 该漏洞存在于remote_agent.php文件中&#xff0c;未经身份验证的恶意攻击者可以通过设置HTTP_变量…

HTML--表格

表格的基本结构 表格标题&#xff1a;caption 表格&#xff1a;table标签 行&#xff1a; tr标签 单元格&#xff1a;td标签 语法&#xff1a; <!DOCTYPE html> <html> <head> <title>这是一个标题</title><meta charset"utf-8"/&…

【LeetCode】19. 删除链表的倒数第 N 个结点(中等)——代码随想录算法训练营Day04

题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&a…

Python 二维平面Delaunay三角网建立

目录 一、算法概念二、代码实现三、结果示例根据二维平面内的离散点建立平面三角网。 一、算法概念 三角剖分与Delaunay剖分定义:如何把一个散点集剖分成不均匀的三角形网格,即在给定的平面点集上,生成三角形集合的过程。考虑平面点集P={p1,p2,p3,…,pn},我们希望得到三…

ROS无人机开发常见错误

飞控部分 一、解锁时飞控不闪红灯&#xff0c;无任何反应&#xff0c;地面站也无报错 解决办法&#xff1a; 打开地面站的遥控器一栏 首先检查右下角Channel Monitor是否有识别出遥控各通道的值&#xff0c;如果没有&#xff0c;检查遥控器是否打开&#xff0c;遥控器和接收…