MinIO对象存储服务部署及使用

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。

它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,

例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,

而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

###在Docker中运行MinIO单点模式:

MinIO自定义Access和Secret密钥

要覆盖MinIO的自动生成的密钥,您可以将Access和Secret密钥设为环境变量。 MinIO允许常规字符串作为Access和Secret密钥。

docker run -d -p 9090:9000 --name minio1 \

-e "MINIO_ACCESS_KEY=minio" \

-e "MINIO_SECRET_KEY=minio123" \

-v /opt/minio/data:/data \

-v /opt/minio/config:/root/.minio \

minio/minio server /data

启动和停止容器

启动容器,你可以使用 docker start 命令。

docker start <container_id>

停止一下正在运行的容器, 使用 docker stop 命令。

docker stop <container_id>

MinIO容器日志

获取MinIO日志,使用 docker logs 命令。

docker logs <container_id>

监控MinioDocker容器

监控MinIO容器使用的资源,使用 docker stats 命令.

docker stats <container_id>

 

###Minio纠删码

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。

即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。

 

什么是纠删码erasure code?

纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。

这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),

你仍可以从剩下的盘中的数据进行恢复,是不是很NB,感兴趣的同学请翻墙google。

 

为什么纠删码有用?

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。

而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,

通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。

 

什么是位衰减bit rot保护?

位衰减又被称为数据腐化Data Rot、无声数据损坏Silent Data Corruption,是目前硬盘数据的一种严重数据丢失问题。

硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接咔咔宕了还危险。

不过不用怕,Minio纠删码采用了高速 HighwayHash 基于哈希的校验和来防范位衰减。

 

Minio纠删码

1. 前提条件:

安装Minio

2. 以纠删码模式运行Minio

示例: 使用Minio,在12个盘中启动Minio服务。

minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8 /data9 /data10 /data11 /data12

示例: 使用Minio Docker镜像,在8块盘中启动Minio服务。

docker run -p 9000:9000 --name minio \

-v /mnt/data1:/data1 \

-v /mnt/data2:/data2 \

-v /mnt/data3:/data3 \

-v /mnt/data4:/data4 \

-v /mnt/data5:/data5 \

-v /mnt/data6:/data6 \

-v /mnt/data7:/data7 \

-v /mnt/data8:/data8 \

minio/minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8

3. 验证是否设置成功

你可以随意拔掉硬盘,看Minio是否可以正常读写。

 

###分布式MinIO快速入门 Slack Go Report Card Docker Pulls

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

 

分布式Minio有什么好处?

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

 

数据保护

分布式Minio采用 erasure code来防范多个节点宕机和位衰减bit rot。

 

分布式Minio至少需要4个节点,使用分布式Minio自动引入了纠删码功能。

 

高可用

单机Minio服务存在单点故障,相反,如果是一个N节点的分布式Minio,只要有N/2节点在线,你的数据就是安全的。不过你需要至少有N/2+1个节点 Quorum 来创建新的对象。

例如,一个8节点的Minio集群,每个节点一块盘,就算4个节点宕机,这个集群仍然是可读的,不过你需要5个节点才能写数据。

 

限制

分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了Minio的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,

你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。

注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块盘。比如,你可以使用2个节点,每个节点4块盘,也可以使用4个节点,每个节点两块盘,诸如此类。

 

一致性

Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。

如果你了解Minio单机模式的搭建的话,分布式搭建的流程基本一样,Minio服务基于命令行传入的参数自动切换成单机模式还是分布式模式。

1. 前提条件

安装Minio

2. 运行分布式Minio

启动一个分布式Minio实例,你只需要把硬盘位置做为参数传给minio server命令即可,然后,你需要在所有其它节点运行同样的命令。

注意

分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行minio server命令之前,

先将access秘钥和secret秘钥export成环境变量。

分布式Minio使用的磁盘里必须是干净的,里面没有数据。

下面示例里的IP仅供示例参考,你需要改成你真实用到的IP和文件夹路径。

分布式Minio里的节点时间差不能超过3秒,你可以使用NTP 来保证时间一致。

在Windows下运行分布式Minio处于实验阶段,请悠着点使用。

示例1: 启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令。

GNU/Linux 和 macOS

Copy

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

分布式Minio,8节点,每个节点一块盘

示例2: 启动分布式Minio实例,4节点,每节点4块盘,需要在4个节点上都运行下面的命令。

GNU/Linux 和 macOS

 

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

3. 验证

验证是否部署成功,使用浏览器访问Minio服务或者使用 mc。多个节点的存储容量和就是分布式Minio的存储容量。

###使用TLS安全的访问Minio服务

本文,我们讲介绍如何在Linux和Windows上配置Minio服务使用TLS。

1. 前提条件

下载Minio server 这里

2. 配置已存在的证书

如果你已经有私钥和公钥证书,你需要将它们拷贝到Minio的config/certs文件夹,分别取名为private.key 和 public.crt。

如果这个证书是被证书机构签发的,public.crt应该是服务器的证书,任何中间体的证书以及CA的根证书的级联。

3. 生成证书

Linux

Minio在Linux只支持使用PEM格式的key/certificate。

使用 Let's Encrypt

更多信息,请访问 这里

使用 generate_cert.go (self-signed certificate)

你需要下载 generate_cert.go,它是一个简单的go工具,可以生成自签名的证书,不过大多数情况下用着都是木有问题的。

generate_cert.go 已经提供了带有DNS和IP条目的SAN证书:

go run generate_cert.go -ca --host "10.10.0.3"

使用 OpenSSL:

生成私钥:

openssl genrsa -out private.key 2048

生成自签名证书:

openssl req -new -x509 -days 3650 -key private.key -out public.crt -subj "/C=US/ST=state/L=location/O=organization/CN=domain"

 

4. 安装第三方CAs

Minio可以配置成连接其它服务,不管是Minio节点还是像NATs、Redis这些。如果这些服务用的不是在已知证书机构注册的证书,

你可以让Minio服务信任这些CA,怎么做呢,将这些证书放到Minio配置路径下(~/.minio/certs/CAs/ Linux ).

###使用Docker Compose部署MinIO

Docker Compose允许定义和运行单主机,多容器Docker应用程序。

使用Compose,您可以使用Compose文件来配置MinIO服务。 然后,使用单个命令,您可以通过你的配置创建并启动所有分布式MinIO实例。

分布式MinIO实例将部署在同一主机上的多个容器中。 这是建立基于分布式MinIO的开发,测试和分期环境的好方法。

1. 前提条件

熟悉 Docker Compose.

Docker已经在本机安装,从这里下载相关的安装器。

2. 在Docker Compose上运行分布式MinIO

在Docker Compose上部署分布式MinIO,请下载docker-compose.yaml到你的当前工作目录。Docker Compose会pull MinIO Docker Image,所以你不需要手动去下载MinIO binary。然后运行下面的命令

GNU/Linux and macOS

docker-compose pull

docker-compose up

Windows

docker-compose.exe pull

docker-compose.exe up

现在每个实例都可以访问,端口从9001到9004,请在浏览器中访问http://127.0.0.1:9001/

 

注意事项

默认情况下Docker Compose file使用的是最新版的MinIO server的Docker镜像,你可以修改image tag来拉取指定版本的MinIO Docker image.

默认情况下会创建4个minio实例,你可以添加更多的MinIO服务(最多总共16个)到你的MinIO Comose deployment。添加一个服务

复制服务定义并适当地更改新服务的名称。

更新每个服务中的命令部分。

更新要为新服务公开的端口号。 另外,请确保分配给新服务的端口尚未使用。

关于分布式MinIO的更多资料,请访问这里.

Docker compose file中的MinIO服务使用的端口是9001到9004,这允许多个服务在主机上运行。

示例:docker-compose.yaml

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.2019-12-19T22-52-26Z

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.2019-12-19T22-52-26Z

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.2019-12-19T22-52-26Z

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.2019-12-19T22-52-26Z

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:

 

https://docs.min.io/cn/minio-quickstart-guide.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章