一二三应用开发平台文件处理设计与实现系列之7——minio多节点共享磁盘模式验证

背景

在不了解minio架构设计之前,我根据既往经验推测minio是将文件读写封装实现了一个应用系统,如要实现高可用,则需要部署两个minio节点,共享同一块磁盘。两个minio节组成一个集群,使用nginx实现负载均衡,这是一种常见的部署架构。

官方资料介绍的部署模式有两大类(https://min.io/docs/minio/linux/operations/installation.html),单节点部署和分布式部署,其中单节点又细分为单磁盘(只使用1块磁盘,不使用纠删码)和多磁盘(至少挂载4块磁盘,启用纠删码)。

在上述方案中,并不包含多节点共享同一块磁盘的模式,并且强调minio挂载的磁盘需要是干净的。

官方说明同时提到了站点复制模式,但该模式并不是共享磁盘,而是数据在多个站点同步(Data written to one site automatically replicates to the other peer site.)。
在这里插入图片描述

在了解了minio的文件高可用方案机制与原理后,还是有个疑惑,多节点共享磁盘到底是否可行?做了以下探索和验证。

共享同一块磁盘

首先尝试一种简单场景,minio部署两个节点,同享同一块磁盘。

docker run -p 10001:9000  --name minio-node1 -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data-share:/data minio/minio:RELEASE.2021-04-22T15-44-28Z server /datadocker run -p 10002:9000  --name minio-node2 -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data-share:/data minio/minio:RELEASE.2021-04-22T15-44-28Z server /data

两个节点均能启动成功。
image.png
启动日志显示正常,无警告更没有报错。

2023-11-29 11:12:09 Endpoint: http://172.17.0.3:9000  http://127.0.0.1:9000 
2023-11-29 11:12:09 
2023-11-29 11:12:09 Browser Access:
2023-11-29 11:12:09    http://172.17.0.3:9000  http://127.0.0.1:9000
2023-11-29 11:12:09 
2023-11-29 11:12:09 Object API (Amazon S3 compatible):
2023-11-29 11:12:09    Go:         https://docs.min.io/docs/golang-client-quickstart-guide
2023-11-29 11:12:09    Java:       https://docs.min.io/docs/java-client-quickstart-guide
2023-11-29 11:12:09    Python:     https://docs.min.io/docs/python-client-quickstart-guide
2023-11-29 11:12:09    JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
2023-11-29 11:12:09    .NET:       https://docs.min.io/docs/dotnet-client-quickstart-guide
2023-11-29 11:12:09 IAM initialization complete

使用控制台创建桶及上传文件、下载文件、删除文件,从两个minio看上去,数据是同步的,都正常。
对容器进行任意重启、删除、新建操作,无报错、数据能正常读取。

共享多块磁盘

上面两个minio节点共享一块磁盘通过了测试,再往前迈一步,依旧是4个minio节点,然后每个minio节点挂载4块磁盘,这4块磁盘依旧是共享的,看看纠删码机制启用的情况下,共享磁盘的模式是否会产生相互干扰和数据错乱。
执行如下命令,创建容器

docker run -p 11001:9000  --name minio1 -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data1:/data1 -v E:\dockerVolume\minio\data2:/data2 -v E:\dockerVolume\minio\data3:/data3 -v E:\dockerVolume\minio\data4:/data4 minio/minio:RELEASE.2021-04-22T15-44-28Z server /data1 /data2 /data3 /data4docker run -p 11002:9000  --name minio2 -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data1:/data1 -v E:\dockerVolume\minio\data2:/data2 -v E:\dockerVolume\minio\data3:/data3 -v E:\dockerVolume\minio\data4:/data4 minio/minio:RELEASE.2021-04-22T15-44-28Z server /data1 /data2 /data3 /data4

重复共享同一块磁盘的测试验证,结果依然正常。

非对称挂载磁盘

双节点,各挂载四块共享磁盘,仍旧正常运行。再进一步,磁盘不对称,推测应该会出问题。保持第一个节点挂载4块磁盘不变,先来尝试第二个节点挂载8块磁盘,是第1个节点的双倍关系,然后再尝试挂载6块磁盘。

docker run -p 21002:9000  --name minio2 -d --restart=always -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v E:\dockerVolume\minio\data1:/data1 -v E:\dockerVolume\minio\data2:/data2 -v E:\dockerVolume\minio\data3:/data3 -v E:\dockerVolume\minio\data4:/data4 -v E:\dockerVolume\minio\data5:/data5 -v E:\dockerVolume\minio\data6:/data6 -v E:\dockerVolume\minio\data7:/data7 -v E:\dockerVolume\minio\data8:/data8 minio/minio:RELEASE.2021-04-22T15-44-28Z server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8

直接启动报错,无限重启,提示data1磁盘已经被另外的纠删阵列使用了。

2023-11-29 14:03:52 
2023-11-29 14:03:52  You are running an older version of MinIO released 2 years ago 
2023-11-29 14:03:52  Update: Run `mc admin update` 
2023-11-29 14:03:52 
2023-11-29 14:03:52 
2023-11-29 14:03:53 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)
2023-11-29 14:03:55 
2023-11-29 14:03:55  You are running an older version of MinIO released 2 years ago 
2023-11-29 14:03:55  Update: Run `mc admin update` 
2023-11-29 14:03:55 
2023-11-29 14:03:55 
2023-11-29 14:03:55 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)
2023-11-29 14:03:57 
2023-11-29 14:03:57  You are running an older version of MinIO released 2 years ago 
2023-11-29 14:03:57  Update: Run `mc admin update` 
2023-11-29 14:03:57 
2023-11-29 14:03:57 
2023-11-29 14:03:58 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)
2023-11-29 14:04:01 
2023-11-29 14:04:01  You are running an older version of MinIO released 2 years ago 
2023-11-29 14:04:01  Update: Run `mc admin update` 
2023-11-29 14:04:01 
2023-11-29 14:04:01 
2023-11-29 14:04:02 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)
2023-11-29 14:04:06 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)
2023-11-29 14:04:09 
2023-11-29 14:04:09  You are running an older version of MinIO released 2 years ago 
2023-11-29 14:04:09  Update: Run `mc admin update` 
2023-11-29 14:04:09 
2023-11-29 14:04:09 
2023-11-29 14:04:10 ERROR Unable to initialize backend: /data1 disk is already being used in another erasure deployment. (Number of disks specified: 8 but the number of disks found in the 1st disk's format.json: 4)

挂载8块都出错了,后面就没必要验证挂载6块磁盘了。

结论

通过以上验证工作,基本符合原先的推测,即可以多个minio节点共享磁盘,将minio视为“应用”,将共享的磁盘视为“数据库”,几个minio节点组成集群,通过外置的负载均衡软件如Nginx实现高可用。
需要保持每个节点挂载磁盘的数量一致,可以只挂载一块磁盘,也可以挂载一组(>=4)磁盘,启用纠删码。

开源平台资料

平台名称:一二三开发平台
简介: 企业级通用开发平台
设计资料:csdn专栏
开源地址:Gitee
开源协议:MIT
欢迎收藏、点赞、评论,你的支持是我前行的动力。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python下载安装与环境配置

本文将指导您完成Python的下载、安装以及环境配置过程,确保您在编写和运行Python代码时能够获得最佳体验。我们将提供详细的步骤和代码示例,帮助您顺利完成设置。 一、Python下载与安装 访问Python官网:首先,您需要访问Python的官…

通俗易懂三大范式

通俗易懂三大范式 第一范式说的是每个字段不可再分 第二范式说的是不能存在部分依赖(不能由联合主键的部分就可以推出其他字段,必须整个联合主键才能推出其他字段) 第三范式说的是不能存在间接依赖(A(主键)→B,B→C…

学习嵌入式第十五天之结构体

用变量a给出下面的定义 a) 一个整型数(An integer) //int a;b) 一个指向整型数的指针(A pointer to an integer) //int *a;c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a poin…

前端Web开发

安装flask框架 pip install flask 导入flask模块 from flask import Flask 【可能遇到的问题】 出现了如下警告: WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.You should consider upgrading via the D:\Python\python…

【Tomcat与网络2】一文理解Servlet是怎么工作的

在前面,我们研究了如何用idea来启动一个Servlet程序,今天我们就再来看一下Servlet是如何工作的。 目录 1.Servlet 介绍 2.Servlet 容器工作过程 3.Servlet的扩展 不管是电脑还是手机浏览器,发给服务端的就是一个 HTTP 格式的请求&#xf…

力扣hot100 划分字母区间 贪心 思维 满注释版

Problem: 763. 划分字母区间 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 代码随想录 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) Code class Solution {public List<Integer> partitionLabels(String s){// 创建哈希…

基于SpringBoot的高校社团管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是何时&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2…

Activiti工作流引擎

一、工作流介绍&#xff1a; 1.1 概念&#xff1a; 工作流(Workflow)&#xff0c;就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程&#xff0c;从而实现某个预期的业务目标&#xff0c;或…

CRM系统能为企业解决5大痛点

客户关系管理&#xff08;CRM&#xff09;系统是企业最有价值的工具之一&#xff0c;但也可能是管理最复杂的工具之一。如果运用得当&#xff0c;CRM系统将帮助企业提高效率&#xff0c;实现增长。一项研究报告指出&#xff0c;客户关系管理工具可将销售额提高 29%&#xff0c;…

LoadRunner从零开始之LoadRunner脚本语言基础

在用LoadRunner 做性能测试的过程中&#xff0c;编写脚本是 一项非常重要的工作。不夸张地说&#xff0c;一个脚本的好坏关系到性能测试的成败。“ 工欲善其事&#xff0c;必先利其器” &#xff0c; 在本章我们将学习LoadRunner 脚本语言以及脚本的开发技巧。 下面 我 们 要 通…

【网络】:网络套接字(TCP)

网络套接字&#xff08;TCP&#xff09; 一.编写TCP服务器二.编写Tcp客户端三.多进程四.多线程版本五.线程池版完整源代码六.使用示例 一.编写TCP服务器 1.先搭一个架子 2.创建sockfd domain参数依然是AF_INET(因为是IPV4) type方式选择SOCK_STREAM&#xff08;提供可靠的连接…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…