(一) Minio简介
1.1 Minio介绍
MinIO 是一个基于Apache License v2.0开源协议的
对象存储服务
。它兼容亚马逊S3云存储服务接口,非
常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而
一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
1.2 纠删码EC(Erasure Code)
MinIO 使用
纠删码机制
来保证高可靠性,使用 highwayhash 来处理数据损坏( Bit Rot Protection )。
关于纠删码,简单来说就是可以通过数学计算
,把丢失的数据进行还原,它可以将n份原始数据,增加m
份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意小于等于m份的数据失
效,仍然能通过剩下的数据还原出来。
1.3 存储机制
Minio使用纠删码
erasure code
和校验checksum
来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。
1.4 Minio优点
- 部署简单: 一个
single
二进制文件即是一切,还可支持各种平台。 - minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;
兼容Amazon S3
接口,充分考虑开发人员的需求和体验; - 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用
磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠删码集合(Erasure
Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,而不是基于整个存储卷的。 - 读写性能优异
1.5 官网地址
如果是学习或者玩一下,想用最新版本,建议看英文文档,中文文档更新可能没用那么及时。
(二) Minio环境搭建
2.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个。
2.2 基于Ubuntu18.04部署
2.2.1 下载Minio
#也可以使用命令下载 这里我使用官网下载(命令仅供参考)
wget -q http://dl.minio.org.cn/server/minio/release/linux-amd64/minio
2.2.2 创建目录
#创建文件夹
sudo mkdir /usr/local/minio
2.2.3 将下载的Minio复制到创建的文件夹中
#复制文件
sudo cp /home/用户名/Downloads(中文版为:下载)/minio /usr/local/minio
#使下载的Minio文件为可执行文件
chmod +x minio
2.2.4 创建文件存放目录
#切换目录
cd /usr/local
#创建文件存放目录
sudo mkdir data
2.2.5 启动Minio
#进入安装目录
cd /usr/local/minio
#修改Minio的初始账号密码(也可以不修改)
#初始账号:minioadmin
#初始密码:minioadmin
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=12345678 #注意密码至少八位
#启动Minio (需要进入minio存放目录下)
#50000 固定端口号 否则每次启动Minio会随机生成一个不一样的端口(控制台会有打印信息)
#/usr/local/java/etc 指定文件存放目录
./minio server --console-address ":50000" /usr/local/data
#在浏览器输入 http://Ip:50000 成功打开页面可以登录说明安装成功
2.2.6 将Minio设置成系统服务
#以上步骤,如果Ctrl+C退出后,这个Minio服务同时也停止了
#如果需要它在后台运行就需要把它添加到后台服务里边
#切换文件目录
cd /usr/local/minio
#创建目录
mkdir conf
#创建配置文件
mkdir minio.conf
#minio.conf文件内容
#数据存放目录
MINIO_VOLUMES="/usr/local/data"
#端口号设置
MINIO_OPTS="--console-address :9000"
#用户名
MINIO_ROOT_USER="minio"
#密码
MINIO_ROOT_PASSWORD="12345678"
#在/etc/systemd/system目录下新建一个minio.service
#切换文件目录
cd /etc/systemd/system
#创建配置文件
mkdir minio.service
#minio.service文件内容
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
#minio文件具体位置
AssertFileIsExecutable=/usr/local/minio/minio
[Service]
# User and group 用户 组
User=root
Group=root
#创建的配置文件 minio.conf
EnvironmentFile=/usr/local/minio/conf/minio.conf
ExecStart=/usr/local/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
2.2.7 正式启用和状态查看
#将服务设置为每次开机启动
systemctl enable minio.service
#重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载
systemctl daemon-reload
#启动服务
systemctl start minio
#停止服务
systemctl stop minio
#重启服务
systemctl restrat minio
#查看服务状态
systemctl status minio.service
#打开页面访问登录成功即可
http://192.168.80.137:9000
分布式集群部署也不是很难,有兴趣的可以参考官网文档或者网上教程玩一下。
文章仅用作记录分享,若有不当,还望指正。
最近开通个人了微信公众号,以后将会定期分享工作学习过程中遇到的问题,欢迎关注与我一道成长交流~:
微信搜索: MYY668999
或 程序猿爱篮球
即可上车。