使用docker完成minio服务部署扩容备份迁移生产实践文档

一、minio服务扩容方案

当服务器存储空间不足的时候,需要进行扩容,扩容过程中需要短暂停机时间,预计在一小时内能够完成和恢复

统一注意事项

强烈建议为部署中的所有节点选择基本相似的硬件配置。确保硬件(CPU、内存、主板、存储适配器)和软件(操作系统、内核设置、系统服务)在所有节点上保持一致。

由于文件服务用于文件上传与下载,需要选择一个存储空间大的磁盘(生产环境可能不一样,因此需要检查),查看服务器的最大磁盘空间:df -h 例如

img

由上图可以看出,/opt 目录磁盘空间最大,检查docker-compose的minio映射目录,若生产磁盘目录也是/opt最大,则用默认的docker-compose;

若生产的最大磁盘目录为其他,例如发现磁盘空间最大根目录为 /usr 则需要修改docker-compose中的对应数据映射目录

# minio集群部署模式下
- /opt/CommandCenter/minio/data1:/data1  [修改为]  - /usr/CommandCenter/minio/data1:/data1
- /opt/CommandCenter/minio/data2:/data2  [修改为]  - /usr/CommandCenter/minio/data2:/data2

1.1 第一阶段 部署[3]个节点

首先检查部署所在服务器的是否开放 9000、9001 端口,若没有开放则需要开放9000、9001 端口

# 查看开放的端口号,若列表中没有9000、9001则需要开放9000、9001 端口
firewall-cmd --list-ports#开放9000端口,为minio后端代码访问端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#开放9001端口,为minio后台管理界面端口
firewall-cmd --zone=public --add-port=9001/tcp --permanent# 重启防火墙,使开放端口生效
firewall-cmd --reload

这里以部署3台服务器为示例演示集群部署,生产以实际环境服务器为准:

服务器别名服务器ip地址后端代码访问端口号后台管理界面端口号
minio0116.123.11.1690009001
minio0216.123.11.1590009001
minio0316.123.11.1490009001

在【portainer】中分别在【3】台服务器上运行此 docker-compose 文件(集群中每个docker-compose内容稍有不同)即可完 minio 的集群部署;

每台服务器的minio的docker-compose.yml文件为:主要按照实际文件修改: hostname 、 container_name 、 extra_hosts

注意:每台服务器中的 docker-compose.yaml 文件有 hostname 、 container_name 、 extra_hosts属性有区别,集群中每台minio的用户名和密码需要保持一致

version: "3.0"
services:minio:# 最新版的minioimage: quay.io/minio/minio# 这里的 minio0{1...3}代表:部署3个节点(即3台服务器), data{1...2}代表:每个节点分别映射两个存储文件夹command: server --address ":9000" --console-address ":9001" http://minio0{1...3}/data{1...2}restart: alwayshostname: minio01 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致container_name: minio01 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致environment:# 集群中每个节点的用户名和密码需保持一致MINIO_ROOT_USER: xxxxxxMINIO_ROOT_PASSWORD: xxxxxxxMINIO_PROMETHEUS_AUTH_TYPE: publicTZ: Asia/Shanghaiextra_hosts:# 这里分别填写,集群中每台服务器的ip以及自定义hostname- "minio01:16.123.11.16"- "minio02:16.123.11.15"- "minio03:16.123.11.14"volumes:- /opt/CommandCenter/minio/data1:/data1- /opt/CommandCenter/minio/data2:/data2#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:ro#将外面的时间挂载到容器内部,权限只读,容器内不可修改- /etc/timezone:/etc/timezone:ronetwork_mode: "host"logging:driver: "json-file"options:max-size: "50M"max-file: "10"deploy:resources:limits:cpus: "4"memory: 4096Mreservations:memory: 2048M

**验证:**部署完成后,在浏览器访问 http://ip:9000 ,ip为集群中的任意一台服务器ip,docker-compose中输入的MINIO_ROOT_USER对应值为用户名,MINIO_ROOT_PASSWORD对应值为密码

登录后选择菜单【Monitoring】—》【Metrics】查看集群情况,Servers对应在线节点数量,Drives代表磁盘在线数量

1.1.1 请检查nginx配置文件中是否包含以下配置,若没有则新增;若新增,则需要重启nginx
 # minio 集群中的节点upstream minioCluster{server  16.123.11.16:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.15:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.14:9000; #将127.0.0.1修改为minio服务备节点所在机器IP}server {listen       9002;server_name  127.0.0.1; #此处填写当前nginx服务所在的服务器ipclient_max_body_size 4096M;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://minioCluster;proxy_set_header x-real-ip $remote_addr;proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;proxy_set_header host $http_host;}}

1.2 第二阶段 当存储容量不足的时候,再部署[3]个节点实现扩容

注意:不支持单独添加一个节点组成新的集群

首先检查部署所在服务器的是否开放 9000、9001 端口,若没有开放则需要开放9000、9001 端口

# 查看开放的端口号,若列表中没有9000、9001则需要开放9000、9001 端口
firewall-cmd --list-ports#开放9000端口,为minio后端代码访问端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
#开放9001端口,为minio后台管理界面端口
firewall-cmd --zone=public --add-port=9001/tcp --permanent# 重启防火墙,使开放端口生效
firewall-cmd --reload

这里以部署3台服务器为示例演示集群部署,生产以实际环境服务器为准:

服务器别名服务器ip地址后端代码访问端口号后台管理界面端口号
minio0416.123.11.1390009001
minio0516.123.11.1290009001
minio0616.123.11.1190009001

在【portainer】中分别在【3】台服务器上运行此 docker-compose 文件(集群中每个docker-compose内容稍有不同)即可完 minio 的集群部署;

每台服务器的minio的docker-compose.yml文件为:

注意:每台服务器中的 docker-compose.yaml 文件有 hostname 、 container_name 、 extra_hosts属性有区别,集群中每台minio的用户名和密码需要保持一致

注意 **command、extra_hosts、**hostname 、 container_name 对内的变化。

扩容的时候【每个节点(包含之前的节点)】都需要按照此处来修改,然后重新部署每个节点

version: "3.0"
services:minio:# minio最新版quay.io/minio/minio# 这里的 minio0{1...3}代表:部署3个节点(即2台服务器), data{1...2}代表:每个节点分别映射两个存储文件夹command: server --address ":9000" --console-address ":9001" http://minio0{1...3}/data{1...2} http://minio0{4...6}/data{1...2}restart: alwayshostname: minio03 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致container_name: minio03 # 注意:每个节点修改成不同的名字,与下面的 extra_hosts 保持名称一致environment:# 集群中每个节点的用户名和密码需保持一致MINIO_ROOT_USER: xxxxxxxxMINIO_ROOT_PASSWORD: xxxxxxxxxxMINIO_PROMETHEUS_AUTH_TYPE: publicTZ: Asia/Shanghaiextra_hosts:# 这里分别填写,集群中每台服务器的ip以及自定义hostname- "minio01:16.123.11.16"- "minio02:16.123.11.15"- "minio03:16.123.11.14"- "minio04:16.123.11.13"- "minio05:16.123.11.12"- "minio06:16.123.11.11"volumes:- /opt/CommandCenter/minio/data1:/data1- /opt/CommandCenter/minio/data2:/data2#将外边时间直接挂载到容器内部,权限只读- /etc/localtime:/etc/localtime:ro#将外面的时间挂载到容器内部,权限只读,容器内不可修改- /etc/timezone:/etc/timezone:ronetwork_mode: "host"logging:driver: "json-file"options:max-size: "50M"max-file: "10"deploy:resources:limits:cpus: "4"memory: 4096Mreservations:memory: 2048M

**验证:**部署完成后,在浏览器访问 http://ip:9000 ,ip为集群中的任意一台服务器ip,docker-compose中输入的MINIO_ROOT_USER对应值为用户名,MINIO_ROOT_PASSWORD对应值为密码

登录后选择菜单【Monitoring】—》【Metrics】查看集群情况,Servers对应在线节点数量,Drives代表磁盘在线数量

注意:修改nginx的配置,将新增的节点添加到此处,然后重启nginx

 # minio 集群中的节点upstream minioCluster{server  16.123.11.16:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.15:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.14:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.13:9000; #将127.0.0.1修改为minio服务主节点所在机器IPserver  16.123.11.12:9000; #将127.0.0.1修改为minio服务备节点所在机器IPserver  16.123.11.11:9000; #将127.0.0.1修改为minio服务备节点所在机器IP}server {listen       9002;server_name  127.0.0.1; #此处填写当前nginx服务所在的服务器ipclient_max_body_size 4096M;#charset koi8-r;#access_log  logs/host.access.log  main;location / {proxy_pass http://minioCluster;proxy_set_header x-real-ip $remote_addr;proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;proxy_set_header host $http_host;}}

二、minio数据备份与迁移

文件服务为集群部署,自带数据备份功能:

比如部署了N个节点,当存活的节点有 大于 N/2 的节点存活的时候,都能够获取到完整的数据并且提供服务

多节点/驱动器级别的可靠性,具有可配置的容忍度,最多可丢失 1/2 所有节点/驱动器 。

2.1 检查/安装 mc客户端

数据的备份与迁移都依赖于mc客户端,mc客户端源于minio官方,需要确认mc客户端已经安装

# 查看是否安装mc
mc --help
# 若出现命令未发现,则说明mc没有安装,需要安装mc客户端
[root@localhost minio-binaries]# mc --help
-bash: mc: command not found# 若出现以下命令则说明已经安装,按键盘q键则可以退出
[root@localhost minio-binaries]# mc --help
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── (q)uit/esc
NAME:                                                                           mc - MinIO Client for object storage and filesystems.                         USAGE:                                                                          mc [FLAGS] COMMAND [COMMAND FLAGS | -h] [ARGUMENTS...]                        COMMANDS:                                                                       alias      manage server credentials in configuration file                    ls         list buckets and objects                                           mb         make a bucket                                                      rb         remove a bucket                                                    cp         copy objects                                                       mv         move objects                                                       rm         remove object(s)                                                   mirror     synchronize object(s) to a remote site                             cat        display object contents                                            head       display first 'n' lines of an object                               pipe       stream STDIN to an object                                          find       search for objects                                                 sql        run sql queries on objects                                         stat       show object metadata                                               tree       list buckets and objects in a tree format                          du         summarize disk usage recursively                                   retention  set retention for object(s)                                        legalhold  manage legal hold for object(s)                                    support    support related commands                                           license    license related commands                                           share      generate URL for temporary access to an object                     version    manage bucket versioning                                           ilm        manage bucket lifecycle                                            quota      manage bucket quota                                                encrypt    manage bucket encryption config                                    event      manage object notifications                                        watch      listen for object notification events                              undo       undo PUT/DELETE operations                                         anonymous  manage anonymous access to buckets and objects                     tag        manage tags for bucket and object(s)                               diff       list differences in object name, size, and date between two bucketsreplicate  configure server side bucket replication                           admin      manage MinIO servers                                               
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 0%   

可以通过 在线/离线 模式根据不同的服务器架构安装mc客户端:

在线安装mc客户端:

当服务架构为linux-amd64的时候,安装mc客户端为:

curl https://dl.minio.org.cn/client/mc/release/linux-amd64/mc \--create-dirs \-o /usr/local/minio-binaries/mcchmod +x /usr/local/minio-binaries/mc
export PATH=$PATH:/usr/local/minio-binaries/mc --help

当服务器架构为linux-arm64的时候,安装mc客户端为:

curl https://dl.minio.org.cn/client/mc/release/linux-arm64/mc \--create-dirs \-o /usr/local/minio-binaries/mcchmod +x /usr/local/minio-binaries/mc
export PATH=$PATH:/usr/local/minio-binaries/mc --help

离线安装mc客户端:

当服务架构为linux-amd64的时候,安装mc客户端为:

1.创建目标文件夹
mkdir -p /usr/local/minio-binaries
2.从安装包中取出linux-amd64对应的 mc 安装包上传到 /usr/local/minio-binaries 目录下
3.赋予mc客户端执行权限
chmod +x /usr/local/minio-binaries/mc
4.添加环境变量
export PATH=$PATH:/usr/local/minio-binaries/

当服务器架构为linux-arm64的时候,安装mc客户端为:

1.创建目标文件夹
mkdir -p /usr/local/minio-binaries
2.从安装包中取出linux-arm64对应的 mc 安装包上传到 /usr/local/minio-binaries 目录下
3.赋予mc客户端执行权限
chmod +x /usr/local/minio-binaries/mc
4.添加环境变量
export PATH=$PATH:/usr/local/minio-binaries/

2.2 minio数据备份与迁移方案

设置存储服务器别名

# 在安装了mc客户端的服务器上执行设置服务别名
mc alias set minio_A http://127.0.0.1:9002 yourusername youruserpassword说明:
minio_A 为自定义存储服务器别名
需要将127.0.0.1替换 nginx 的ip或vip(vip优先)
yourusername代表minio的用户名
youruserpassword代表minio的密码# 查看已经设置的别名
mc alias list
2.2.1 将数据【备份】到本地其他磁盘
# 创建本地备份目录,注意备份目录磁盘空间需要大于本次备份的数据 df -h 查看磁盘空间
mkdir -p /opt/minio/bakdata
# 将minio中存储的数据全部备份到本地
mc cp --recursive minio_A/ /opt/minio/bakdata/说明 minio_A 自定义的别名若需要【指定备份某个桶】的数据,则执行 mc cp --recursive minio_A/mybucket/ /opt/minio/bakdata/mybucket/
mybucket为桶的名称
2.2.2 将备份的数据上传到新的minio集群上面
# 这里将minio_A备份的数据,上传到minio_B上面,先设置minio_B的别名
mc alias set minio_B http://127.0.0.1:9002 yourusername youruserpassword
# 查看已经设置的别名
mc alias list# 查看minio_A服务上面所有桶的名称
mc ls  minio_A
# 查看minio_B服务上面所有桶的名称
mc ls  minio_B若minio_B中缺少minio_A中的桶数据,则需要登录到新的桶后台新增minio_B中缺少的桶# 将minio_A备份的[全部]数据,上传到minio_B上面,注意备份文件目录路径需以'/'结尾
mc cp --recursive /opt/minio/bakdata/ minio_B
注意:迁移过程中若出现目录不存在,则登录到新的集群去创建(Bucket `xxxxxxxx` does not exist)# 将minio_A备份[mybucket桶]的数据,上传到minio_B[mybucket桶]上面,注意备份文件目录路径需以'/'结尾
mc cp --recursive /opt/minio/bakdata/mybucket/ minio_B/mybucket/
注意:迁移过程中若出现目录不存在,则登录到新的集群去创建(Bucket `xxxxxxxx` does not exist)

注意:迁移过程中若出现提示目录不存在,则登录到新的集群去创建(Bucket xxxxxxxx does not exist)

**创建桶:**浏览器登录管理后台 http://ip:9000 ip为新集群中的任意一台minio所在服务的ip,在docker-compose中的 MINIO_ROOT_USER和MINIO_ROOT_PASSWORD分别对应登录的用户名和密码

img

2.2.3 将一个minio中的数据区【迁移】到另外一个新的minio集群
# 查看minio_A服务上面所有桶的名称
mc ls  minio_A
# 查看minio_B服务上面所有桶的名称
mc ls  minio_B若minio_B中缺少minio_A中的桶数据,则需要登录到新的桶后台新增minio_B中缺少的桶#将服务器A上名为“mybucket”的桶的数据迁移到服务器B的“mybucket”桶中
mc cp --recursive minio_A/mybucket/ minio_B/mybucket/
注意:若提示(Bucket `xxxxxxxx` does not exist)则需要登录到新的集群去创建名为mybucket的桶#将服务器A上面的所有数据迁移到服务器B上面
mc cp --recursive minio_A minio_B
注意:若提示(Bucket `xxxxxxxx` does not exist)则需要登录到新的集群去创建名为mybucket的桶

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/146140.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是物联网智慧公厕?

在当今科技快速发展的背景下,具备全感知、可靠传输、智能处理三大特点的物联网技术,正逐渐渗透到各个领域。而智慧公厕作为其中的一个创新应用,正逐渐受到市场的关注和重视。 什么是物联网智慧公厕?物联网智慧公厕是指通过物联网…

SmartX 边缘计算解决方案:简单稳定,支持各类应用负载

在《一文了解近端边缘 IT 基础架构技术需求》文章中,我们为大家分析了边缘应用对 IT 基础架构的技术要求,以及为什么超融合架构是支持边缘场景的最佳选择。值得一提的是,IDC 近日发布的《中国软件定义存储(SDS)及超融合…

Eclipse 主网即将上线迎空投预期,Zepoch 节点或成受益者?

目前,Zepoch节点空投页面中,模块化Layer2 Rollup项目Eclipse出现在其空投列表中。 配合近期Eclipse宣布了其将由SVM提供支持的Layer2主网架构,并将在今年年底上线主网的消息后,不免引发两点猜测:一个是Eclipse或将在不…

【数据代理+事件处理+计算属性与监视+绑定样式+条件渲染】

数据代理事件处理计算属性与监视绑定样式条件渲染 1 数据代理1.1 回顾Object.defineProperty方法1.2 数据代理 2 事件处理2.1 绑定监听2.2 事件修饰符2.3 键盘事件 3 计算属性与监视3.1 计算属性3.2 监视属性(侦视属性)3.3 watch对比computed 4 绑定样式4.1 绑定class样式4.2 绑…

[尚硅谷React笔记]——第2章 React面向组件编程

目录: 基本理解和使用: 使用React开发者工具调试函数式组件复习类的基本知识类式组件组件三大核心属性1: state 复习类中方法this指向: 复习bind函数:解决changeWeather中this指向问题:一般写法:state.htm…

进程之间的通信方式(共享存储,消息传递,管道通信)

进程通信 进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互。进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。为了保证安全,一个进程不能直接访问另一…

前端开发和后端开发的一些建议

前端开发和后端开发是Web开发的两个方向 前端开发主要负责实现用户在浏览器上看到的界面和交互体验,包括HTML、CSS和JavaScript等技术。后端开发主要负责处理服务器端的逻辑和数据,包括数据库操作、服务器配置和接口开发等技术。 前端开发 前端开发需…

Python-Flask:编写自动化连接demo脚本:v1.0.0

主函数: # _*_ Coding : UTF-8 _*_ # Time : 13:14 # Author : YYZ # File : Flask # Project : Python_Project_爬虫 import jsonfrom flask import Flask,request,jsonify import sshapi Flask(__name__)# methods: 指定请求方式 接口解析参数host host_info[…

产品经理如何科学的进行需求调研?

导语:作为产品经理,需求调研是开展工作的重要环节之一。科学、有效地进行需求调研不仅可以帮助产品经理更好地了解用户需求,还能指导产品设计和功能开发,提升产品的竞争力。本文将介绍几种科学的方法和技巧,帮助产品经…

【接口技术】总线课堂习题

1:CPU在执行OUT DX, AL指令时,()寄存器的内容送到地址总线上 A,DL B,DX C,AX D,DL 解答:B out指令是把AL的数据输出到DX的端口,因此AL寄存器的内容送到…

C++17中std::filesystem::directory_entry的使用

C17引入了std::filesystem库(文件系统库, filesystem library)。这里整理下std::filesystem::directory_entry的使用。 std::filesystem::directory_entry,目录项,获取文件属性。此directory_entry类主要用法包括: (1).构造函数、…

虚拟车衣VR云展厅平台扩大了展览的触达范围

传统展厅主要是以静态陈列的形式来传达内容,主要的展示形式有图片、视频等,具有一定的局限性,体验感较差,客户往往不能深入地了解信息和细节内容。 VR全景看车是通过虚拟现实技术实现逼真的汽车观赏和试乘体验。消费者可以通过智能…

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理②

嵌入式Linux应用开发-基础知识-第十八章系统对中断的处理② 第十八章 Linux系统对中断的处理 ②18.3 Linux中断系统中的重要数据结构18.3.1 irq_desc数组18.3.2 irqaction结构体18.3.3 irq_data结构体18.3.4 irq_domain结构体18.3.5 irq_chip结构体 18.4 在设备树中指定中断_在…

Spring Boot的自动装配中的@ConditionalOnBean条件装配注解在Spring启动过程中,是如何保证处理顺序靠后的

前言 为什么Spring Boot条件注解那么多,而标题中是ConditionalOnBean呢? 因为,相比之下我们用的比较多的条件装配注解也就是ConditionalOnClass、ConditionalOnBean了,而ConditionalOnClass对顺序并不敏感(说白了就是判…

Halcon中灰度直方图的使用与学习

目录 第一步:当前打开窗口的显示灰度图或者mono图片第二步:激活后,我们可以去调整调整右边直方图灰阶值的中蓝色和红色竖线,获取左边图上的灰阶值的范围内的特征显示。第三步:插入代码:总结:它的直观目的,就是查看灰度的分布情况!灰度直方图,是我们经常使用,抓取不同…

matlab 计算数组中所有值的均值

目录 一、概述1、算法概述2、主要函数3、输入参数4、输出参数二、代码实现三、结果展示四、参考链接本文由CSDN点云侠翻译,放入付费专栏只为防不要脸的爬虫。专栏值钱的不是本文,切勿因本文而订阅。 一、概述 1、算法概述 矩阵元素的平均值或均值。 2、主要函数<

使用VBA实现快速模糊查询数据

实例需求&#xff1a;基础数据保存在Database工作表中&#xff0c;如下图所示。 基础数据有37个字段&#xff0c;上图仅展示部分字段内容&#xff0c;下图中黄色字段为需要提取的数据字段。 在Search工作表B1单元格输入查询关键字Title和Genre字段中搜索关键字&#xff0c;包…

Spring Boot事件机制浅析

1、概述 在设计模式中&#xff0c;观察者模式是一个比较常用的设计模式。维基百科解释如下&#xff1a; 观察者模式是软件设计模式的一种。在此种模式中&#xff0c;一个目标对象管理所有相依于它的观察者对象&#xff0c;并且在它本身的状态改变时主动发出通知。这通常透过呼…

五分钟k8s入门到实战-应用配置

ConfigMap.png 背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力&#xff0c;x现在可以满足基本的应用开发需求了。 现在我们需要更进一步&#xff0c;使用 k8s 提供的一些其他对象来标准化我的应用开发。首先就是 ConfigMap&#xff0c;从它的名…

C++ 强制类型转换(int double)、查看数据类型、自动决定类型、三元表达式、取反、

强制类型转换&#xff08; int 与 double&#xff09; #include <iostream> using namespace std;int main() {// 数据类型转换char c1;short s1;int n 1;long l 1;float f 1;double d 1;int p 0;int cc (int)c;// 注意&#xff1a;字符 转 整形时 是有问题的// “…