Minio是GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。基于Apache License v2.0开源协议的对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。
其设计的主要目标是作为私有云对象存储的标准方案。主要用于存储海量的图片,视频,文档等。非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
在对象存储里,元数据包括 account(用户), bucket, bucket index等信息。Minio没有独立的元数据服务器。元数据都保存在底层的本地文件系统中。这个涉及和GlusterFs的架构设计很类似。
在本地文件系统里,一个bucket对应本地文件系统中的一个目录。一个对象Object对应bucket目录下的一个子目录(在EC的情况下对应多个part文件)。该子目录下保存着对象相关的数据和元数据。
如上图所示:在Erasure Set中有4个磁盘:Disk1,Disk2,Disk3,Disk4,四个磁盘组成一个Erasure Set。每个bucket对应一个相应桶名称的目录,每个对象对应bucket的一个目录:目录里保存着对应的数据和元数据文件。
创建bucket的元数据操作:对于Erasure Set(2+2)为例:创建一个bucket,对应底层文件系统的4次目录创建。创建一个文件,需要对应底层4次目录创建和8次文件创建操作。对于小文件,数据和元数据都保存在meta文件中,也需要4次目录创建和4次文件创建操作。由此可推断,minio在对应大量小文件的场景下性能非常差。
官方文档: https://min.io/docs/minio/linux/operations/installation.html
官方文档中写了有三种模式:
1、单节点单驱动:一个Minio进程/节点,并且只有一个驱动目录
2、单节点多驱动:一个Minio进程/节点,有多个驱动目录
3、多节点多驱动:多个Minio进程/节点,并且每个节点有多个驱动目录
我这里就操作一下多节点多驱动模式的
部署环境:
两台Linux部署
服务器1:192.168.2.10
服务器2:192.168.2.20
1、两台服务器分别下载minio二进制程序包
shellwget https://dl.min.io/server/minio/release/linux-amd64/minio && mv minio /usr/local/bin && chmod +x /usr/local/bin/minio
2、下载完成后,需要在两台服务器上分别创建驱动目录
shellmkdir -pm 755 /mnt/data{1..5} && mkdir -pm 755 /mnt/minio
3、设置两台主机的hosts域名映射
shellcat <<EOF > /etc/hosts 192.168.2.10 node1 192.168.2.20 node2 EOF
4、运行启动脚本
shell#!/bin/env bash
export MINIO_ROOT_USER=Minio
export MINIO_ROOT_PASSWORD=Minio123456
minio server --config-dir /mnt/minio \
--console-address ":9001" \
http://node{1..2}/mnt/data{1..5}
5、设置systemd
shellcat <<EOF > /usr/lib/systemd/system/minio.service [Unit] Description=Minio service Documentation=https://docs.minio.io/ [Service] WorkingDirectory=/mnt/ ExecStart=/mnt/start.sh Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF
重载systemd
shellsystemctl daemon-reload
6、启动minio
shellsystemctl start minio
1、安装nginx
yum安装或者编译安装都可以
shellyum -y install nginx
如果yum源中没有nginx,可以去官网复制一份
官网地址:https://nginx.org
2、配置文件
shellcat <<EOF > /etc/nginx/conf.d/minio_proxy.conf
upstream minio_console {
least_conn;
server 192.168.2.10:9001;
server 192.168.2.20:9001;
}
server {
listen 80;
server_name 192.168.22.22;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
access_log /var/log/nginx/minio.access.log;
location / {
proxy_set_header Host $http_host;
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;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_connect_timeout 300;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
chunked_transfer_encoding off;
proxy_pass http://minio_console;
}
}
EOF
本文作者:YOUWEI
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!