MinIO分布式集群的扩展方案及实现
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服务记录

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分布式集群的扩展方案及实现的更多相关文章
- MinIO 分布式集群搭建
MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障. Minio 分布式模式可 ...
- 三、Linux部署MinIO分布式集群
MinIO的官方网站非常详细,以下只是本人学习过程的整理 一.MinIO的基本概念 二.Windows安装与简单使用MinIO 三.Linux部署MinIO分布式集群 四.C#简单操作MinIO 一. ...
- Minio分布式集群部署——Swarm
最近研究minio分布式集群部署,发现网上大部分都是单服务器部署,而minio官方在github上现在也只提供了k8s和docker-compose的方式,网上有关与swarm启动minio集群的文章 ...
- MinIO分布式集群部署方式
文章转载自:https://blog.51cto.com/u_10950710/4843738 关于分布式集群MinIo 单机Minio服务存在单点故障,如果是一个有N块硬盘的分布式Minio,只要有 ...
- minIO分布式集群搭建+nginx负载均衡
暂时关闭防火墙 systemctl stop firewalld 查看防火墙状态 systemctl status firewalld 赋予最高权限 chmod +x minio !/bin/bash ...
- Redis分布式集群几点说道
原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html Redis分布式集群几点说道 Redis数据量日益 ...
- redis高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- 基于Hadoop分布式集群YARN模式下的TensorFlowOnSpark平台搭建
1. 介绍 在过去几年中,神经网络已经有了很壮观的进展,现在他们几乎已经是图像识别和自动翻译领域中最强者[1].为了从海量数据中获得洞察力,需要部署分布式深度学习.现有的DL框架通常需要为深度学习设置 ...
- Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
随机推荐
- [Android 搞机]Twrp 中清除 data 和搞机清除的区别
近日搞机,用上了 Havoc OS.突然发现设置里有个"加密手机",于是手贱点了进去.手机立刻重启了,然后卡在开机第一屏.遂进 Twrp 高级清除中清除了 data 并重新刷入.重 ...
- winform导入excel或者csv
if (txt01.Text != "") { this.lbzhantie.Items.Clear(); this.dtzhuanhuo.Rows.Clear(); if (tx ...
- 微信小程序:Navigator导航组件
导航组件:类似超链接标签. url:要跳转的页面路径,可以放绝对路径,也可以放相对路径,绝对路径指从pages作为根目录开始找到你要的页面. 找到你要找的页面的相对地址的方法:在vscode中,该页面 ...
- javaMail (java代码发送邮件)
第一在邮件账户设置开启以下两个 需要发送短信获取 授权码. 代码如下: package com.hjb.javaMail; import javax.mail.*; import javax.mai ...
- 分布式文件系统FastDFS简介、搭建、与SpringBoot整合实现图片上传
之前大学时搭建过一个FastDFS的图片服务器,当时只是抱着好奇的态度搭着玩一下,当时搭建采用了一台虚拟机,tracker和storage服务在一台机器上放着,最近翻之前的博客突然想着在两台机器上搭建 ...
- matplotlib工具栏源码探析三(添加、删除自定义工具项)
转: matplotlib工具栏源码探析三(添加.删除自定义工具项) matplotlib工具栏源码探析二(添加.删除内置工具项)探讨了工具栏内置工具项的管理,除了内置工具项,很多场景中需要自定义工具 ...
- OAID 文档与获取DemoAPK
OAID 查看器 接入 OAID SDK 的 Demo 工程 完整项目地址 Github 文档与 Demo 下载 release 提供 APK 下载 支持设备见 说明文档 常见问题见 F&Q文 ...
- 致被职场PUA的打工人
作为打工人,除了每天面对着各种繁琐的工作,还要被动接受上级或多或少的PUA,实在是难上加难,甚至有人想不开而自杀.网络上最近流行了一个词:职场PUA,赋予了这种现象一个正式的名字. 职场PUA指的是职 ...
- slickgrid ( nsunleo-slickgrid ) 4 解决点击不切换单元格的问题
slickgrid ( nsunleo-slickgrid ) 4 解决点击不切换单元格的问题 上一次解决了列选择和区域选择冲突的问题,昨天太忙了,并且要陪小宝早点睡觉,就啥也没有赶上.今天上班面试. ...
- AbstractQueuedSynchronizer之AQS
一.可重入锁 可参考:可重入锁和递归锁 1,定义 指的是同一线程外层函数获得锁后,再进入该线程的内层方法会自动获取锁(前提:锁对象是同一个对象). Java中的ReentranLock(显示锁)和Sy ...