基于docker在Vmware上进行minio集群搭建记录以及错误提示
学习minio这一边为文章即可完搭配。
minio简单介绍
Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。
高性能:
作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到 55Gb/s 和 35Gb/s。并而 MinIO 支持一个对象文件可以是任意大小,从几kb到最大5T不等。
可扩展:
不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并且支持跨越多个数据中心。
云原生:
容器化、基于K8S的编排、多租户支持。
Amazon S3兼容:
使用 Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK 和 AWS CLI 访问Minio服务器。
可对接多种后端存储:
除了Minio自己的文件系统,还支持 DAS、 JBODs、NAS、Google云存储和 Azure Blob存储。
一些小的建议
这个博客高性能分布式对象存储——MinIO(环境部署)给了很多关于minio的基础知识介绍,至于其配置的minio集群部署,我没有实际验证,看样子是可以的。
关于minio我尝试了很多种办法,需要你对docker,linux操作,shell脚本语言有一些基础,可能会部署搭建成功,使用它后期可以存储一些对象文件,用于集群搭建和扩容都比较简单。搭建minio集群有我尝试了很多,这里把趟过的坑在在这里给大家展示一下,有一些参考价值,按照教程走下去,并不会部署成功。
参考相关博客:
docker修改ip方式:【【IT老齐210】20分钟基于Minio打造高可用分布式文件系统】 https://www.bilibili.com/video/BV14d4y1R7eT/?share_source=copy_web&vd_source=ee8c75a59f489cfad4f8ae44ef20e163
不敢说完全不对,通过修改docker容器ip的方式走下来,并没有成功搭建起该集群。
docker compose 方式:参考了很多指定compose方式的,除了单机部署的docker compose能够正常启动之外。比如下面这个博客灰信网-DOCKER搭建MINIO集群环境,现在的minio版本已经更新了很多了,虽然可以正常启动,但是控制台界面不是很友好了。需要你能正常安装docker-compose。
这个minio文件服务器-docker docker-compose 搭建部署以及使用大全给出了docker-compose yaml地址
参考 CentOS下 Docker、Docker Compose 的安装教程
正常安装compose后,参考本教程可以正常部署minio集群了,
下面是我在Vmware 上部署minio完成的基于docker分布式部署,直接添加了ngix,可以通过日志中nigx暴露的
console-api来浏览。
本文最终使用虚拟机进行配置部署,是一个比较完整的部署以及扩容文章了,很多文献也就
环境准备
对minio进行集群部署需要配置用到多个ip节点,在minio官网中提示,提示到要配置至少4台虚拟机设备才能正常启用纠删码。
给出Vmware的安装包,以及 centos操作系统,单机链接下载镜像,
Vmware 的 百度云分享链接
链接:https://pan.baidu.com/s/19wZuBMu0FJgUfg0We705wg?pwd=f4g7
提取码:f4g7
vmware安装
下载后一直下一步即可安装成功。
Vmware 安装centos 并配置4台虚拟机集群
打开Vmware,文件-新建虚拟机-选择自定义高级选项。然后按照这个博客CentOS6下搭建四台Linux系统,从配置虚拟机-到克隆-到修改主机名-配置/etc/hosts,修改为静态ip,这里面都给出了详细的教程,在进入centos 系统后,就可以参考我的方法来搭配minio集群系统了。
配置注意的要点
一定要在配置好一台主机之前来完成再进行克隆,这样部署的集群主机不会出现一些意外的情况,下面是在安装好主机后个人的一些配置下面总结一下。
1、修改静态ip地址;
2、修改hosts文件,配置集群的关键;
3、安装docker;
4、安装docker-compose;(本教程没有用到)
5、直接指令docker 启动minio系统。
Vmware修改静态ip地址 (亲测可用)
1、在自己的win10系统上 win+R ,输入cmd,进入终端输入 ipconfig 查看本地ip地址,ipv4就是ip地址。
2、打开vmware虚拟机,在菜单栏中选择“编辑”-“虚拟网络编辑器”,选择VM-net8模式
一定要取消dhcp服务
一定要取消dhcp服务
一定要取消dhcp服务
在右下角选择“更改设置”,其中子网ip设置在与物理主机在同一个网段。按照图片中的设置,单机确定即可。
启动当前虚拟机,右键终端进入后台,进入root模式
su
输入密码
******
设置静态ip,有同学安装过程中在network-scripts中不会有找到ifcfg-ens33这个文件。
vi /etc/sysconfig/network-scripts/ifcfg-ens33
这里有个最简单的办法,输入
ip addr
在lo字段下边紧跟的文件,对其编辑就可以。
编辑ifcfg-ens33文件,如下所示,直接copy复制,即可
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="8f279140-8163-4e67-bd00-ba1e61075000"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.80.112" # 设置的静态IP地址
NETMASK="255.255.255.0" # 子网掩码
GATEWAY="192.168.80.2" # 网关地址
DNS1="144.144.144.144" # DNS服务器
DNS2="8.8.8.8"
特别强调两点,DNS1和DNS2一定要添加,这会导致你是否能够ping通百度,在修改IPADDR后,一定要重启网络。
systemctl restart network
修改之后,可以通过
ping www.baidu.com
来检验是否修改成功,然后ip addr,查看ip地址时候修改,至此,ip地址修改完成。
2、修改hosts文件
要搭配minio集群,必须配置服务器host文件,它是相当于DNS域名解析器,每台主机都需要执行下面的指令。
vi /etc/hosts
```bash
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.120 minio-1
192.168.80.131 minio-2
192.168.80.132 minio-3
192.168.80.133 minio-4
查看主机名称:
hostname
修改主机名称:
hostnamectl set-hostname minio-1
3、安装docker 以及安装docker-compose
参考 CentOS下 Docker、Docker Compose 的安装教程
4、安装完成,docker version或者docker ps 用来查看docker是否安装成功
systemctl enable docker.service
关闭防火墙,
systemctl stop firewalld.service
时间同步工具ntp 安装和配置
yum -y install ntp ntpdate
ntpdate cn.pool.ntp.org
hwclock --systohc
集群配置完成,其实完成集群配置后,后面的minio部署起来也就很简单了。
单机安装
在Vmware的centos7.5操作系统上完成安装
minio在Linux系统上进行单机部署常用的一般有两种方式。通过 官网,linux下安装记录,下载二进制文件就可以顺利部署。因为我成功安装过,这里简化安装流程,就可以顺利完成单机部署。
从系统终端运行以下命令,使用该文件夹启动 ~/minio 本地 MinIO 实例。你可以将此路径替换为本地计算机上的另一个文件夹路径:
mkdir ~/minio
minio server ~/minio --console-address :9090
该命令在指定路径显式创建文件夹。mkdir
这minio server命令启动 MinIO 服务器。path 参数标识服务器在其中运行的文件夹。~/minio
该过程将其输出打印到系统控制台,类似于以下内容。
API: http://192.0.2.10:9000 http://127.0.0.1:9000
RootUser: minioadmin
RootPass: minioadmin
Console: http://192.0.2.10:9090 http://127.0.0.1:9090
RootUser: minioadmin
RootPass: minioadmin
Command-line: https://minio.org.cn/docs/minio/linux/reference/minio-mc.html
$ mc alias set myminio http://192.0.2.10:9000 minioadmin minioadmin
Documentation: https://minio.org.cn/docs/minio/linux/index.html
WARNING: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables.
集群部署
克隆集群操作
Vmware,克隆操作需要关闭虚拟机操作系统,右键选择”管理“,单击”克隆“,最终要的操作是
一定要选择原始minio-1克隆,因为这样会避免你搭建的集群找不到相关主机的错误,我在克隆了主机minio-1后,
可能在其克隆版本上进行了什么操作,导致搭建的集群无法访问到minio-2。部署的结果是这样。
克隆完成后的集群为:
搭配完成后,每台主机都需要修改ip,在每台主机上分别运行如下docker命令。
# minio-1(192.168.80.120)
docker run --name minio-01 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.120:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...4}/data{1...2}
# minio-2(192.168.80.131)
docker run --name minio-02 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.131:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...4}/data{1...2}
#minio-3(192.168.80.132)
docker run --name minio-03 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 minio/minio:latest server \
--address 192.168.80.132:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...4}/data{1...2}
#minio-4(192.168.80.133)
docker run --name minio-04 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.133:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...4}/data{1...2}
可以查看docker的启动日志。在浏览器中随便输入
192.168.80.120:9000,即可完成访问。
基于docker容器的minio扩容
常见的集群扩容方法可分为两类:水平扩容和垂直扩容
水平扩容:一般指通过增加节点数扩展系统性能;
垂直扩容:指提升各节点自身的性能,例如增加节点的磁盘存储空间。直接采用垂直扩容方式扩容MinIO集群的节点磁盘空间,会为集群运行带来若干问题,官方也并不推荐。因此本文主要介绍MinIO的两种水平扩容方式:对等扩容和联邦扩容。
1)对等扩容
首先,MinIO的极简设计理念使得MinIO分布式集群并不支持向集群中添加单个节点并进行自动调节的扩容方式,这是因为加入单个节点后所引发的数据均衡以及纠删组划分等问题会为整个集群带来复杂的调度和处理过程,并不利于维护。因此,MinIO提供了一种对等扩容的方式,即要求增加的节点数和磁盘数均需与原集群保持对等
例如原集群包含2个节点2块磁盘,则在扩容时必须同样增加2个节点2块磁盘(或为其倍数),以便系统维持相同的数据冗余SLA,从而极大地降低扩容的复杂性;
如上例,在扩容后,MinIO集群并不会对全部的4个节点进行完全的数据均衡,而是将原本的2个节点视作一个区域,新加入的2节点视作另一区域;
当有新对象上传时,集群将依据各区域的可用空间比例确定存放区域,在各区域内仍旧通过哈希算法确定对应的纠删组进行最终的存放。此外,集群进行一次对等扩容后,还可依据扩容规则继续进行对等扩容,但出于安全性考虑,集群的最大节点数一般不得超过32个
本次扩容是基于docker指令来进行的。具体的主机配置方式与之前一样,只不过,相应的docker指令会有所不同,本次扩容的节点安排方式:
在配置的过程中,先查看已有的容器,然后删除原始的容器,然后再运行。
容器删除方式:全部删除。
docker ps -a
docker rm -f minio-1
IP地址 | 主机名称 | 备注 |
---|---|---|
192.168.80.112 | minio-1 | 原始节点 |
192.168.80.111 | minio-2 | 原始节点 |
192.168.80.113 | minio-3 | 扩容节点 |
192.168.80.114 | minio-4 | 扩容节点 |
先启动原始节点,启动脚本为: |
docker run --name minio-01 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.112:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...2}/data{1...2} \
http://minio-{1...2}/data{1...2}
#在docker run过程中,会出现端口/data1被占用的状态,可以是先删除,再启动,即可解决。
rm -rf /data/*
docker run --name minio-02 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.111:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...2}/data{1...2}
在另外两个服务器上启动扩容的脚本
docker run --name minio-03 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.113:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...2}/data{1...2} \
http://minio-{3...4}/data{1...2}
docker run --name minio-04 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.80.114:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...2}/data{1...2} \
http://minio-{3...4}/data{1...2}
扩容后,浏览器的显示
2)联邦扩容
MinIO官方提供了另一种扩容机制——联邦扩容,即通过引入etcd,将多个MinIO分布式集群在逻辑上组成一个联邦,对外以一个整体提供服务,并提供统一的命名空间。MinIO联邦集群的架构如下图所示:
- 其中,etcd是一个开源的分布式键值存储数据库,在联邦中用于记录存储桶IP地址。
- 联邦内的各个集群其数据存储以及一致性维护仍由各集群自行管理,联邦只是对外提供一个整体逻辑视图。
- 通过连接到联邦中任一集群的任一节点,可以查询并访问联邦内所有集群的全部数据,由此获得了逻辑上的空间扩大感。
- 但实际上,对于一个外部应用访问,联邦需依赖etcd定位到存储桶的实际存储节点,再进行数据访问,联邦则对外屏蔽了桶IP查找和定位过程,从而在逻辑上对外形成了一个统一整体。因此,etcd实际上起到了类似路由寻址的效果。
- 完整的联邦扩容集群搭建目前还未完成。
- 具体可以参考高性能分布式对象存储——MinIO实战操作(MinIO扩容)