# 搭建分布式对象存储服务 MinIO-单点模式 {#搭建分布式对象存储服务-minio-单点模式}
本文介绍开源的分布式对象存储服务 MinIO 的单点模式的搭建步骤。对象存储系统相比于传统的 NAS 文件系统有很多的优势,访问效率高、方便扩容,支持分布式等特性。MinIO 基于 Goland 开发,所以部署非常方便。
# 1. 部署 MinIO 服务 {#_1-部署-minio-服务}
# 1.1 单机部署 {#_1-1-单机部署}
# 1.1.1 docker方式部署 {#_1-1-1-docker方式部署}
执行如下命令,创建 MinIO 服务
docker run -p 9000:9000 --name minio \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
-d minio/minio server /data
# 1.1.2 二进制方式部署 {#_1-1-2-二进制方式部署}
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data
# 1.2 分布式部署 {#_1-2-分布式部署}
分布式Minio的要求: 至少需要4个硬盘
需求: 一共2台机器(192.168.11.13,192.168.11.13), 每台机器上指定2个存储目录(可以对应到2块硬盘)/data1
和/data2
.
# 1.2.1 创建启动脚本 {#_1-2-1-创建启动脚本}
在所有机器上部署如下服务启动脚本(start_minio_cluster.sh):
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=adminpwd
nohup /root/minio server http://192.168.11.13/data1 http://192.168.11.13/data2 http://192.168.11.14/data1 http://192.168.11.14/data2 >/root/minio.log 2>&1 &
minio会自动以
MINIO_ACCESS_KEY
和MINIO_SECRET_KEY
环境变量的值作为管理后台的账号和密码, 所以您可以自定义账号和密码.
# 1.2.2 启动服务 {#_1-2-2-启动服务}
所有机器上执行启动脚本start_minio_cluster.sh.集群即可成功运行.
在192.168.11.13上程序输出的部分日志如下:
Error: Marking http://192.168.11.14:9000/minio/storage/data2/v29 temporary offline; caused by Post "http://192.168.11.14:9000/minio/storage/data2/v29/readall?disk-id=&file-path=format.json&volume=.minio.sys": dial tcp 192.168.11.14:9000: connect: connection refused (*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:471: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()
Disk `/data1` the same as the system root disk.
Disk will not be used. Please supply a separate disk and restart the server.
Disk `/data2` the same as the system root disk.
Disk will not be used. Please supply a separate disk and restart the server.
Waiting for a minimum of 2 disks to come online (elapsed 21s)
Formatting 1st pool, 1 set(s), 4 drives per set.
Waiting for all MinIO sub-systems to be initialized.. lock acquired
Attempting encryption of all config, IAM users and policies on MinIO backend
All MinIO sub-systems initialized successfully
Status: 4 Online, 0 Offline.
Endpoint: http://192.168.11.13:9000 http://127.0.0.1:9000
Browser Access:
http://192.168.11.13:9000 http://127.0.0.1:9000
Object API (Amazon S3 compatible):
Go: https://docs.min.io/docs/golang-client-quickstart-guide
Java: https://docs.min.io/docs/java-client-quickstart-guide
Python: https://docs.min.io/docs/python-client-quickstart-guide
JavaScript: https://docs.min.io/docs/javascript-client-quickstart-guide
.NET: https://docs.min.io/docs/dotnet-client-quickstart-guide
Waiting for all MinIO IAM sub-system to be initialized.. lock acquired
IAM initialization complete
可以看出,当192.168.11.14上的节点还没有启动时,当前节点会报错,提示硬盘数量不足4块.当把192.168.11.14上的服务也启动后, 提示已有4块硬盘, 并初始化完成.
# 1.2.3 访问 {#_1-2-3-访问}
集群启动后,浏览器访问集群中的任何一个节点(http://192.168.11.13:9000或http://192.168.11.14:9000)都可以.
# 2 MinIO 后台管理系统的使用 {#_2-minio-后台管理系统的使用}
服务启动后,访问http://IP:9000,进入管理后台
默认 Access Key 和 Secret 都是 minioadmin
后台管理系统支持 bucket 的创建、文件的上传等操作。
# 2.1 创建 bucket {#_2-1-创建-bucket}
在文件上传之前,需要先创建 1 个 bucket。
# 2.2 上传文件 {#_2-2-上传文件}
可以指定任意路径来上传文件
# 2.3 文件的访问 {#_2-3-文件的访问}
执行如下操作获取文件的访问地址
该文件的访问地址是临时的,若想获取可永久访问的地址,需要修改存储桶的访问策略,我们可以点击存储桶右上角的编辑策略按钮来修改访问策略。需要注意的是,访问前缀需要设置为*.*,否则会无法访问。
文件的永久访问地址为: 服务器域名/bucketName/objectName,如http://172.18.100.177:9000/mymusic/百事可乐的视频1.mp4
# 3 MinIO 服务端的数据存储结构 {#_3-minio-服务端的数据存储结构}
MinIO 在服务端的存储也是以目录结构存储的。
后台管理看到的文件列表如下:
服务端的数据存储结构如下:
~ # ls -l /data/bucket1/dir1/
total 52
drwxr-xr-x 2 root root 4096 Oct 29 09:29 dir2
-rw-r--r-- 1 root root 24730 Oct 29 09:30 icon.png
-rw-r--r-- 1 root root 17080 Oct 29 09:29 选区_015.png
~ #