MINIO 了解及使用

简介

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

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

什么是删吗纠错

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

为什么删码纠错有用

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。

在 Docker 中运行 MinIO 单点模式

MinIO 自定义Access 和 Secret 密钥

$ mkdir -p minio/{data,config}

$ sudo docker run -itd -p 6000:9000 --name minio-server -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=12345678" -v /home/ub/minio/data:/data -v /home/ub/minio/config:/root/.minio minio/minio server /data

$ sudo netstat -tnlp | grep 6000

MINIO 了解及使用

MINIO 了解及使用

Docker 多磁盘方式运行

$ sudo docker run -p 8800: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

分布式运行分布式 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个节点上都运行下面的命令。

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集群,命令如下:

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

MinIO 支持通过命令,指定新的集群来扩展现有的集群(纠删码模式),命令如下:

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是原始区域的倍数即可。

配置 SSL 证书

最简单的方式就是在 config/certs/  目录下配置 private.key  public.crt 即可,如果你已经有私钥和公钥证书,你需要将它们拷贝到Minio的config/certs文件夹,分别取名为private.key 和 public.crt。

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

客户端操作

部署客户端

$ wget https://dl.minio/client/mc/release/linux-amd64/mc
$ chmod +x mc
$ mv mc /usr/local/bin

配置客户端

# 查看所有服务配置信息
$ mc config host ls
# 添加配置
$ mc config host add minio-server http://ip:9000 admin 12345678
# 或者密码不通过明文显示
$ mc config host add minio-server http://ip:9000 admin
# 查看具体服务信息
$ mc admin info minio-server
# 移出
$ mc config host remove minio-server

Bucket 管理

# 查看所有的 bucket
$ mc ls minio-server
# 查看具体 bucket 下的文件信息
$ mc ls minio-server/bucket01
# 下载文件到本地目录
$ mc cp minio-server/bucket01/a.txt ~/Data
# 删除文件
$ mc rm minio-server/bucket01/a.txt
# 将本地文件上传
$ mc cp test.json minio-server/bucket01

# 新建 bucket
$ mc mb minio-server/bucket03
# 删除 bucket
$ mc rb minio-server/bucket03
# 如果 bucket含有文件,强制删除
$ mc rb --force minio-server/bucket01
# 查看占用容量
$ mc du minio-server
# 查看具体 bucket 占用容量
$ mc du minio-server/bucket01

用户管理

# 新建用户
$ mc admin user add minio-server user01
# 查看所有用户
$ mc admin user list minio-server
# 禁用用户
$ mc admin user disable minio-server user01
# 启用用户
$ mc admin user enable minio-server user01
# 查看用户详细信息
$ mc admin user info minio-server user01
# 删除用户
$ mc admin user remove minio-server user01

策略管理

# 查看所有的策略
$ mc admin policy list minio-server
consoleAdmin
diagnostics
readonly
readwrite
writeonly

# 查看具体策略信息
$ mc admin policy info minio-server readonly
{
 "Version": "2012-10-17",
 "Statement": [
  {
   "Effect": "Allow",
   "Action": [
    "s3:GetBucketLocation",
    "s3:GetObject"
   ],
   "Resource": [
    "arn:aws:s3:::*"
   ]
  }
 ]
}

Effect 是否允许
Action 操作
Resource 资源

测试

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket02"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket02/*"
            ]
        }
    ]
}
# 添加决策
$ mc admin policy add minio-server bucket02-admin-role test.json
# 给用户绑定决策
$ mc admin policy set minio-server bucket02-admin-role user=user02
$ mc admin user info minio-server user02
# 解除决策绑定
$ mc admin policy unset minio-server bucket02-admin-role user=user02

关于 Action

"Action":[
    "s3:GetBubketLocation","s3:ListBucket"
],
"Action":[
    "s3:GetObject","s3:PutObject","s3:DeleteObject"
]
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!