jk's notes
  • 张春晓的视频笔记 (只是笔记, 待实操) raw

张春晓的视频笔记 (只是笔记, 待实操) 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

官方提供的计算器, 在确定机架数量, 服务器数量, 磁盘数量与容量后, 分配纠删码长度后, 可计算出总容量. 同时可以帮助生成命令:

image-20240903203057002

一般的工作流程

  • 部署多个 MinIO 节点 (多服务器, 多驱动器). 构成分布式集群.
  • 部署一个对外可访问的负载均衡, 来分发请求到具体的 MinIO 服务器.

存储机制

存储对象后会生成一些文件夹

  • 在每一个 驱动器上生成 bucket 文件夹
  • 每一个 bucket 文件夹中生成一个文件名的文件夹
  • 其中存在文件的分块数据

启动模式

  • 单机运行 (一台服务器) (学习与测试)
  • 集群 (生产环境)

部署

安装方式

  • 包安装
  • 二进制安装
  • 基于 Docker 容器化安装
  • 基于 Kubernetes 部署

包含装

基于官方提供的源下载安装包.

进入 MinIO 官网, 找到 download 可以根据 OS 选择安装包, 或已经编译好的二进制可执行程序.

https://dl.min.io/server/minio/release/linux-amd64/

image-20240903204301128

image-20240903204359092

以 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

image-20240904103512274

如果执行命令 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 "#|^$" 表示不显示注释行, 以及空行.

image-20240904104219233

该文件默认使用 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 后得到

image-20240910113643109

演示

创建桶, 然后上传一个文件.

image-20240910113543421

image-20240910113600096

红帽的包安装

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 进行负载均衡.

分布式部署

image-20240903213656142

模拟案例, 3节点4磁盘.

Last Updated:
Contributors: jk