Minio基本介绍及如何搭建Minio集群

目录
  • 一、Minio介绍
    • 1.1 Minio简介
    • 1.2 部署方式:
    • 1.3 Minio官网
  • 二、Minio集群
    • 2.1 Minio集群原理
    • 2.2 术语解释
    • 2.3 纠删码
    • 2.4 Minio集群搭建
  • 三、Nginx反向代理与负载均衡
    • 3.1 安装nginx
    • 3.2 创建SSL证书
    • 3.3 配置Nginx
  • 四、minio页面展示

一、Minio介绍

1.1 Minio简介

MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。

1.2 部署方式:

  • 单机部署
  • 分布式部署

1.3 Minio官网

1、首页

https://min.io/

2、下载

https://min.io/download

3、中文文档

http://docs.minio.org.cn/docs/

二、Minio集群

2.1 Minio集群原理

MinIO分布式集群是指在多个服务器节点均部署MinIO服务,并将其组建为分布式存储集群,对外提供标准S3接口以进行统一访问。

MinIO集群采用去中心化无共享架构,各节点间为对等关系,连接至任一节点均可实现对集群的访问。在我们的方案中还选择了Nginx的轮询实现各个节点的负载均衡。

数据对象在MinIO集群中进行存储时,先进行纠删分片,后打散存储在各硬盘上。具体为:

  • MinIO自动在集群内生成若干纠删组,每个纠删组包含一组硬盘,其数量通常为4至16块;
  • 对数据对象进行分片,默认策略是得到相同数量的数据分片和校验分片;
  • 而后通过哈希算法计算出该数据对象对应的纠删组,并将数据和校验分片存储至纠删组内的硬盘上。

假设某MinIO集群内纠删组包含4块硬盘,某数据对象名为MyObject,其隶属存储桶名为MyBucket,哈希计算得到对应的纠删组为Disk 14。那么在Disk 14的数据路径下,都会生成MyBucket/MyObject子路径,子路径中包含2个文件,分别为存储元数据信息的xl.meta和MyObject对象在该盘上的第一个分片part.1。其中,xl表示MinIO中数据对象的默认存储格式。

2.2 术语解释

1、S3

Simple Storage Service,简单存储服务,这个概念是Amazon在2006年推出的,对象存储就是从那个时候诞生的。S3提供了一个简单Web服务接口,可用于随时在Web上的任何位置存储和检索任何数量的数据。

2、Object

存储到 Minio 的基本对象,如文件、字节流,Anything...

3、Bucket

用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。

4、Drive

部署 Minio 时设置的磁盘,Minio 中所有的对象数据都会存储在 Drive 里。

5、Set

一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。

2.3 纠删码

纠删码是一种恢复丢失和损坏数据的数学算法,目前,纠删码技术在分布式存储系统中的应用主要有三类,阵列纠删码(Array Code: RAID5、RAID6等)、RS(Reed-Solomon)里德-所罗门类纠删码和LDPC(LowDensity Parity Check Code)低密度奇偶校验纠删码。Erasure Code是一种编码技术,它可以将n份原始数据,增加m份校验数据,并能通过n+m份中的任意n份原始数据,还原为原始数据。即如果有任意小于等于m份的校验数据失效,仍然能通过剩下的数据还原出来。

Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。

在同一集群内,MinIO 自己会自动生成若干纠删组(Set),用于分布存放桶数据。一个纠删组中的一定数量的磁盘发生的故障(故障磁盘的数量小于等于校验盘的数量),通过纠删码校验算法可以恢复出正确的数据。

2.4 Minio集群搭建

有两台服务器:

  • 192.168.3.17
  • 192.168.3.18

1、在每台服务器上创建minio目录

mkdir -p /home/minio/{run,data1,data2} && mkdir -p /etc/minio

2、下载或者上传下载好的minio二进制文件

官网下载地址:

https://dl.min.io/server/minio/release/linux-amd64/minio

3、集群启动文件配置

Minio默认9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口

注意 :

  • MINIO_ACCESS_KEY:用户名,长度最小是5个字符
  • MINIO_SECRET_KEY:密码,密码不能设置过于简单,不然minio会启动失败,长度最小是8个字符
  • –config-dir:指定集群配置文件目录
vim /home/minio/run/minio-run.sh

集群节点192.168.3.17内容为

#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
/home/minio/run/minio server --config-dir /etc/minio \
--address "192.168.3.17:9000" \
http://192.168.3.17/home/minio/data1 http://192.168.3.17/home/minio/data2 \
http://192.168.3.18/home/minio/data1 http://192.168.3.18/home/minio/data2 \

集群节点192.168.3.18内容为

#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=admin123
/home/minio/run/minio server --config-dir /etc/minio \
--address "192.168.3.18:9000" \
http://192.168.3.17/home/minio/data1 http://192.168.3.17/home/minio/data2 \
http://192.168.3.18/home/minio/data1 http://192.168.3.18/home/minio/data2 \

4、创建Minio.server,将minio加入系统服务

vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/home/minio/run/
ExecStart=/home/minio/run/minio-run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

修改配置文件后需要重加载配置

systemctl daemon-reload

5、权限修改

chmod +x /usr/lib/systemd/system/minio.service && chmod +x /home/minio/run/minio && chmod +x /home/minio/run/minio-run.sh

6、启动集群

systemctl start minio
systemctl enable minio

查看集群状态

systemctl status minio.service -l

三、Nginx反向代理与负载均衡

3.1 安装nginx

apt-get install nginx

nginx文件安装完成之后的文件位置:

  • /usr/sbin/nginx:主程序
  • /etc/nginx:存放配置文件
  • /usr/share/nginx:存放静态文件
  • /var/log/nginx:存放日志

为了保证安全性,将采用https形式访问minio,下面展示再服务器本地生成ssl证书,并且集成到nginx中。

3.2 创建SSL证书

1、创建证书目录

[root@localhost ~]# cd /etc/nginx/
[root@localhost nginx]# mkdir ssl
[root@localhost nginx]# cd ssl/

2、生成一个RSA密钥

[root@localhost ssl]#  openssl genrsa -des3 -out nginx.key 1024  #实际使用中看服务器性能,如果足够好也可以使用4096位秘钥
Generating RSA private key, 1024 bit long modulus
.......++++++
...++++++
e is 65537 (0x10001)
Enter pass phrase for nginx.key: 123456                #输入密码,自定义
Verifying - Enter pass phrase for nginx.key: 123456    #确认密码

3、生成一个证书请求

[root@localhost ssl]# openssl req -new -key nginx.key -out nginx.csr
Enter pass phrase for nginx.key:                             #输入刚刚创建的秘密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN                      #国家名称
State or Province Name (full name) []:JiangSu            #省
Locality Name (eg, city) [Default City]:NanJing          #市
Organization Name (eg, company) [Default Company Ltd]:Dwing     #公司
Organizational Unit Name (eg, section) []:Tech     #部门
Common Name (eg, your name or your server's hostname) []:*.generalstorage.com       #注意,此处应当填写你要部署的域名,如果是单个则直接添加即可,如果不确定,使用*,表示可以对所有generalstorage.com的子域名做认证
Email Address []:admin@generalstorage.com    #以域名结尾即可

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:        #是否设置密码,可以不写直接回车
An optional company name []:    #其他公司名称 可不写

4、创建不需要输入密码的RSA证书,否则每次reload、restart都需要输入密码

[root@localhost ssl]# openssl rsa -in nginx.key -out nginx_nopass.key
Enter pass phrase for nginx.key:        #之前RSA秘钥创建时的密码
writing RSA key

5、签发证书(由于是测试自己签发,实际应该将自己生成的csr文件提交给SSL认证机构认证)

[root@localhost ssl]# openssl x509 -req -days 3650 -in nginx.csr  -signkey nginx.key -out nginx.crt
Signature ok
subject=/C=CN/ST=JiangSu/L=NanJing/O=Dwing/OU=Tech/CN=*.generalstorage.com/emailAddress=admin@generalstorage.com
Getting Private key
Enter pass phrase for nginx.key:          #RSA创建时的密码

3.3 配置Nginx

server {
	listen      80 default_server;
	listen      [::]:80 default_server;
	server_name test.generalstorage.com;
	include 	/etc/nginx/default.d/*.conf;
	return      301 https://$server_name$request_uri;    #在80监听端口 配置跳转
}
server {
	listen       443 ssl http2 default_server;
	listen       [::]:443 ssl http2 default_server;
	server_name test.generalstorage.com;
	client_max_body_size 20M;
	charset utf-8;
	ssl_certificate "/etc/nginx/ssl/nginx.crt";   #
    ssl_certificate_key "/etc/nginx/ssl/nginx_nopass.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers on;
	location /{
		proxy_set_header  Host       $host;
        proxy_set_header  X-Real-IP    $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://minio_server;
	}
}
  • ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。
  • ssl_session_timeout 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
  • ssl_protocols指令用于启动特定的加密协议,nginx在1.1.13和1.0.12版本后默认是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1与TLSv1.2要确保OpenSSL >= 1.0.1 ,SSLv3 现在还有很多地方在用但有不少被攻击的漏洞。
  • ssl_ciphers选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher ‘RC4:HIGH:!aNULL:!MD5’(后面是你所指定的套件加密算法) 来看所支持算法。
  • ssl_prefer_server_ciphers on设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。

启动服务

[root@localhost nginx]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost nginx]# systemctl restart nginx

本地hosts绑定域名

192.168.3.17 test.generalstorage.com

四、minio页面展示

浏览器中输入:https://test.generalstorage.com/

输入账号/密码:admin/admin123

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 使用Java Minio搭建自己的文件系统详解

    目录 前言 1.Minio介绍 2.Minio安装与启动 3.Minio控制台创建存储桶 4.存储桶权限 5.控制台实现文件的上传与下载 6.使用Springboot与Minio整合实现文件的增删查改 6.1.创建项目 6.2.添加依赖 6.3.创建自定义属性与配置类 6.4.功能实现 6.4.1.文件上传 6.4.2.文件下载 6.4.3.查询全部文件 6.4.4.删除指定文件 总结 前言 最近接了一个项目,甲方不愿意买服务器,但是呢,项目又必须要用文件功能.所以很巧,最近又刚好看到了Mini

  • 解析SpringBoot 搭建基于 MinIO 的高性能存储服务的问题

    目录 1.什么是MinIO 2.使用docker搭建minio服务 2.1.GNU/Linux和macOS 2.2.windows 3.下面开始搭建springboot环境 1.什么是MinIO MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3云存储服务兼容.使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构. 官网地址:https://min.io/ 文档地址:https://docs.min.io/ 2.使用doc

  • 手把手教你SpringBoot轻松整合Minio

    前言 使用Spring Boot 可以非常方便.快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以. 提示:以下是本篇文章正文内容,下面案例可供参考 一.技术介绍 1.Minio是什么? MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5

  • Minio基本介绍及如何搭建Minio集群

    目录 一.Minio介绍 1.1 Minio简介 1.2 部署方式: 1.3 Minio官网 二.Minio集群 2.1 Minio集群原理 2.2 术语解释 2.3 纠删码 2.4 Minio集群搭建 三.Nginx反向代理与负载均衡 3.1 安装nginx 3.2 创建SSL证书 3.3 配置Nginx 四.minio页面展示 一.Minio介绍 1.1 Minio简介 MinIO 是高性能的对象存储,是为海量数据存储.人工智能.大数据分析而设计的,它完全兼容Amazon S3接口,单个对象

  • 详解docker搭建redis集群的环境搭建

    本文介绍了docker搭建redis集群的环境搭建,分享给大家,废话不多说,具体如下: 下载镜像 docker pull redis 准备配置文件 mkdir /home/docker/redis/ wget https://raw.githubusercontent.com/antirez/redis/3.0/redis.conf -O /home/docker/redis/redis.conf cd /home/docker/redis/ sed -i 's/# slaveof <maste

  • 使用sealos快速搭建K8s集群环境的过程

    目录 一.前言 二.sealos 三.准备环境 sealos 安装 虚拟机设置 网络 windows网络 虚拟机的网络 网卡配置 其他配置 RPM 源 四.安装开始 五.可能遇见的问题 sealos run的时候镜像下载缓慢 六.安装测试 安装Kubernetes Dashboard 一.前言 最近在做谷粒商城项目,搞到k8s了,但是跟这老师的方法一步一步做还是搭建不起来. 我不断的试错啊,各种bug都遇见了一个也没解决我真是啊哭死! 二.sealos 直到遇见一个大佬同学,告诉我sealos几

  • Docker如何使用nginx搭建tomcat集群(图文详解)

    首先创建tomcat的文件夹 ,为了方便docker的配置 我这里直接在根目录中创建第一步:创建文件夹:发布文件夹 mkdir -p /docker/tomcat/webapp8081 mkdir -p /docker/tomcat/webapp8082 mkdir -p /docker/tomcat/webapp8083 第二步:创建Tomcat容器(端口 可以根据自己的实际更换) docker run -d --name tomcat8081 -p 8081:8080 -v /docker/

  • Docker快速搭建Redis集群的方法示例

    什么是Redis集群 Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能. 节点 一个Redis集群通常由多个节点(node)组成,在刚开始的时候,每个节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将各个独立的节点连接起来,构成一个包含多个节点的集群. 集群配置 配置文件 下载配置文件:https://raw.githubusercontent.com/antirez/redis

  • 在linux上搭建Solr集群的方法

    什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求. SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心. Solr集群的系统架构 需要实现的solr集群架构 Zooke

  • 使用docker搭建kong集群操作

    docker容器下搭建kong的集群很简单,官网介绍的也很简单,初学者也许往往不知道如何去处理,经过本人的呕心沥血的琢磨,终于搭建出来了. 主要思想:不同的kong连接同一个数据库(就这么一句话) 难点:如何在不同的主机上用kong连接同一数据库 要求: 1.两台主机 172.16.100.101 172.16.100.102 步骤: 1.在101上安装数据库(这里就用cassandra) docker run -d --name kong-database \ -p 9042:9042 \ c

  • 基于docker搭建redis集群的方法

    下载redis镜像 docker pull yyyyttttwwww/redis 取别名 docker tag docker.io/yyyyttttwwww/redis redis 删除原先的镜像标签 docker rmi docker.io/yyyyttttwwww/redis 启动6个节点的redis容器  注意网络用的是net1 docker run -it -d --name r1 -p 5001:6379 --net=net1 --ip 172.19.0.101 redis bash

  • VirtualBox+Ubuntu16搭建Kubernetes集群的实现

    Kubernetes 运维之路 的开始当然少不了集群环境的搭建,这篇文章记录了我在一台机器使用 VirtualBox + Ubuntu 16 搭建 Kubernetes 的整个过程,包括其中遇到的一些问题以及解决办法. 关于 Kubernetes 下面是一段来自维基百科的关于 Kubernetes 的解释: Kubernetes(常简称为 K8s)是用于自动部署.扩展和管理「容器化(containerized)应用程序」的开源系统.该系统由 Google 设计并捐赠给 Cloud Native

  • VMware + Ubuntu18.04 搭建Hadoop集群环境的图文教程

    目录 前言 VMware克隆虚拟机(准备工作,克隆3台虚拟机,一台master,两台node) 1.创建Hadoop用户(在master,node1,node2执行) 2.更新apt下载源(在master,node1,node2执行) 3. 安装SSH.配置SSH免密登录 (在master,node1,node2执行) 4.安装Java环境 (在master,node1,node2执行) 修改主机名(在master,node1,node2执行) 修改IP映射(在master,node1,node

随机推荐