赞
踩
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
MinIO是一种高性能的分布式对象存储系统。它是软件定义的,可在行业标准硬件上运行,并且在Apache V2许可下是100%开放源代码。
MinIO的不同之处在于,它从一开始就被设计为私有云对象存储的标准。由于MinIO是专门为仅服务对象而构建的,因此单层体系结构可在不妥协的情况下实现所有必需的功能。结果是一个同时具有性能,可伸缩性和轻量级的云原生对象服务器。
尽管MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色,但在克服与机器学习,分析和云原生应用程序工作负载相关的私有云挑战方面却独树一帜。
更多请参考官方网站:https://min.io/
- # 下载
- wget https://dl.min.io/server/minio/release/linux-amd64/minio
-
- # 授权
- chmod 755 minio
-
- #快速启动
- ./minio server ./data
-
- #后台启动
- nohup ./minio server --address 127.0.0.1:9001 ./data &
2.docker 安装
- docker pull minio/minio
- docker run -p 9000:9000 --name minio1 \
- -e "MINIO_ACCESS_KEY=minio123" \
- -e "MINIO_SECRET_KEY=minio123" \
- -v /mnt/data:/data \
- -v /mnt/config:/root/.minio \
- minio/minio server /data
到这里直接 ip+端口 访问即可
了解基本安装后学习下分布式安装吧
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
分布式Minio采用 纠删码来防范多个节点宕机和位衰减bit rot。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
分布式搭建的流程和单机搭建基本一样,Minio服务基于命令行传入的参数自动切换成单机模式还是分布式模式。
启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。
这里我采用两个节点,每个节点两块硬盘
每个节点都要执行以下命令
1.数据存储目录
- mkdir -p /minio/data1
-
- mkdir -p /minio/data2
2.配置目录
默认的配置目录是 ${HOME}/.minio
,可以使用 --config-dir
命令行选项重写。MinIO server在首次启动时会生成一个新的config.json
,里面带有自动生成的访问凭据。
mkdir -p /etc/minio
3.下载上传文件(下载请参考上面单机二进制安装链接),我这里上传到 /usr/local/minio/
mkdir -p /usr/local/minio/
4. 编写启动脚本
vim /usr/local/minio/run.sh
- #!/bin/bash
- export MINIO_ACCESS_KEY=minio
- export MINIO_SECRET_KEY=minio123
-
- /usr/local/minio/minio server --config-dir /etc/minio \
- http://192.168.80.230/minio/data1 \
- http://192.168.80.230/minio/data2 \
- http://192.168.80.231/minio/data1 \
- http://192.168.80.231/minio/data2 \
5.编辑服务脚本
vim /usr/lib/systemd/system/minio.service
- [Unit]
- Description=Minio service
- Documentation=https://docs.minio.io/
-
- [Service]
- WorkingDirectory=/usr/local/minio/
- ExecStart=/usr/local/minio/run.sh
-
- Restart=on-failure
- RestartSec=5
-
- [Install]
- WantedBy=multi-user.target
WorkingDirectory 为启动脚本目录
ExecStart 为启动脚本文件
6. 给这三个文件授权
- chmod +x /usr/local/minio/minio
-
- chmod +x /usr/local/minio/run.sh
-
- chmod +x /usr/lib/systemd/system/minio.service
7. 启动停止一些命令
- # 刷新服务文件
- systemctl daemon-reload
-
- systemctl start minio
-
- systemctl stop minio
-
- systemctl enable minio
重复7个步骤在其他节点再执行
Docker Compose允许定义和运行单主机,多容器Docker应用程序。
使用Compose,您可以使用Compose文件来配置MinIO服务。 然后,使用单个命令,您可以通过你的配置创建并启动所有分布式MinIO实例。 分布式MinIO实例将部署在同一主机上的多个容器中。 这是建立基于分布式MinIO的开发,测试和分期环境的好方法。
新建docker-compose.yaml 文件(这里为了方便先在一个centos7 下运行部署多个minio)
- version: '3.7'
-
- # starts 4 docker containers running minio server instances. Each
- # minio server's web interface will be accessible on the host at port
- # 9001 through 9004.
- services:
- minio1:
- image: minio/minio:RELEASE.2020-04-23T00-58-49Z
- volumes:
- - data1-1:/data1
- - data1-2:/data2
- ports:
- - "9001:9000"
- environment:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- command: server http://minio{1...4}/data{1...2}
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
- timeout: 20s
- retries: 3
-
- minio2:
- image: minio/minio:RELEASE.2020-04-23T00-58-49Z
- volumes:
- - data2-1:/data1
- - data2-2:/data2
- ports:
- - "9002:9000"
- environment:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- command: server http://minio{1...4}/data{1...2}
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
- timeout: 20s
- retries: 3
-
- minio3:
- image: minio/minio:RELEASE.2020-04-23T00-58-49Z
- volumes:
- - data3-1:/data1
- - data3-2:/data2
- ports:
- - "9003:9000"
- environment:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- command: server http://minio{1...4}/data{1...2}
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
- timeout: 20s
- retries: 3
-
- minio4:
- image: minio/minio:RELEASE.2020-04-23T00-58-49Z
- volumes:
- - data4-1:/data1
- - data4-2:/data2
- ports:
- - "9004:9000"
- environment:
- MINIO_ACCESS_KEY: minio
- MINIO_SECRET_KEY: minio123
- command: server http://minio{1...4}/data{1...2}
- healthcheck:
- test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
- interval: 30s
- timeout: 20s
- retries: 3
-
- ## By default this config uses default local driver,
- ## For custom volumes replace with volume driver configuration.
- volumes:
- data1-1:
- data1-2:
- data2-1:
- data2-2:
- data3-1:
- data3-2:
- data4-1:
- data4-2:
可以使用 nginx 对着4台机器进行负载均衡,具体配置自行查阅
在一台机器后创建bucket 或上传文件会自动同步到其他节点。以下上传一个图片,进行测试
- <dependency>
- <groupId>io.minio</groupId>
- <artifactId>minio</artifactId>
- <version>7.0.2</version>
- </dependency>
- import java.io.*;
- import java.security.NoSuchAlgorithmException;
- import java.security.InvalidKeyException;
-
- import org.xmlpull.v1.XmlPullParserException;
-
- import io.minio.MinioClient;
- import io.minio.errors.MinioException;
-
- /**
- * @author shuzhuo
- * @date 2020/4/28 17:11
- */
- public class FileUploader {
-
- public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
- try {
-
- String endpoint = "http://127.0.0.1:9001/";
-
- String accessKey = "minio";
-
- String secretKey = "minio123";
-
- String bucketName = "test111";
-
- String uploadFilePath = "C:\\Bing壁纸\\AbuSimbel_ROW8423253975_1920x1080.jpg";
-
- MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
-
- boolean isExist = minioClient.bucketExists(bucketName);
- if (isExist) {
- System.out.println("Bucket already exists.");
- } else {
- minioClient.makeBucket(bucketName);
- }
-
-
- File file = new File(uploadFilePath);
- if (!file.exists()) {
- System.out.println("上传文件不存在");
- }
- // 上传到服务器
- minioClient.putObject(bucketName, file.getName(), uploadFilePath, null);
-
- // 获取文件写入本地
- minioClient.getObject(bucketName, file.getName(), "D://" + file.getName());
-
-
- } catch (MinioException e) {
- System.out.println("Error occurred: " + e);
- }
- }
-
- }
贴上官方说明 :建议以高密度和高容量形式使用以下服务器配置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。