背景
由于业务需要以及当前某品牌分布式文件系统达不到系统基本要求:业务密集时出现HTTP 503失败率激增、过期对象释放缓慢,故开始研究确定开源分布式对象存储系统Minio是否能满足业务需求并可热切至线上业务。
上手
到官网下载最新版本的主程序Minio以及命令行客户端mc工具【地址】、官方文档
主程序
按照官方文档的搭建,我们选择在单节点部署多目录进行测试。我们本次选用目录
/mpp-data/c/data00/minio
/mpp-data/c/data01/minio
/mpp-data/c/data02/minio
/mpp-data/c/data03/minio
目录下执行:
./minio server /mpp-data/c/data0{0..3}/minio
注意:
- 本次启动没有设置credentials,需要export MINIO_ROOT_USER、export MINIO_ROOT_PASSWORD进行设置。
- 默认credentials为
minioadmin:minioadmin
- 默认端口为
:9000
仪表盘
由于Minio没有提供相应的仪表盘界面,数据不能够直观显示,因此我们选用Prometheus+Grafana形式。
Prometheus
Prometheus需要修改配置文件prometheus.yml
,在scrape_configs
下增加:
scrape_configs:
- job_name: 'Minio'
metrics_path: /minio/prometheus/metrics
static_configs:
- targets: ['10.10.5.6:9000']
labels:
instance: minio_test
重启Prometheus服务。
Grafana
仪表盘有现成的模板,模板ID为12063,下载安装即可。
主程序界面
主程序界面支持添加桶、桶访问的policy、上传文件、修改密码等。
命令行
常用命令行有:
-
./mc ilm set
设置桶lifecyclelifecycle支持文件前缀、具体日期、相对时间、存储类型等。
-
./mc alias set
设置别名管理前需要设定alias,无法直接使用local的alias进行管理。
ps:可以运行./mc --autocompletion
开启shell自动补全功能
其他命令请参照官方文档。
测试上线正式环境
- 划分磁盘空间(已组raid5并3节点进行共享,使用6个独立目录进行)
- 在不同端口提前调试好Minio配置文件,包括创建好bucket、设置访问policy、设置lifecycle
- 关闭旧版分布式文件系统
- 更改Minio端口执行
出现的问题
- multipart上传可能与当前业务不兼容,无法上传
缺点
-
可靠性不佳,测试3节点部署每节点2块硬盘,丢失硬盘后,服务处于中断状态,log报错为
Time: 16:42:18 CST 05/25/2021 Error: Marking http://10.10.5.23:9000/minio/storage/OStor2-2/v31 temporary offline; caused by Post "http://10.10.5.23:9000/minio/storage/OStor2-2/v31/readall?disk-id=&file-path=format.json&volume=.minio.sys": dial tcp 10.10.5.23:9000: i/o timeout (*fmt.wrapError) 6: cmd/rest/client.go:138:rest.(*Client).Call() 5: cmd/storage-rest-client.go:151:cmd.(*storageRESTClient).call() 4: cmd/storage-rest-client.go:490:cmd.(*storageRESTClient).ReadAll() 3: cmd/format-erasure.go:405:cmd.loadFormatErasure() 2: cmd/format-erasure.go:325:cmd.loadFormatErasureAll.func1() 1: pkg/sync/errgroup/errgroup.go:122:errgroup.(*Group).Go.func1() Waiting for a minimum of 3 disks to come online (elapsed 49m43s)
-
配置各种选项需要命令行内进行,不够人性化。
-
支持的认证为亚马逊S3v4(AWS4-HMAC-SHA256),需要对应实现。