张春晓的视频笔记 (只是笔记, 待实操) raw
主要内容:
- 安装步骤与部署
- 客户端
- 程序访问
简介 (略)
- 介绍传统存储方式 (DAS, NAS, SAN)
- 对象存储 (非结构化数据)
- 对象存储的特点
官方网站:
https://min.io/
https://github.com/minio/minio
一些术语
- 对象 object, 具体的文件
- 桶 bucket, 顶级文件夹
- 驱动器 driver, 磁盘 (学习中可以使用目录来模拟)
- 存储集 set, 逻辑上的 驱动器集合, 形成存储集
纠删码 EC (Erasure Code)
用于实现数据冗余和可靠性.
类似于 RAID.
至少需要 4 块磁盘.
大文件存储是分片的, 每一个数据块都由数据+纠删码组成. 这就存在冗余. 但可以恢复.
https://min.io/product/erasure-code-calculator
官方提供的计算器, 在确定机架数量, 服务器数量, 磁盘数量与容量后, 分配纠删码长度后, 可计算出总容量. 同时可以帮助生成命令:
一般的工作流程
- 部署多个 MinIO 节点 (多服务器, 多驱动器). 构成分布式集群.
- 部署一个对外可访问的负载均衡, 来分发请求到具体的 MinIO 服务器.
存储机制
存储对象后会生成一些文件夹
- 在每一个 驱动器上生成 bucket 文件夹
- 每一个 bucket 文件夹中生成一个文件名的文件夹
- 其中存在文件的分块数据
启动模式
- 单机运行 (一台服务器) (学习与测试)
- 集群 (生产环境)
部署
安装方式
- 包安装
- 二进制安装
- 基于 Docker 容器化安装
- 基于 Kubernetes 部署
包含装
基于官方提供的源下载安装包.
进入 MinIO 官网, 找到 download 可以根据 OS 选择安装包, 或已经编译好的二进制可执行程序.
https://dl.min.io/server/minio/release/linux-amd64/
以 Ubuntu 为例
下载 deb 包并安装
注意下载不要下载到企业版, 启动需要
licence
的.
wget https://dl.min.io/server/minio/release/linux-amd64/minio_20240829014052.0.0_amd64.deb -O minio.deb
dpkg -i minio.deb
which minio
minio -v
如果执行命令
dpkg -i
报错:dpkg: error: requested operation requires superuser privilege
, 表示需要提升权限.下载如果失败 (网络问题), 可以通过本地下载, 使用
scp
进行拷贝.
查看 service 文件
适用包安装后会自动创 service 文件, 查看 service 文件
grep -Ev "#|^$" /lib/systemd/system/minio.service
service 文件是生成了, 但是有些资源没有准备好. 例如启动账号就没有.
可以使用
grep --help
查看所有选项的含义:
-E
表示使用扩展正则来匹配 (更强大灵活), 默认使用基础正则.-v
表示显示没有匹配上的行.
grep -Ev "#|^$"
表示不显示注释行, 以及空行.
该文件默认使用
minio-user
用户组和账户信息来启动服务.并且使用了环境文件
/etc/default/minio
补充:
EnvironmentFile
不带前缀, 直接加载对应环境变量文件.EnvironmentFile
若带有+
前缀, 相当于直接追加, 即使有同名的环境变量, 也按顺序追加 (可能出现重名环境变量).EnvironmentFile
如果带有-
前缀, 依旧表示追加, 但同名的环境变量, 会被后来的覆盖 (绝对不会有重名环境变量).
创建启动 minio 的用户与组
groupadd -r minio-user
useradd -M -r -s /sbin/nologin -g minio-user minio-user
groupadd
中的-r
表示创建系统账户 (system account).
useradd
中的-M
表示不创建home
目录;-r
表示系统账户,-s
表示该账户所使用的shell
,-g
设置组.系统账户一般用于执行某些命令, 不是用于登录的.
-s /sbin/nologin
也表示该用户不会登录.
添加配置文件
通过阅读 service 文件, 还需配置数据的存放路径. 它会默认读取 /etc/default/minio
中的变量, 利用变量来指定.
cat > /etc/default/minio <<EOF
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=12345678
MINIO_VOLUMES="/data/minio{1...4}"
MINIO_OPTS="--console-address :9001"
EOF
注意这里的重定向输入到文件中, 不能使用
sudo
来临时提升权限解决, 需要使用管理员账户, 否则直接使用sudo vim
编辑处理. 或是在其他地方创建该文件后, 移动到对应位置.
挂载硬盘
另外, minio 的数据目录不允和根文件系统在一起. 下面创建逻辑卷.
mkdir -p /data
lvcreate -n minio -L 10G ubuntu-vg # 可利用 vgdisplay 查看空间
mkfs.ext4 /dev/ubuntu-vg/minio # 格式化
echo /edv/ubuntu-vg/minio /data ext4 defaults 0 0 >> /etc/fstab # 永久挂载
mount -a # 生效
至此
/data
就在一个独立的逻辑卷中存放了.
创建数据子目录, 模拟 4 块硬盘 (最好是独立的硬盘)
mkdir -p /data/minio{1..4}
chown -R minio-user.minio-user /data/
附加信息
演示使用 VirtualBox + 虚拟硬盘.
可以考虑创建 4 块硬盘, 挂载到 Linux 系统上, 然后分区, 设置文件系统, 然后永久挂载.
启动服务
systemctl enable --now minio.service
查看端口
ss -ntlp | grep minio
然后就可以基于浏览器访问登录了 (浏览器使用 9001 端口访问).
错误细节可以查看系统日志:
cat /var/log/syslog
不知道为什么, 查看不到信息. 重新执行
ss -ntlp
后得到
演示
创建桶, 然后上传一个文件.
红帽的包安装
wget install https://dl.min.io/server/minio/release/linux-amd64/minio-20240829014052.0.0-1.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm
mkdir ~/minio
minio server ~/minio --console-address :9090
默认的用户名与密码:
用户名
minioadmin
密码
minioadmin
二进制安装
作者写了一个脚本来进行安装.
这个脚本值得研究研究.
二进制安装实际上与 deb, 或 rpm 的安装是一样的, 不同的是, 二进制安装没有 service 文件. 要么自己写, 要么使用其他办法.
容器化安装
- 单机版 (略, 与官方文档入门命令一样)
- 单机多磁盘, 启用纠删码
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /minio/data1:/data1 \
-v /minio/data2:/data2 \
-v /minio/data3:/data3 \
-v /minio/data4:/data4 \
-v /minio/data5:/data5 \
-v /minio/data6:/data6 \
-v /minio/data7:/data7 \
-v /minio/data8:/data8 \
minio/minio server /data{1...8} --console-address ":9999"
查看日志: docker logs minio
利用 tree /minio
查看目录 (用目录来模拟)
然后作者利用浏览器进行了演示:
创建 bucket
上传文件
查看
/data
目录的内容tree /minio/ du -sh /minio/*
Docker Compose 部署
作者定义了一个 yml 文件.
定义了 4 个容器, 每个容器上有 2 个驱动器; 然后利用 nginx 进行负载均衡.
分布式部署
模拟案例, 3节点4磁盘.