MinIO私有文件存储部署
MinIO私有文件存储部署
因为原项目文件使用阿里云OSS上传,现需求要部署到客户本地不可以使用外网,所以要替换文件存储方案
–MinIO文档地址
官方介绍
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等
MinIO可单点部署,可分布式集群部署,操作部署方便,可支持扩容,SDK和阿里OSS用起来差不多,刚好满足我的需求,唯一缺陷就是不支持动态扩容
Docker单节点部署
首先拉取镜像,下载最新版镜像
docker pull minio/minio
启动容器,启动端口为 9000 “-v /mnt/data:/data”,指定宿主机指向容器的存储地址,上传的文件存在这里,“server /data” 启动的命令,指定容器内部存储地址为/data
docker run -p 9000:9000 --name minio1 \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
启动成功后浏览器访问 http://{ip}:9000,登录需要accessKey和secretKey,docker容器启动默认都是 “minioadmin” ,启动后会显示
登录MinIO,web操作界面非常简洁,可对储存桶和文件进行操作
Linux单节点二进制方式部署
下载安装包,可在官方下载后上传至服务器,也可以命令下载
wget https://dl.min.io/server/minio/release/linux-amd64/minio
在安装包所在目录下,启动,指定存储未知是 /data文件夹
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
chmod +x minio
./minio server /data
启动成功,访问和操作方式与同上
Linux分布式部署
官方介绍:分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能
高可用
单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类
多硬盘多节点部署不可扩容的方式,下面是官方示例
分部署部署最少需要四个示例,不管是四个服务器,每台部署一个实例。还是一个服务器部署四个实例。
存储的文件会以n/2个节点内存分配到每个实例上,比如创建8个实例,上传的文件大小80MB,那么每个实例存在20MB
示例1: 启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令。
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \
http://192.168.1.13/export3 http://192.168.1.14/export4 \
http://192.168.1.15/export5 http://192.168.1.16/export6 \
http://192.168.1.17/export7 http://192.168.1.18/export8
示例2: 启动分布式Minio实例,4节点,每节点4块盘,需要在4个节点上都运行下面的命令。
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \
http://192.168.1.11/export3 http://192.168.1.11/export4 \
http://192.168.1.12/export1 http://192.168.1.12/export2 \
http://192.168.1.12/export3 http://192.168.1.12/export4 \
http://192.168.1.13/export1 http://192.168.1.13/export2 \
http://192.168.1.13/export3 http://192.168.1.13/export4 \
http://192.168.1.14/export1 http://192.168.1.14/export2 \
http://192.168.1.14/export3 http://192.168.1.14/export4
可扩容的方式,使用MinIO纠删码,如果想要扩容,必须使用这种方式
首次部署
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...32}/export{1...32}
扩容方式,在原命令最后一行末尾添加扩容的节点,重启集群
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...32}/export{1...32} http://host{33...64}/export{1...32}
现在整个集群就扩展了1024个磁盘,总磁盘变为2048个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,您就可以按需扩展您的集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。如上命令中,我们可以把原来的集群看做一个区,新增集群看做另一个区,新对象按每个区域中的可用空间比例放置在区域中。在每个区域内,基于确定性哈希算法确定位置。
说明: 您添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。
例如,第一个区有8个磁盘,您可以将集群扩展为16个、32个或1024个磁盘的区域,您只需确保部署的SLA是原始区域的倍数即可
HTTP方式直接访问文件
如果使用 “http://{ip}:{端口}/桶名/文件名” 的方式访问文件,会跳转到web操作界面,可以进行设置桶的权限就可以了
JAVA操作文件
官方有java的api以及示例,这里就不介绍了,链接