0
点赞
收藏
分享

微信扫一扫

minio笔记01--部署与测试minio


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快速安装:

  1. 下载配置,初始化目录

$ 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
-

  1. 创建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;
}
}

  1. 创建单机集群

# 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来设置。

minio笔记01--部署与测试minio_对象存储

3 测试

3.1 mc使用

  1. 下载mc

$ wget https://dl.min.io/client/mc/release/linux-amd64/mc
$ chmod +x mc
建议直接cp一份到/usr/local/bin 目录下
$ mc --autocompletion # 添加自动补全
添加自动补全后会在 $HOME/.mc/ 下生成一系列配置文件
$ ls

  1. 设置别名

$ 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"
},

  1. 查看bucket

$ mc ls local
[2021-01-19 20:10:46 HKT] 0B test01/
[2021-01-19 20:10:59 HKT]

  1. 查看使用率

$ mc du --depth=2 local
216B test01
72KiB test02
72KiB
$ mc du

  1. 拷贝文件

$ 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

  1. 查看集群信息

$ mc admin info local
或者直接json形式输出
$ mc admin info local

集群信息如下:

minio笔记01--部署与测试minio_minio_02

更多用法参考 ​​github mc​​

3.2 fuse使用

s3fs可以直接将minio挂载为文件系统形式,更加方便使用。

  1. 下载s3fs

$ apt-get install

  1. 挂载 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 补充说明

  1. 软件环境
    笔者系统为ubuntu16.04
    docker 20.10.2
    docker-compose version 1.26.2
  2. 参考文档
    1​​​minio 官网​​​
  3. 2 ​​doc CN​​
  4. 3 ​​doc EN​​​
  5. 4 ​​github mc​​​
  6. 5 ​​github s3fs​​


举报

相关推荐

0 条评论