minio笔记01--部署与测试minio
- 1 简介
- 2 部署minio集群
- 3 测试
- 3.1 mc使用
- 3.2 fuse使用
- 4 补充说明
1 简介
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
其提供了多种部署和使用方式,本文将在单机上部署一个minio集群,并对其进行基本使用和测试。
2 部署minio集群
前置条件:安装docker 和 docker-compose
如果需要快速安装一个单节点的minio实例,可以直接通过docker来安装:
docker run -d -p 9000:9000 -p 9001:9001 --name minio1 -v /mnt/data:/data -e "MINIO_ROOT_USER=minio" -e "MINIO_ROOT_PASSWORD=111111wm" quay.io/minio/minio:latest server --console-address ":9001"
如果需要安装一个集群,那么可以通过docker-compose快速安装:
- 下载配置,初始化目录
$ wget https://github.com/minio/minio/raw/master/docs/orchestration/docker-compose/docker-compose.yaml
或者
$ wget https://raw.githubusercontent.com/minio/minio/master/docs/orchestration/docker-compose/docker-compose.yaml
创建8个目录,模拟每个实例2块硬盘。
$ ls
data1-1 data1-2 data2-1 data2-2 data3-1 data3-2 data4-1 data4-2 minio test01
此处对其加以修改(修改了nginx配置):
vim docker-compose.yaml
version: '3.7'
# starts 4 docker containers running minio server instances.
# using nginx reverse proxy, load balancing, you can access
# it through port 9000.
services:
minio1:
image: minio/minio:RELEASE.2021-01-16T02-19-44Z
volumes:
- /home/minio/data1-1:/data1
- /home/minio/data1-2:/data2
ports:
- "9001:9000"
expose:
- "9000"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio2:
image: minio/minio:RELEASE.2021-01-16T02-19-44Z
volumes:
- /home/minio/data2-1:/data1
- /home/minio/data2-2:/data2
ports:
- "9002:9000"
expose:
- "9000"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio3:
image: minio/minio:RELEASE.2021-01-16T02-19-44Z
volumes:
- /home/minio/data3-1:/data1
- /home/minio/data3-2:/data2
ports:
- "9003:9000"
expose:
- "9000"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
minio4:
image: minio/minio:RELEASE.2021-01-16T02-19-44Z
volumes:
- /home/minio/data4-1:/data1
- /home/minio/data4-2:/data2
ports:
- "9004:9000"
expose:
- "9000"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
command: server http://minio{1...4}/data{1...2}
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
nginx:
image: nginx:1.19.6
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
network_mode: "host"
depends_on:
- minio1
- minio2
- minio3
-
- 创建nginx配置文件
该操作也可以省略掉,直接通过ip:port 来访问minio即可。
可以下载该配置文件并加以修改
$ wget https://raw.githubusercontent.com/minio/minio/master/docs/orchestration/docker-compose/nginx.conf
# vim nginx.conf
upstream minio-server {
server 10.214.58.67:9001 weight=3;
server 10.214.58.67:9002 weight=3;
server 10.214.58.67:9003 weight=3;
server 10.214.58.67:9004 weight=3;
}
server {
listen 9000;
server_name minio;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http:///minio-server; # If you are using docker-compose this would be the hostname i.e. minio
# Health Check endpoint might go here. See https://www.nginx.com/resources/wiki/modules/healthcheck/
# /minio/health/live;
}
}
- 创建单机集群
# docker-compose -f docker-compose.yaml up -d
/usr/local/lib/python2.7/dist-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.hazmat.backends import default_backend
Starting minio_minio3_1 ... done
Starting minio_minio4_1 ... done
Starting minio_minio2_1 ... done
Starting minio_minio1_1 ... done
Starting minio_nginx_1 ... done
创建集群后,可以直接通过http://10.214.58.67:9000 访问web ui,如下:
该ui提供了用户登录,增删bucket,上传、删除、分享文件等基础功能,复杂的用户权限可以通过mc admin来设置。
3 测试
3.1 mc使用
- 下载mc
$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x mc
建议直接cp一份到/usr/local/bin 目录下
$ mc --autocompletion # 添加自动补全
添加自动补全后会在 $HOME/.mc/ 下生成一系列配置文件
$ ls
- 设置别名
$ mc alias set local http://localhost:9001 minio minio123
Added `local` successfully.
别名会直接在 $HOME/.mc/config.json 中添加一个别名记录,记录中包括url,accessKey,secretKey等信息,也可以参考案例手动添加.
上面命令直接添加了一个local别名,其在 .mc/config.json 中添加了{"aliases":{"local":{别名信息}}} 记录,记录信息如下:
"local": {
"url": "http://localhost:9001",
"accessKey": "minio",
"secretKey": "minio123",
"api": "s3v4",
"path": "auto"
},
- 查看bucket
$ mc ls local
[2021-01-19 20:10:46 HKT] 0B test01/
[2021-01-19 20:10:59 HKT]
- 查看使用率
$ mc du --depth=2 local
216B test01
72KiB test02
72KiB
$ mc du
- 拷贝文件
$ dd if=/dev/zero of=test_file.txt bs=1M count=100
$ mc cp test_file.txt local/test01/
test_file.txt: 100.00 MiB / 100.00 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 25.92 MiB/s 3s
$ mc du local/test01
100MiB test01
具体数据存储格式如下,可见数据被分散到多个节点中,每个节点中的数据又再次被分为多个part。
$ du data1-1/test01/ -h
26M data1-1/test01/test_file.txt/d30cd52d-09f7-452a-ac1e-19b9bb1cf5cd
26M data1-1/test01/test_file.txt
38M data1-1/test01/test_file2.txt/9585ada5-1deb-46c0-9e07-bd261a715450
38M data1-1/test01/test_file2.txt
63M data1-1/test01/
minio04:~$ du data1-1/test01/ --max-depth=1 -h
26M data1-1/test01/test_file.txt
38M data1-1/test01/test_file2.txt
63M data1-1/test01/
minio04:~$ ls data1-1/test01/test_file.txt/
d30cd52d-09f7-452a-ac1e-19b9bb1cf5cd xl.meta
minio04:~$ ls
- 查看集群信息
$ mc admin info local
或者直接json形式输出
$ mc admin info local
集群信息如下:
更多用法参考 github mc
3.2 fuse使用
s3fs可以直接将minio挂载为文件系统形式,更加方便使用。
- 下载s3fs
$ apt-get install
- 挂载 minio 指定bucket
$ touch ${HOME}/.passwd-s3fs
内容为:
minio:minio123
$ mkdir -p /home/minio/test01
$ s3fs test01 /home/minio/test01 -o passwd_file=${HOME}/.passwd-s3fs -o url=http://127.0.0.1:9001/ -o use_path_request_style
该命令将bucket test01 挂载到 /home/minio/test01 目录
$ df -h|grep test01
s3fs 256T 0 256T 0% /home/minio/test01
注: 也可以直接在fstab 中添加挂载信息
mybucket /path/to/mountpoint fuse.s3fs _netdev,allow_other,use_path_request_style,url=https://url.to.s3/ 0 0
但是此种方法需要在etc下配置全局的password:
echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > /etc/passwd-s3fs
chmod 600
4 补充说明
- 软件环境
笔者系统为ubuntu16.04
docker 20.10.2
docker-compose version 1.26.2 - 参考文档
1minio 官网 - 2 doc CN
- 3 doc EN
- 4 github mc
- 5 github s3fs