简介
MinIO 是一款高性能、分布式的对象存储系统。它是一款软件产品,可以 100% 的运行在标准硬件。即 X86 等低成本机器也能够很好的运行 MinIO。
MinIO 与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为 MinIO 一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去 MinIO 的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。
MinIO 在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等 9000 多家企业也都在使用 MinIO 产品
单机安装
官网
下载
windows 下载: http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe
linux 下载: https://dl.min.io/server/minio/release/linux-amd64/minio
MinIO 强烈建议反对在生产环境中使用从源代码编译的 MinIO 服务器。
文档
http://docs.minio.org.cn/docs/
命令行启动
windows 下进入安装目录,命令行执行
.\minio.exe server D:\mini\data
linux 下进入安装目录,命令行执行
# 授权:可执行
chmod +x minio
# 设置进入web管理界面的用户名和密码,以及/mnt/data 作为数据存储目录
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
停止服务
kill -9 15641
访问
- MinIO 部署开始使用默认的 root 凭据 minioadmin:minioadmin
- 可以使用 MinIO 控制台测试部署,这是一个内置在 MinIO 服务器中的基于 Web 的嵌入式对象浏览器。
- 主机上运行的 Web 浏览器指向 http://127.0.0.1:9000 并使用 root 凭据登录
- 可以使用浏览器来创建桶、上传对象以及浏览 MinIO 服务器的内容。
- 可以使用任何与 S3 兼容的工具进行连接,例如 MinIO Client mc 命令行工具
- MinIo 默认 9000 端口,在启动命令中加入 --address “0.0.0.0:9001” 可更改端口
iptables 防火墙
如果存在防火墙配置,则需要放行 minio 相关端口;如果未开启,则忽略,在生产环境下为了保证数据的安全,必需启用防火墙;
对于启用了 iptables 的主机(RHEL、CentOS 等),可以使用 iptables 命令来启用进入特定端口的所有流量。 使用以下命令允许访问 9000 端口
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
service iptables restart
下面的命令启用所有传入端口的流量,范围从 9000 到 9010。
iptables -A INPUT -p tcp --dport 9000:9010 -j ACCEPT
service iptables restart
集群安装
VM 虚拟主机
192.168.16.128
192.168.16.129
192.168.16.130
挂载硬盘
每台主机已挂载新的磁盘并创建相关目录
注:minio 集群强制要求在根目录之外的其它磁盘上独占分区,因此需要挂载新的磁盘
参见: MinIO 集群挂载新磁盘
配置用户名和密码
在三台主机环境变量中加入相同的用户名和密码
export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
启动集群
在三台机器上分别重复输入启动命令
./minio server http://192.168.16.{128...130}/data2/minio_db{1...4}
# 完整的后台启动命令
# nohup ./minio server http://192.168.16.{128...130}/data2/minio_db{1...4} >> minio.log 2>&1 &
访问
问题
通过命令启动多台 VM 主机集群失败。
./minio server http://192.168.16.128/data2/minio/db{1...4} http://192.168.16.129/data2/minio/db{1...4} http://192.168.16.130/data2/minio/db{1...4}
结果有如下错误提示,提示读错误。
API: SYSTEM()
Time: 09:11:12 UTC 08/15/2022
Error: Read failed. Insufficient number of drives online (*errors.errorString)
6: internal/logger/logger.go:259:logger.LogIf()
5: cmd/prepare-storage.go:242:cmd.connectLoadInitFormats()
4: cmd/prepare-storage.go:302:cmd.waitForFormatErasure()
3: cmd/erasure-server-pool.go:109:cmd.newErasureServerPools()
2: cmd/server-main.go:694:cmd.newObjectLayer()
1: cmd/server-main.go:531:cmd.serverMain()
Waiting for a minimum of 2 drives to come online (elapsed 36s)
Client 'http://192.168.16.128:9000/minio/storage/data2/minio/db3/v47' re-connected in 14.79896ms
Client 'http://192.168.16.128:9000/minio/storage/data2/minio/db2/v47' re-connected in 17.914527ms
通过官方文档并没有发现有什么不妥,或解决问题的信息。看到官方有另一种启动方式,并且推荐使用该种方式进行扩展启动
export MINIO_ROOT_USER=<ACCESS_KEY>
export MINIO_ROOT_PASSWORD=<SECRET_KEY>
minio server http://host{1...n}/export{1...m}
注意:在上面的示例中 n 并 m 表示正整数,不要复制粘贴并期望它可以根据本地部署和设置进行更改。
注意: {1...n} 显示有 3 个点!仅使用 2 个点 {1..n} 将由您的 shell 解释并且不会传递给 MinIO 服务器,从而影响擦除编码顺序,从而影响性能和高可用性。始终使用省略号语法 {1...n}(3 个点!)以获得最佳纠删码分布
示例
minio server http://host{1...4}/export{1...16} http://host{5...12}/export{1...16}
于是重新删除所有节点的 /data2/minio 目录,新建 /data2/minio_db1、/data2/minio_db2、/data2/minio_db3、/data2/minio_db4,使用新的启动方法
./minio server http://192.168.16.{128...130}/data2/minio_db{1...4}
在 128~130 三台 VM 主机上顺序执行,等待三台虚拟主机的服务加载与通讯完毕后,成功启动集群。
root@ubuntu1:/opt# ./minio server http://192.168.16.{128...130}/data2/minio_db{1...4}
Waiting for atleast 1 remote servers to be online for bootstrap check
Following servers are currently offline or unreachable [http://192.168.16.129:9000/data2/minio_db1 http://192.168.16.130:9000/data2/minio_db1]
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ You are running an older version of MinIO released 2 days ago ┃
┃ Update: Run `mc admin update` ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Waiting for atleast 1 remote servers to be online for bootstrap check
Following servers are currently offline or unreachable [http://192.168.16.129:9000/data2/minio_db1 http://192.168.16.130:9000/data2/minio_db1]
....
略
....
Waiting for all other servers to be online to format the drives (elapses 9s)
Formatting 1st pool, 1 set(s), 12 drives per set.
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables
Waiting for all MinIO sub-systems to be initialized.. lock acquired
Automatically configured API requests per node based on available memory on the system: 45
All MinIO sub-systems initialized successfully in 230.584844ms
MinIO Object Storage Server
Copyright: 2015-2022 MinIO, Inc.
License: GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>
Version: RELEASE.2022-08-11T04-37-28Z (go1.18.5 linux/amd64)
Status: 12 Online, 0 Offline.
API: http://192.168.16.128:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Console: http://192.168.16.128:45414 http://127.0.0.1:45414
RootUser: minioadmin
RootPass: minioadmin
Command-line: https://docs.min.io/docs/minio-client-quickstart-guide
$ mc alias set myminio http://192.168.16.128:9000 minioadmin minioadmin
Documentation: https://docs.min.io
因此上述问题,推测和 MinIO 的服务器纠删码机制有关;
参见官方文档说明
https://docs.min.io/docs/distributed-minio-quickstart-guide.html
通过集群其中的一台主机进行访问
http://192.168.16.128:9000
WEB 管理界面成功显示三台主机信息
参考
https://blog.csdn.net/qq_23312117/article/details/123320513
https://github.com/minio/minio/issues/9018
https://blog.csdn.net/weixin_44313745/article/details/110225422