上海 建站,侨联网站建设方案,中文官网资源,怎么建设手机网站分布式文件系统应用场景
互联网海量非结构化数据的存储需求电商网站#xff1a;海量商品图片视频网站#xff1a;海量视频文件网盘 : 海量文件社交网站#xff1a;海量图片
1. Minio介绍
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存…分布式文件系统应用场景
互联网海量非结构化数据的存储需求电商网站海量商品图片视频网站海量视频文件网盘 : 海量文件社交网站海量图片
1. Minio介绍
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口非常适合于存储大容量非结构化的数据例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等而一个对象文件可以是任意大小从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合类似 NodeJS, Redis 或者 MySQL。
官网地址 中文官网地址 对象存储服务Object Storage ServiceOSS是一种海量、安全、低成本、高可靠的云存储服务适合存放任意类型的文件。容量和处理能力弹性扩展多种存储类型供选择全面优化存储成本。 对于中小型企业如果不选择存储在云那么 Minio 是个不错的选择麻雀虽小五脏俱全。当然Minio 除了直接作为对象存储使用还可以作为云上对象存储服务的网关层无缝对接到 Amazon S3、MicroSoft Azure。 在中国阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品。
2. Minio优点 部署简单: 一个single二进制文件即是一切还可支持各种平台。 minio支持海量存储可按zone扩展(原zone不受任何影响)支持单个对象最大5TB; 兼容Amazon S3接口充分考虑开发人员的需求和体验; 低冗余且磁盘损坏高容忍标准且最高的数据冗余系数为2(即存储一个1M的数据对象实际占用 磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的而不是基于整个存储卷的。 读写性能优异
2. MiNiO的基础概念
Object存储到 Minio 的基本对象如文件、字节流Anything…Bucket用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而言就相当于一个存放文件的顶层文件夹Drive即存储数据的磁盘在 MinIO 启动时以参数的方式传入。Minio 中所有的对象数据都会存储在 Drive 里。Set 即一组 Drive 的集合分布式部署根据集群规模自动划分一个或多个 Set 每个 Set 中的Drive 分布在不同位置。一个对象存储在一个 Set 上。For example: {1…64} is divided into 4 sets each of size 16. 一个对象存储在一个Set上一个集群划分为多个Set一个Set包含的Drive数量是固定的默认由系统根据集群规模自动计算得出一个SET中的Drive尽可能分布在不同的节点上 3. 纠删码ECErasure Code
MinIO 使用纠删码机制来保证高可靠性使用 highwayhash 来处理数据损坏 Bit Rot Protection 。关于纠删码简单来说就是可以通过数学计算把丢失的数据进行还原它可以将n份原始数据增加m份数据并能通过nm份中的任意n份数据还原为原始数据。即如果有任意小于等于m份的数据失效仍然能通过剩下的数据还原出来。
4. 存储形式
文件对象上传到 MinIO 会在对应的数据存储磁盘中以 Bucket 名称为目录文件名称为下一级目录文件名下是 part.1 和 xl.meta(老版本最新版本如下图)前者是编码数据块及检验块后者是元数据文件。
5. 存储方案 Minio环境搭建
官方文档中文文档没有及时更新容易被坑。minio支持多种server启动模式
1. 单机部署
minio server的standalone模式即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境、测试环境的验证和学习使用。在standalone模式下还可以分为non-erasure code mode和erasure code mode。
non-erasure code mode 在此启动模式下对于每一份对象数据minio直接在data下面存储这份数据不会建立副本也不会启用纠删码机制。因此这种模式无论是服务实例还是磁盘都是“单点”无任何高可用保障磁盘损坏就表示数据丢失。erasure code mode 此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数minio server会自动启用erasure code mode。erasure code对磁盘的个数是有要求的如不满足要求实例启动将失败。erasure code启用后要求传给minio server的endpoint(standalone模式下即本地磁盘上的目录)至少为4个。
基于centos7
操作系统CPU架构地址GNU/Linux64-bit Intelhttp://dl.minio.org.cn/server/minio/release/linux-amd64/minio
cd /usr/local/soft/
#下载minio二进制文件
wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
#添加执行权限
chmod x minio
#启动minio server服务指定数据存储目录/data/minio
mkdir -p /data/minio
./minio server /data/minio1.1. 默认用户名密码minioadmin:minioadmin修改默认用户名密码可以使用
export MINIO_ROOT_USERadmin ---指定用户名
export MINIO_ROOT_PASSWORDadmin1234 --指定用户名密码
#启动minio
./minio server /data/minio1.2. 默认的配置目录是${HOME}/.minio可以通过–config-dir命令自定义配置目录 ./minio server --config-dir /data/minio/config /data/minio/1.3. 修改api端口号和web端口号启动
./minio server --address :7810 --console-address :7811 /data/minio/
#如果想后台运行可以用下面命令
nohup ./minio server --address :7810 --console-address :7811 /data/minio/ /data/minio/minio.log --address ----指定api端口号
--console-address ----指定web端口号1.4. 访问minio的web界面 http://192.168.2.10:7811 登录进入如下
2. 基于docker部署minio
docker run -itd --nameminio -p 7810:7810 -p 7811:7811 \
-e MINIO_ROOT_USERadmin \
-e MINIO_ROOT_PASSWORDadmin1234 \
-v /data/minio:/data/ \
-v /data/minio/config:/root/.minio/ \
minio/minio:latest server --address :7810 --console-address :7811 /data#参数解释
docker run 命令中使用的各个参数的详细解释-itd以交互式、终端和后台运行的方式启动容器。--nameminio给容器指定一个名称这里将容器命名为 minio。-p 7810:7810 -p 7811:7811将容器的 7810 和 7811 端口映射到主机的同样端口这样可以通过主机的这两个端口访问 MinIO。-e MINIO_ROOT_USERadmin设置 MinIO 的根用户管理员的用户名为 admin。-e MINIO_ROOT_PASSWORDadmin1234设置 MinIO 的根用户管理员的密码为 admin1234。-v /data/minio:/data/将主机的 /data/minio 目录挂载到容器内部的 /data 目录用于持久化存储 MinIO 的数据。可以根据实际需求修改主机上的目录路径。-v /data/minio/config:/root/.minio/将主机的 /data/minio/config 目录挂载到容器内部的 /root/.minio/ 目录用于持久化存储 MinIO 的配置文件。可以根据实际需求修改主机上的目录路径。minio/minio:latest指定要使用的 MinIO Docker 镜像server --address :7810 --console-address :7811 /data在容器启动后运行 MinIO 的 server 模式并将 /data 目录作为数据存储路径。--address 参数指定 MinIO API端口这里使用的是主机的 7810 端口--console-address 参数指定 MinIO的web端口这里使用的是主机的 7811 端口2.1. 访问测试 2.2 minio纠删码模式
Minio使用纠删码 erasure code 和校验和 checksum 来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量N/2的硬盘您仍然可以恢复数据。 纠删码是一种恢复丢失和损坏数据的数学算法 Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。这就意味着如果是12块盘一个对象会被分成6个数据块、6个奇偶校验块你可以丢失任意6块盘不管其是存放的数据块还是奇偶校验块你仍可以从剩下的盘中的数据进行恢复。 docker run -itd -p 7810:7810 -p 7811:7811 --name minio \
-e MINIO_ROOT_USERadmin \
-e MINIO_ROOT_PASSWORDadmin1234 \
-v /data/minio1:/data1 \
-v /data/minio2:/data2 \
-v /data/minio3:/data3 \
-v /data/minio4:/data4 \
-v /data/minio5:/data5 \
-v /data/minio6:/data6 \
-v /data/minio7:/data7 \
-v /data/minio8:/data8 \
minio/minio:latest server /data{1...8} --address :7810 --console-address :78113. 分布式集群部署
分布式Minio可以让你将多块硬盘甚至在不同的机器上组成一个对象存储服务。由于硬盘分布在不同的节点上分布式Minio避免了单点故障。 3.1. 分布式存储可靠性常用方法 分布式存储很关键的点在于数据的可靠性即保证数据的完整不丢失不损坏。只有在可靠性实现的前提下才有了追求一致性、高可用、高性能的基础。而对于在存储领域一般对于保证数据可靠性的方法主要有两类一类是冗余法一类是校验法。 冗余冗余法最简单直接即对存储的数据进行副本备份当数据出现丢失损坏即可使用备份内容进行恢复而副本 备份的多少决定了数据可靠性的高低。这其中会有成本的考量副本数据越多数据越可靠但需要的设备就越多成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现如 Hadoop 的文件系统3个副本Redis 的集群MySQL 的主备模式等。校验校验法即通过校验码的数学计算的方式对出现丢失、损坏的数据进行校验、还原。注意这里有两个作用一个校验通过对数据进行校验和( checksum )进行计算可以检查数据是否完整有无损坏或更改在数据传输和保存时经常用到如 TCP 协议二是恢复还原通过对数据结合校验码通过数学计算还原丢失或损坏的数据可以在保证数据可靠的前提下降低冗余如单机硬盘存储中的 RAID技术纠删码Erasure Code技术等。MinIO 采用的就是纠删码技术。
3.2. 分布式Minio优势
数据保护 分布式Minio采用 纠删码来防范多个节点宕机和位衰减 bit rot 。分布式Minio至少需要4个硬盘使用分布式Minio自动引入了纠删码功能。 高可用 单机Minio服务存在单点故障相反如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线你的数据就是安全的。不过你需要至少有N/21个硬盘来创建新的对象。例如一个16节点的Minio集群每个节点16块硬盘就算8台服務器宕机这个集群仍然是可读的不过你需要9台服務器才能写数据。 一致性 Minio在分布式和单机模式下所有读写操作都严格遵守read-after-write一致性模型。 3.3. 运行分布式Minio 启动一个分布式Minio实例你只需要把硬盘位置做为参数传给minio server命令即可然后你需要在所有其它节点运行同样的命令。 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥这样这些节点才能建立联接。为了实现这个你需要在执行minio server命令之前先将access秘钥和secret秘钥export成环境变量。新版本使用MINIO_ROOT_USERMINIO_ROOT_PASSWORD。分布式Minio使用的磁盘里必须是干净的里面没有数据。在分布式部署中建议最少使用4个节点以确保数据的冗余性和可靠性下面示例里的IP仅供示例参考你需要改成你真实用到的IP和文件夹路径。分布式Minio里的节点时间差不能超过3秒你可以使用NTP 来保证时间一致。在Windows下运行分布式Minio处于实验阶段请悠着点使用。
3.4. 8个节点每节点1块盘
启动分布式Minio实例8个节点每节点1块盘需要在8个节点上都运行下面的命令
export MINIO_ROOT_USERadmin
export MINIO_ROOT_PASSWORDadmin1234
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/export83.5. 4节点每节点4块盘
启动分布式Minio实例4节点每节点4块盘需要在4个节点上都运行下面的命令
export MINIO_ROOT_USERadmin
export MINIO_ROOT_PASSWORDadmin1234
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/export43.6. 测试上传 3.7. 存储结构
[rootlocalhost minio]# tree
.
└── yangshuang└── Notepad_downloader.8.5.3.exe├── 973c3b87-ca52-4520-9bb1-f64db88308d2│ └── part.1└── xl.meta
Minio客户端使用
MinIO Client (mc)为lscatcpmirrordifffind等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务AWS Signature v2和v4。
1. 部署客户端mc
平台CPU架构URLGNU/Linux64-bit Intelhttp://dl.minio.org.cn/client/mc/release/linux-amd64/mc
wget -P /usr/local/sbin/ http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
#添加权限
chmod x /usr/local/sbin/mc2. 配置mc
mc 将所有的配置信息都存储在 ~/.mc/config.json 文件中
#查询mc host配置
mc config host ls
#添加minio服务
mc config host add minio-server http://192.168.2.20:9000 admin admin1234
Added minio-server successfully.# 删除host
mc config host remove minio-server3. mc 命令使用
参数说明ls列出存储桶和对象mb创建存储桶cat显示文件和对象内容。pipe将一个STDIN重定向到一个对象或者文件或者STDOUT。share生成用于共享的URL。cp拷贝文件和对象。mirror给存储桶和文件夹做镜像。find基于参数查找文件。diff对两个文件夹或者存储桶比较差异。rm删除文件和对象。events管理对象通知。watch监视文件和对象的事件。policy管理访问策略。config管理mc配置文件。update检查软件更新。version输出版本信息。
3.1. 上传下载
# 查询minio服务上的所有buckets(文件和文件夹)
mc ls minio-server
# 下载文件
mc cp minio-server/tulingmall/fox/fox.jpg /tmp/
#删除文件
mc rm minio-server/tulingmall/fox/fox.jpg
#上传文件
mc cp zookeeper.out minio-server/tulingmall/3.2. Bucket管理
# 创建bucket
mc mb minio-server/bucket01
# 删除bucket
mc rb minio-server/bucket02
# bucket不为空可以强制删除 慎用
mc rb --force minio-server/bucket01#查询bucket03磁盘使用情况
mc du minio-server/bucket03
4. mc admin使用
MinIO Clientmc提供了“ admin”子命令来对您的MinIO部署执行管理任务。
参数说明service服务重启并停止所有MinIO服务器update更新更新所有MinIO服务器info信息显示MinIO服务器信息user用户管理用户group小组管理小组policyMinIO服务器中定义的策略管理策略config配置管理MinIO服务器配置heal修复MinIO服务器上的磁盘存储桶和对象profile概要文件生成概要文件数据以进行调试top顶部提供MinIO的顶部统计信息trace跟踪显示MinIO服务器的http跟踪console控制台显示MinIO服务器的控制台日志prometheusPrometheus管理Prometheus配置kmskms执行KMS管理操作
4.1. 用户管理
mc admin user --help
#新建用户
mc admin user add minio-server fox
mc admin user add minio-server fox02 12345678
#查看用户
mc admin user list minio-server
#禁用用户
mc admin user disable minio-server fox02
#启用用户
mc admin user disable minio-server fox02
#查看用户信息
mc admin user info minio-server fox
#删除用户
mc admin user remove minio-server fox024.2. 策略管理
policy命令用于添加删除列出策略获取有关策略的信息并为MinIO服务器上的用户设置策略。
mc admin policy --help
#列出MinIO上的所有固定策略
mc admin policy list minio-server
# 查看plicy信息
mc admin policy info minio-server readwrite