【掘金者说】分布式文件系统选型

4,334 阅读3分钟

文件存储有本地存储,对象存储OSS(阿里云七牛云、腾讯云等)、fastDFS、mongodb,现在,来讲述一下minio。

简介

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
官方文件地址:docs.min.io/cn/
获取minio地址:dl.min.io/server/mini…

功能体现

  • 数据保护
  • 高可用
  • 限制
  • 一致性
  • Lambda计算
  • 加密和防篡改
  • 可对接后端存储
  • sdk支持
  • Amazon S3兼容

集群规划

单节点

图纸,暂略

多节点

图纸,暂略

分布式

图纸,暂略

分布式集群搭建

集群规划

生产环境建议最少4节点,开发环境使用单机版本即可。

本集群由4台服务器构成(官方推荐集群最小4台服务器),每个服务器上挂载4个磁盘目录,最小数据挂载点为4个。使用操作系统CentOS 7.6,每台机器服务器配置。目前,使用的是虚拟机构建来模拟分布式文件系统

修改主机名称及host(所有节点)

hostnamectl set-hostname minio1
hostnamectl set-hostname minio2
hostnamectl set-hostname minio3
hostnamectl set-hostname minio4
cat >> /etc/hosts <<EOF
192.168.180.128 minio1
192.168.180.129 minio2
192.168.180.130 minio3
192.168.180.131 minio4
EOF

系统最大文件数修改(所有节点)

echo "*   soft    nofile  65535" >> /etc/security/limits.conf
echo "*   hard    nofile  65535" >> /etc/security/limits.conf

目录创建(所有节点)

  • 启动脚本及二进制文件目录 run
  • 数据存储目录 data
  • 配置文件目录/etc/minio
mkdir -p /data/minio/{run,data} && mkdir -p /etc/minio

集群启动文件(所有节点)

vim /data/minio/run/run.sh
  • MINIO_ACCESS_KEY:用户名,长度最小是5个字符
  • MINIO_SECRET_KEY:密 码,长度最小是8个字符
  • –config-dir:指定集群配置文件目录
#!/bin/bash
export MINIO_ACCESS_KEY=juejinzheshuo
export MINIO_SECRET_KEY=juejinzheshuo

/data/minio/run/minio server --config-dir /etc/minio \
http://192.168.180.128/data/minio/data \
http://192.168.180.129/data/minio/data \
http://192.168.180.130/data/minio/data \
http://192.168.180.131/data/minio/data \

minio.service(所有节点)

  • WorkingDirectory:二进制文件目录
  • ExecStart:指定集群启动脚本
cat > /usr/lib/systemd/system/minio.service <<EOF
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/data/minio/run/
ExecStart=/data/minio/run/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

二进制文件(所有节点)

将minio二进制文件上传到/data/minio/run目录。minio二进制文件,获取minio地址:dl.min.io/server/mini…

权限修改(所有节点)

给所有涉及到的文件或目录添加权限

  • service文件
  • 二进制文件
  • 集群启动脚本
chmod +x /usr/lib/systemd/system/minio.service 
&& chmod +x /data/minio/run/minio 
&& chmod +x /data/minio/run/run.sh

其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本 参考官方地址: github.com/minio/minio…

启动集群(所有节点)

systemctl daemon-reload
systemctl enable minio && systemctl start minio

对应常见命令,如下: systemctl start | stop | enable | status minio

代理集群

生产环境需要使用Nginx将集群地址进行代理,对外统一入口

upstream minio{
        server 192.168.180.128:9000;
        server 192.168.180.129:9000;
        server 192.168.180.130:9000;
        server 192.168.180.131:9000;
}
server {
        listen 9000;
        server_name minio;
        location / {
                proxy_pass http://minio;
                proxy_set_header Host $http_host;
                client_max_body_size 1000m;
        }
}

访问测试

浏览器访问minio集群代理地址+9000端口,用户名密码为上文中启动文件run.sh中我们设置的

问题与思考:它的运行机制或者说是原理如何?在分布式拓展方面是如何扩容的呢?上图文件是否具备实时性或者文件丢失的情况呢?文件存储是否是秒级的呢?

演示环境

下一篇【掘金者说】minio使用nginx代理配置https

参考文献

分布式MinIO快速入门指南

Minio分布式集群搭建

MinIO客户端快速入门指南

MinIO 的分布式部署

MinIO 分布式集群搭建

常见分布式文件存储介绍、选型比较、架构设计

Pig系统演示文件存储Minio