本文翻译自MinIO官网:部署MinIO(多节点多驱动器:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html)

MinIO使用纠删码( Erasure Coding)来做数据的备份和数据恢复,

先决条件

网络和防火墙

网络

分布式部署中每一个节点需要保证网络的畅通,如果是使用容器化或者编排的基础架构,可能需要额外配置网络和路由组件。

防火墙

对于Linux来说如果启用了防火墙功能,需要通过如下命令开启MinIO-Server的api端口(9000)和Minio-Server的WebUI访问端口(9001)


firewall-cmd --permanent --zone=public --add-port=9000/tcp firewall-cmd --reload

对于WebUI访问端口可参考MinIO-Server的api端口开启方式进行操作。另外需要说明的是WebUI访问端口通常可以通过启动命令或者配置文件修改为用户自定义的端口,并非固定为9001.

负载均衡

MinIO强烈建议使用负载均衡器来管理MinIOServer簇。一般来说负载均衡器应使用“最少连接数”算法来路由请求。

已知如下负载均衡器可以和MinIO很好的配合:

  • Nginx
  • HAProxy

顺序的主机名

当MinIO分布式部署的时候,需要使用“扩展表示法”来表示一系列的MinIO服务器主机:

  • 连续的主机名:minioserver1.com,minioserver2.com,minioserver3.com,minioserver4.com
  • 连续的ip:192.156.1.101,192.156.1.102,192.156.1.103,192.156.1.104

使用扩展表示法则为:

  • minioserver{1...4}.com
  • 192.168.1.10

MinIO在分布式部署的时候要求主机名必须是顺序的,当无法满足此要求的时候可以通过手动修改每一个服务器主机的 hosts 文件来添加DNS映射,从而变相支持顺序主机名。

驱动器要求

XFS格式性能最优

MinIO强烈建议使用带有XFS格式的磁盘直连JBOD阵列,这样的性能是最佳的。

  • 直连存储(DAS)的性能比网络存储(NAS,SAN,NFS)性能有显著提高。
  • 使用非XFS格式文件系统(ext4,btrfs,zfs)部署的MinIO性能往往比较地下,并且不稳定,容易发生意料之外的事情
  • RAID技术并不会带来性能的提升,并且通常会降低性能,所以不建议在MinIO分布式部署中使用RAID磁盘阵列技术。

最小IO

需要使用相同的硬盘类型(NVMe,SSD,HDD),并且它们应该具有相同的容量。此外,最小IO限制了硬盘的使用量,例如:如果部署15个10TB的启动器和1个1TB的驱动器,MinIO会限制每一个驱动器容量上限为1TB。

顺序的驱动器名

和主机名类似的,驱动器的名字也要求是顺序的,例如:

/mnt/data1,/mnt/data2,/mnt/data3,/mnt/data4

扩展表示法为:

/mnt/data{1...4}

任意迁移

MinIO不支持使用现有的MinIO任意迁移驱动器,也就是说如果一个驱动器硬盘已经被一个MinIOServer使用了,就不可以作为扩展硬盘纳入到MinIOServer集群中。

时间同步

多节点系统必须保持同步的时间和日期,以保持稳定的节点间操作和交互。 确保所有节点定期同步到同一时间服务器。

考虑

相同的硬软件环境

MinIO强烈建议所运行的环境配置尽量相同,如

硬件(CPU、 内存、主板、存储适配器)和软件(操作系统、内核、 设置、系统服务)在所有节点上保持一致。

存储容量规划

MinIO建议规划“2年+”的容量,例如,如果系统每年产生10TB的数据,那么建议部署的时候每一个节点为30TB.

推荐的操作系统

推荐使用linux来部署MinIOServer

  • RHEL8+
  • Ubuntu 18.04+

预先存在的数据

MinIO启动后所管理的硬盘驱动器应该是空的,不应预先存放任何文件。

如果之前已经有文件了, MinIO无法管理这些文件,无法通过MinIO的api或者webui浏览到预先存在的数据。

与MinIO-server的交互仅能通过如下途径:

  • S3-API(9000端口)
  • WebUI(9001端口)
  • SDK:java、C# 等

部署分布式MinIO

在每一个节点上安装MinIO

可通过RPM、DEB或者二进制文件的方式在服务器上面安装MinIO-server

创建服务文件minio.service

对于RPM和DEB方式安装,服务文件将由安装程序创建。

对于二进制方式安装需要手动创建此文件。

/usr/lib/systemd/system/ 目录下创建 minio.service 文件 ,内容参考:


[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio [Service]
WorkingDirectory=/usr/local
User=minio-user
Group=minio-user
ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
#MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
#This may improve systemctl setups where other services use `After=minio.server`
#Uncomment the line to enable the functionality
#Type=notify
#Let systemd restart this service always
Restart=always
#Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
#Specifies the maximum number of threads this process can create
TasksMax=infinity
#Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no [Install]
WantedBy=multi-user.target
#Built for ${project.name}-${project.version} (${project.name})
  • EnvironmentFile:环境文件

systemd程序在扫描的时候使用它找到的第一个文件,为了避免冲突和意外的发生,请检查minio.service文件是否在如下路径中没有重复:

  • /etc/systemd/...
  • /usr/lib/systemd/...
  • /usr/lib/systemd/system/...

默认情况下文件以用户和组身份运行,以下示例代码创建用户、组并设置可执行minio的权限,当然了数据存放的驱动器也需要赋予响应权限:


groupadd -r minio-user useradd -M -r -g minio-user minio-user chown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4

当然了,也可以使用其他的用户和组,甚至是系统管理员,只要权限没有问题就可以。

创建环境文件

环境文件就是一个配置文件,当minio.service启动的时候会读取这个文件。

在 /etc/defalt/ 下面创建 minio 文件,内容参考:


#Set the hosts and volumes MinIO uses at startup
#The command uses MinIO expansion notation {x...y} to denote a
#sequential series. #The following example covers four MinIO hosts
#with 4 drives each at the specified hostname and drive locations.
#The command includes the port that each MinIO server listens on
#(default 9000)
MINIO_VOLUMES="https://minio{1...4}.example.net:9000/mnt/disk{1...4}/minio"
#Set all MinIO server options #The following explicitly sets the MinIO Console listen address to
#port 9001 on all network interfaces. The default behavior is dynamic
#port selection.
MINIO_OPTS="--console-address :9001"
#Set the root username. This user has unrestricted permissions to
#perform S3 and administrative API operations on any resource in the
#deployment. #Defer to your organizations requirements for superadmin user name.
MINIO_ROOT_USER=minioadmin
#Set the root password #Use a long, random, unique string that meets your organizations
#requirements for passwords.
MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME
#Set to the URL of the load balancer for the MinIO deployment
#This value *must* match across all MinIO servers. If you do
#not have a load balancer, set this value to to any *one* of the
#MinIO hosts in the deployment as a temporary measure.
MINIO_SERVER_URL="https://minio.example.net:9000"

添加TLS/SSL证书

这一步是可选的

运行MinIO服务进程

分别在每一个节点上运行如下命令来启动MinIO进程:


sudo systemctl start minio.service

使用以下命令确认服务处于联机状态且正常运行:


sudo systemctl status minio.service journalctl -f -u minio.service

将minio.service添加到开机自启动:


sudo systemctl enable minio.service

访问MinIO控制台

http://ip:9001

登录账号密码为:minio_root_user,

minio_root_password

您可以使用 MinIO 控制台执行常规管理任务,例如 身份和访问管理、指标和日志监控,或 服务器配置

说明

  • 不是简单的直译,按照自己的理解渲染了部分语言
  • 可能存在错误和漏掉的地方
  • 官网本身对分布式部署讲的特别的简单
  • 如果有用,希望一键三连 =_=+

MinIO分布式部署的更多相关文章

  1. MinIO 的分布式部署

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

  2. 对象存储服务MinIO安装部署分布式及Spring Boot项目实现文件上传下载

    目录 一.MinIO快速入门 1. MinIO简介 2. CentOS7更换成阿里云镜像 3. 安装 3.1 下载 3.2 运行测试 4. 配置脚本执行文件 4.1 创建配置执行文件 4.2 执行 二 ...

  3. 三、Linux部署MinIO分布式集群

    MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...

  4. Minio分布式集群部署——Swarm

    最近研究minio分布式集群部署,发现网上大部分都是单服务器部署,而minio官方在github上现在也只提供了k8s和docker-compose的方式,网上有关与swarm启动minio集群的文章 ...

  5. MinIO分布式集群部署方式

    文章转载自:https://blog.51cto.com/u_10950710/4843738 关于分布式集群MinIo 单机Minio服务存在单点故障,如果是一个有N块硬盘的分布式Minio,只要有 ...

  6. MinIO 分布式集群搭建

    MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障. Minio 分布式模式可 ...

  7. MinIO分布式集群的扩展方案及实现

    目录 一.命令行方式扩展 1. MinIO扩展集群支持的命令语法 2. 扩容示例 二.etcd扩展方案 1. 环境变量 2. 运行多个集群 3. 示例 相关链接 MinIO 支持两种扩展方式: 通过修 ...

  8. Hadoop1 Centos伪分布式部署

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  9. ActiveMQ5.14.1+Zookeeper3.4.9高可用伪分布式部署

    本文借鉴http://www.cnblogs.com/gossip/p/5977489.html,在此基础上进行了完善,使之成为一个完整版的伪分布式部署说明,在此记录一下! 一.本文目的       ...

  10. Memcache分布式部署方案

    基础环境 其实基于PHP扩展的Memcache客户端实际上早已经实现,而且非常稳定.先解释一些名词,Memcache是danga.com的一个开源项目,可以类比于MySQL这样的服务,而PHP扩展的M ...

随机推荐

  1. \n被当成回车处理

    Regex.Escape   C# 字符串变量str 的值为"a\nb"如果直接输出显示的话,就成了:ab需要输出显示为:a\nb string str = "a\nb& ...

  2. 逍遥自在学C语言 | for循环详解

    前言 C语言中的循环结构时,for循环是最常用的一种.它允许重复执行一段代码,直到满足特定条件为止. 本文将详细介绍for循环的用法,并提供相关的可编译运行的C代码示例. 一.人物简介 第一位闪亮登场 ...

  3. Spring事件监听机制使用和原理解析

    你好,我是刘牌! 前言 好久没有更新Spring了,今天来分享一下Spring的事件监听机制,之前分享过一篇Spring监听机制的使用,今天从原理上进行解析,Spring的监听机制基于观察者模式,就是 ...

  4. go语言字符与字符串相关

    ASCII ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁 字母的一套单字节编码系统 字符 本质上来 ...

  5. 【Netty】01 - NIO

    一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道 ...

  6. 6. SpringMVC的视图

    SpringMVC 中的视图是 View 接口,视图的作用渲染数据,将模型 Model 中的数据展示给用户 SpringMVC 视图的种类很多,默认有转发视图和重定向视图 当工程引入 jstl 的依赖 ...

  7. 发布一个Visual Studio 2022 插件,可以自动完成构造函数依赖注入代码

    赖注入(DI)在开发中既是常见的也是必需的技术.它帮助我们优化了代码结构,使得应用更加灵活.易于扩展,同时也降低了各个模块之间的耦合度,更容易进行单元测试,提高了编码效率和质量.不过,手动注入依赖项也 ...

  8. Java 输入字符串,统计大写字母,小写字母,数字字符的个数

    代码如下: public static void main(String[] args) { String str = "AaFsECvcS12483fs+-*/"; int bi ...

  9. 手写call&apply&bind

    在这里对call,apply,bind函数进行简单的封装 封装主要思想:给对象一个临时函数来调用,调用完毕后删除该临时函数对应的属性 call函数封装 function pliCall(fn, obj ...

  10. 一文帮你搞定H5、小程序、Taro长列表曝光埋点

    对于很多前端同学来说,"埋点"常常是一个不愿面对却又无法逃避的话题.为什么这么说呢,相信很多前端同学都深有体会:首先埋点这个事基本是前端"独享"的,服务端基本不 ...