MinIO 支持两种扩展方式:

  • 通过修改命令行,在命令行上指定新的集群集来扩展
  • 通过引入第三方组件etcd,在不动原有集群的基础上实现动态扩展方案

一、命令行方式扩展

MinIO 支持通过在命令行上指定新的集群集来扩展分布式集群,多个节点的存储容量和就是分布式MinIO的存储容量。

1. MinIO扩展集群支持的命令语法

支持扩容的命令行如下:

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...m}/export{1...m} http://host{n...z}/export{1...m}

注意:针对此语法,推荐使用连续的节点IP。

2. 扩容示例

假如,我们的初始集群为

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...4}/export{1...16}

那么,集群扩容命令行如下:

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...4}/export{1...16} http://host{5...8}/export{1...16}

现在整个集群就扩展了64个磁盘,总磁盘变为128个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,就可以按需扩展集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。如上命令中,我们可以把原来的集群看做一个集群池,新增集群看做另一个集群池,新对象按每个集群池中的可用空间比例放置在集群池中。在每个集群池内,基于确定性哈希算法确定位置。

注意: 添加的每个集群池必须具有与原始集群池相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。 例如,第一个集群池有8个磁盘,就可以将集群扩展为16个、32个或1024个磁盘的集群池,只需确保部署的SLA是原始集群池的倍数即可。

注:命令行方式扩展的集群,各个节点都能访问到数据,每块硬盘都存在相同的 bucket,但上传的数据并不是都存在于每块硬盘上。

二、etcd扩展方案

etcd 用于存储桶DNS服务记录

etcd简介及集群安装部署使用

1. 环境变量

MINIO_ETCD_ENDPOINTS

这是您要用作MinIO联合后端的etcd服务器的逗号分隔列表。 在整个联合部署中,这应该是相同的,即联合部署中的所有MinIO实例都应使用相同的 etcd后端。

MINIO_DOMAIN

这是用于联合设置的顶级域名。理想情况下,该域名应解析为 在所有联合MinIO实例之前运行的负载均衡器。域名用于创建etcd的子域条目。对于 例如,如果域名设置为 domain.com,水桶 bucket1,bucket2 将作为访问 bucket1.domain.com 和 bucket2.domain.com。

MINIO_PUBLIC_IPS

这是用逗号分隔的IP地址列表,此MinIO实例上创建的存储桶将解析为这些IP地址。例如, 可以 bucket1 在访问当前MinIO实例上创建的存储区 bucket1.domain.com,并且DNS条目 bucket1.domain.com 将指向中设置的IP地址MINIO_PUBLIC_IPS。

注意:

  • 这个字段在独立和纠删码MinIO服务器部署时是必需的,以启用联邦模式。
  • 对于分布式部署,此字段是可选的。如果没有在联合设置中设置此字段,则使用传递给MinIO服务器启动的主机的IP地址,并将其用于DNS条目。

2. 运行多个集群

集群1

export MINIO_ETCD_ENDPOINTS="http://remote-etcd1:2379,http://remote-etcd2:4001"
export MINIO_DOMAIN=domain.com
export MINIO_PUBLIC_IPS=44.35.2.1,44.35.2.2,44.35.2.3,44.35.2.4
minio server http://rack{1...4}.host{1...4}.domain.com/mnt/export{1...32}

集群2

export MINIO_ETCD_ENDPOINTS="http://remote-etcd1:2379,http://remote-etcd2:4001"
export MINIO_DOMAIN=domain.com
export MINIO_PUBLIC_IPS=44.35.1.1,44.35.1.2,44.35.1.3,44.35.1.4
minio server http://rack{5...8}.host{5...8}.domain.com/mnt/export{1...32}

在此配置中,你可以看到 MINIO_ETCD_ENDPOINTS 指向管理MinIO配置的etcd后端。该后端管理MinIO config.json 和 存储桶DNS SRV记录。MINIO_DOMAIN 表示存储桶的域名后缀,用于通过DNS解析存储桶。例如,如果您有一个像mybucket这样的bucket,那么客户机现在可以使用 mybucket.domain.com 直接将其自身解析到正确的集群。MINIO_PUBLIC_IPS 指向可以访问每个集群的公共IP地址,这对于每个集群是唯一的。

注意:mybucket只存在于一个集群cluster1或cluster2中,这是随机的,由domain.com的解析方式决定,如果存在循环DNS,domain.com则将随机选择哪个群集提供存储桶。

注:etcd方式扩展的集群,上传到某个集群池的数据,虽然其它集群池也可访问到,但 bucket 和 数据 只存在于上传到的集群池中。

3. 示例

#!/bin/sh

function start() {
export MINIO_ETCD_ENDPOINTS="http://192.168.199.140:2379,http://192.168.199.141:2379,http://192.168.199.142:2379"
export MINIO_DOMAIN=domain.com
export MINIO_PUBLIC_IPS=192.168.199.140,192.168.199.141 export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin nohup /opt/minio/minio server http://192.168.199.14{0...1}/data/minio/export{1...4} \
> /opt/minio/minio.log 2>&1 &
# > /dev/null 2>&1 &
}
NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
if [ "start" = $1 ]; then
if [ 0 -eq $NUM ]; then
start
fi
elif [ "restart" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID | start
else
start
fi
elif [ "stop" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID
fi
else
echo "No sush command '$1'"
fi

扩展

#!/bin/sh

function start() {
export MINIO_ETCD_ENDPOINTS="http://192.168.199.140:2379,http://192.168.199.141:2379,http://192.168.199.142:2379"
export MINIO_DOMAIN=domain.com
export MINIO_PUBLIC_IPS=192.168.199.142,192.168.199.143 export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin nohup /opt/minio/minio server http://192.168.199.14{2...3}/data/minio/export{1...4} \
> /opt/minio/minio.log 2>&1 &
# > /dev/null 2>&1 &
}
NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
if [ "start" = $1 ]; then
if [ 0 -eq $NUM ]; then
start
fi
elif [ "restart" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID | start
else
start
fi
elif [ "stop" = $1 ]; then
if [ 0 -ne $NUM ]; then
kill -9 $ID
fi
else
echo "No sush command '$1'"
fi

相关链接

etcd简介及集群安装部署使用

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

MinIO分布式集群的扩展方案及实现的更多相关文章

  1. MinIO 分布式集群搭建

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

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

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

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

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

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

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

  5. minIO分布式集群搭建+nginx负载均衡

    暂时关闭防火墙 systemctl stop firewalld 查看防火墙状态 systemctl status firewalld 赋予最高权限 chmod +x minio !/bin/bash ...

  6. Redis分布式集群几点说道

    原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html  Redis分布式集群几点说道 Redis数据量日益 ...

  7. redis高可用分布式集群

    一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...

  8. 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建

    1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...

  9. Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

随机推荐

  1. vue路由理解

    vue路由:就是一个菜单的概念比如说有一个菜单栏,菜单栏上有很多按钮,当你点击一个按钮时会出现不同的页面,这就是vue路由

  2. UML类图介绍&类的六大关系

    UML类图介绍&类的六大关系 官方定义 UML(统一建模语言),是一种用于软件系统分析和设计的语言工具,用于帮助软件开发人员进行思考和记录思路的方式 UML 图形化的语言 基本介绍 UML图: ...

  3. DOS打开方式

    一.CMD窗口 Ⅰ.普通身份 按下键盘组合键:Windows + R --> 出现'运行'窗口,在'打开'的输入框中输入'cmd' --> 点击确定 打开'开始'菜单 --> 找到' ...

  4. 通过golang小案例,了解golang程序常见机制

    目录 代码理解及纠错 1.defer和panic执行先后顺序 2.for循环元素副本问题 3.slice追加元素问题 4.返回值命名问题 5.用new初始化内置类型问题 6.切片append另外一个切 ...

  5. 我与FreeBSD 的故事之二

    那些人的丑恶嘴脸使我发笑,我愈发远离所谓的社区与论坛.电视剧<武林外传>说的好:有人的地方就有江湖,江湖从未走远,从未改变.社区中的冲突很少是技术层面的,按照老话说睿智的人很少发表自己的见 ...

  6. 安装VMTools失败的三类解决方法(Windows、Linux、MacOs)

    前言 写这篇笔记的原因,是前几天在虚拟机 Vmware 中重新安装了几个操作系统,突然发现 VMTools 这个工具成了一个特殊的问题,以前还没有发现,因为通常它就给你自动安装了.但是大多数时候也是需 ...

  7. RabbitMQ 入门 (Go) - 2. 发布和接收消息

    本文我将使用 Go 语言在 RabbitMQ 上发布和接收消息. Go 的标准库本身并没有 RabbitMQ 的原生绑定,但是有一个第三方库确能够支持 RabbitMQ,它的源码在 https://g ...

  8. (5)MySQL进阶篇SQL优化(优化数据库对象)

    1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性 ...

  9. [模拟]P1046 陶陶摘苹果

    陶陶摘苹果 ## 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试 ...

  10. Docker系列——InfluxDB+Grafana+Jmeter性能监控平台搭建(二)

    在上一篇博文中,主要是讲了InfluxDB的配置,博文链接:https://www.cnblogs.com/hong-fithing/p/14453695.html,今天来分享下Jmeter的配置. ...