第13章 Docker应用实战-Docker部署MinIO

本文详细介绍了在Docker环境下部署MinIO,包括单节点部署、纠删码集群和分布式集群的方法,以及所需的环境准备和命令行操作。
摘要由CSDN通过智能技术生成

第13章 Docker应用实战-Docker部署MinIO

作者:王珂
邮箱:49186456@qq.com



前言

本节介绍如何在docker中快速搭建MinIO环境,包含部署单节点MinIO、MinIO纠删码集群、MinIO分布式集群。以上环境部署都是在CentOS7操作系统下进行,如果您使用的是Windows操作系统,尚未具备CentOS环境,可以选择在Windows中安装虚拟机Vmware,然后在Vmware中安装CentOS操作系统,具体步骤请查看我的另一篇教程《第1章 Docker应用实战-基础环境准备》进行安装。

Minio优点

  • 部署简单:一个single二进制文件即是一切,还可支持各种平台;

  • minio支持海量存储,可按zone扩展(原zone不受任何影响),支持单个对象最大5TB;

  • 低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存储一个1M的数据对象,实际占用磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为一个纠制码集合(Erasure Coding set)中的dlsk数量)。并且这种损坏恢复是基于单个对象的而不是基于整个存储卷的;

  • 读写性能优异;


一、环境准备

需要提前安装好docker, docker-compose。

软件版本说明
LinuxCentOS7
Docker24.0.1Docker社区版
MinIO2021.09.24

二、部署MinIO

2.1 部署单节点MinIO

通过docker命令部署

  1. 创建目录

我们规划将minio安装在/opt/mini-2021.09.24目录下,首先创建目录

mkdir -p /opt/minio-2021.09.24/{data,config}

创建完成的目录结构如下:

minio-2021.09.24/
├── config # 存放配置文件
└── data # 存放数据文件

  1. 执行docker命令创建容器
docker run --name minio-2021.09.24 -d \
-p 9000:9000 \
-p 9001:9001 \
--restart=always \
--privileged=true \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123" \
-v /opt/minio/minio-2021.09.24/data:/data \
-v /opt/minio/minio-2021.09.24/config:/root/.minio minio/minio:latest \
server --console-address ':9001' /data

说明:–console-address ‘:9001’ 指定了控制台的端口
高版本配置用户名密码用MINIO_ROOT_USER, MINIO_ROOT_PASSWORD

通过docker-compose部署

dokcer-compose.yaml 待验证

version: "3"
services:
  minio-2021.09.24
    container_name: minio-2021.09.24
    image: minio:latest
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - "./config:/root/.minio"
      - "./data:/data"
    environment:
      - MINIO_ACCESS_KEY=admin
      - MINIO_SECRET_KEY=admin
    restart: always
    command: ['server' '--console-address' ':9001' '/data']

2.2 部署纠删码MinIO

当为minio server传入多个本地磁盘参数时,minio server会自动启用纠删码模式。纠删码模式要求磁盘个数为偶数,单机模式要求4个磁盘。

  1. 创建目录
mkdir -p /opt/docker-compose/minio-2021.09.24/{config,data1,data2,data3,data4}

创建完成的目录结构如下:

minio-2021.09.24/
├── config # 存放配置文件
├── data1 # 存放数据文件
├── data2 # 存放数据文件
├── data3 # 存放数据文件
└── data4 # 存放数据文件

  1. 执行docker-compose命令

在minio-2021.09.24/目录下创建文件docker-compose.yaml

version: "3"
services:
  minio-2021.09.24
    container_name: minio-2021.09.24
    image: minio:latest
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - "./config:/root/.minio"
      - "./data1:/data1"
      - "./data2:/data2"
      - "./data3:/data3"
      - "./data4:/data4"
    environment:
      - MINIO_ACCESS_KEY=admin
      - MINIO_SECRET_KEY=admin
    restart: always
    command: ['server' '--console-address' ':9001' '/data{1...8}']

进入到目录minio-2021.09.24/,执行命令

docker-compose up -d

2.3 部署分布式MinIO

分布式MinIO可以让你将多块磁盘(甚至在不同机器上)组成一个存储服务。由于磁盘分布在不同的服务器上,因此避免了单点故障。
在这里插入图片描述

  • 数据保护

    分布式MinIO至少需要4个磁盘,使分布式MinIO自动引入纠删码功能。

  • 高可用

    如果是一个有N块硬盘的分布式MinIO,只要有N/2块硬盘在线,数据就是安全的。不过你需要至少N/2+1个硬盘来创建你的对象。

    例如:16个节点的MinIO集群,每个节点1块硬盘,就算有8台服务器宕机,这个集群仍然是可读的,不过需要9台服务器才能写数据。

一致性

在单机模式、分布式模式,所有读操作都严格遵守“read-after-write”一致性模型。

运行分布式MinIO

启动一个分布式MinIO,只需要把硬盘位置做为参数传给minio server命令即可。然后需要在其它节点运行相同的命令。

  • 分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立连接。为了实现这个,你需要在执行minioserver命令之前,先将access秘钥和secret秘钥export成环境变量。新版本使用MINIO_ROOT_USER和MINIO ROOT PASSWORD。

  • 分布式MinIO使用的磁盘里必须是干净的,里面没有数据。

  • 分布式MinIO里的时间差不能超过3秒。可以使用NTP来保证时间一致。

示例:

MinIO分布式集群有8个节点,每个节点1块磁盘。在8个节点上都运行如下命令:

export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456
minio server --address :900? --console-address :5000? \
             http://192.168.1.11/export1 http://192.168.1.11/export2 \
             http://192.168.1.13/export3 http://192.168.1.14/export4 \
             http://192.168.1.15/export5 http://192.168.1.16/export6 \
             http://192.168.1.17/export7 http://192.168.1.18/export8

请将?号替换成每个节点的序号

MinIO分布式集群有4个节点,每个节点4块磁盘。在4个节点上都运行如下命令:

export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456
minio server --address :900? --console-address :5000? \
             http://192.168.1.11/export11 http://192.168.1.11/export12 \
             http://192.168.1.11/export13 http://192.168.1.11/export14 \
             http://192.168.1.12/export21 http://192.168.1.12/export22 \
             http://192.168.1.12/export23 http://192.168.1.12/export24 \
             http://192.168.1.13/export31 http://192.168.1.11/export32 \
             http://192.168.1.13/export33 http://192.168.1.11/export34 \
             http://192.168.1.14/export41 http://192.168.1.12/export42 \
             http://192.168.1.14/export43 http://192.168.1.12/export44

请将?号替换成每个节点序号

脚本写法

export MINTO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
MINIO_HOME=/opt/minio-2021.09.24
MINIO_HOST=192.168.1.11

for i in {01..04}; do 
  nohup ${MINI0_HOME}/minio server --address ":90${i}" --console-address ":500${i}" http://${MINIO_HOST}:9001/mnt/data01 http://${MINIO_HOST}:9002/mnt/data02 http://${MINIO_HOST}:9003/mnt/data03 http://${MINIO_HOST}:9004/mnt/data04 > ${MINIO_HOME}/minio-90${i}.log 2>&1 &
done

统一入口

可以在前端添加Nginx负载均衡器做为统一入口

upstream minio {
  server 192.168.1.11:9001;
  server 192.168.1.11:9002;
  server 192.168.1.11:9003;
  server 192.168.1.11:9004:
}

upstream console {
  ip hash;
  server 192.168.1.12:50001;
  server 192.168.1.12:50002;
  server 192.168.1.12:50003:
  server 192.168.1.12:50004;
}

server {
    listen	9000;
	listen	[::]:9000;
	server_name localhost;
	
	# To allow special characters in headers
	ignore_invalid_headers off;
	# Allow any size file to be upload
	# 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 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;
		proxy_connect_timeout 300;
		# Defauit 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 {
    listen	50000;
	listen	[::]:50000;
	server_name localhost;
	
	# To allow special characters in headers
	ignore_invalid_headers off;
	# Allow any size file to be upload
	# 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 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;
		proxy_set_header X-Nginx-Proxy true;
		
		proxy_connect_timeout 300;
		# Defauit 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://console;
	}
}

三、MinIO命令

  • ls

  • mb 创建一个存储桶或文件

  • cat

  • pipe

  • share

  • cp

  • mirror

  • find

  • diff

  • rm

  • events

  • watch

  • policy

  • config

  • update

  • version


总结

本章介绍了在CentOS操作系统下通过docker命令和docker-compose部署minio,前提是安装好docker和docker-compose。minio文件保存在本地磁盘,首先在本地创建好文件存放目录,通过docker, docker-compose部署minio时注意挂在对应目录,然后执行对应命令即可。

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值