Minio对象存储

一、Minio介绍

Minio 兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支持Java,Python,Javacript, Golang语言,可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上,配置简单。

官网 :http://www.minio.org.cn/

二、Minio安装

2.1 下载部署
mkdir /minio/{data,logs,bin}
wget -P /minio/bin/ http://dl.minio.org.cn/server/minio/release/darwin-amd64/minio
mount /dev/sdb /minio/data
chmod u+x /minio/bin/minio
vim /minio/bin/run.sh

--------------------------------------------------------------------
#!/bin/bash

#
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=admin@123123
MINIO_ADDR=0.0.0.0
MINIO_PORT=9000
MINIO_BIN=/minio/bin/minio
MINIO_DATA=/minio/data
MINIO_LOG=/minio/logs/minio.log

#
nohup $MINIO_BIN server \
--address=$MINIO_ADDR:$MINIO_PORT $MINIO_DATA >> $MINIO_LOG 2>&1 &
--------------------------------------------------------------------

chmod u+x /minio/bin/run.sh
/minio/bin/run.sh
2.2 启动访问

打开浏览器访问,http://ip:9000/ 进入登录界面,使用定义的用户密码登录。

出现上述界面表示成功。

三、Minio集群

3.1 集群介绍

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。

集群特点 :

  • 数据保护: 分布式Minio至少需要4个节点,采用纠删码功能防范多节点宕机和位衰减;
  • 高可用: 单机minio存在单点故障,分布式minio中只要有N/2节点在线,数据还是可用的;
  • 限制性: 分布式Minio单租户存在最少4个最多16个盘的限制(受限于纠删码);
  • 一致性: Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型;
3.2 集群节点
主机 IP 数据目录
minio1 10.10.0.28 /data/minio/data
minio2 10.10.0.29 /data/minio/data
minio3 10.10.0.30 /data/minio/data
minio4 10.10.0.31 /data/minio/data
3.3 系统配置
#配置节点主机名
hostnamectl set-hostname minio1
hostnamectl set-hostname minio2
hostnamectl set-hostname minio3
hostnamectl set-hostname minio4

#文件句柄大小调整
echo "*   soft    nofile  65535" >> /etc/security/limits.conf
echo "*   hard    nofile  65535" >> /etc/security/limits.conf
3.4 目录创建
#run: 启动脚本及二进制执行文件目录
#data: 数据存储目录
mkdir -p /data/minio/{run,data}
mkdir -p /etc/minio  #配置文件目录
3.5 集群配置
MINIO_ACCESS_KEY:用户名,长度最小是5个字符
MINIO_SECRET_KEY:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
config-dir:指定集群配置文件目录
#在所有节点创建
vim /data/minio/run/run.sh

---------------------------------------------------------
#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=Test1234123
/data/minio/run/minio server --config-dir /etc/minio \
http://10.10.0.1/data/minio/data \
http://10.10.0.2/data/minio/data \
http://10.10.0.3/data/minio/data \
http://10.10.0.4/data/minio/data \
---------------------------------------------------------

#
chmod u+x /data/minio/run/run.sh
3.6 集群脚本
WorkingDirectory:二进制文件目录
ExecStart:指定集群启动脚本
cat > /usr/lib/systemd/system/minio.service <<EOF
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/data/minio/run/
ExecStart=/data/minio/run/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
chmod +x /usr/lib/systemd/system/minio.service
chmod +x /data/minio/run/minio
chmod +x /data/minio/run/run.sh
3.7 启动集群
systemctl daemon-reload
systemctl enable minio
systemctl start minio
3.8 集群访问
vim nginx.conf

#生产环境需要使用Nginx将集群地址进行代理,对外统一入口;
upstream minio{
        server 10.10.0.1:9000;
        server 10.10.0.2:9000;
        server 10.10.0.3:9000;
        server 10.10.0.4:9000;
}
server {
        listen 80;
        server_name minio;
        location / {
            proxy_pass http://minio/;
            #proxy_set_header Host $http_host;
            client_max_body_size 1000m;
            proxy_intercept_errors on;
            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;
        }
}

浏览器访问minio集群代理地址+端口即可。

四、Minio客户端

./mc --help
./mc config host add oss http://10.0.0.24:9000 minio minio@123123 --api S3v4 #添加存储服务
./mc ls oss #查看存储桶
./mc cp /data/tempfile/jdk-11.0.7_linux-x64_bin.tar.gz oss/smz/ #上传文件
./mc share download --expire 168h oss/smz/jdk-11.0.7_linux-x64_bin.tar.gz #返回下载地址下载