记录一次跨越16个月的minio版本升级与数据迁移

原文链接:

记录一次跨越16个月的minio版本升级与数据迁移-CSDN博客

背景

前段时间,minio官方爆出一个安全漏洞:
在minio集群部署中,minio会返回所有的环境变量,包括MINIO_SECRET_KEY和 MINIO_ROOT_PASSWORD,导致信息泄露,分布式部署的所有用户都会受到影响,建议用户尽快升级。
为安全起见,将minio升级到安全版本。

漏洞编号:CVE-2023-28432
漏洞信息链接:
https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q

安全版本:>=RELEASE.2023-03-20T20-16-18Z

升级与数据迁移方案

在升级时遇到一个问题:当前环境的版本太老,是2021年的老版本,要升级到安全版本RELEASE.2023-03-20T20-16-18Z,无法通过数据挂载的方式直接升级。

MinIO 网关和相关文件系统模式于 2020 年 7 月进入功能冻结状态。2022 年 2 月,MinIO 宣布弃用 MinIO 网关,随着弃用公告,MinIO还宣布该功能将在六个月内删除。

自发布2022-10-29T06-21-33Z起,MinIO网关和相关文件系统模式代码已被删除。 使用standalone 或 filesystem模式的老版本minio在升级到 RELEASE.2022-10-29T06-21-33Z 或更高版本时,会无法启动。

要升级到 RELEASE.2022-10-29T06-21-33Z 或更高版本,使用standalone 或 filesystem模式的用户必须先部署一个新的minio实例,然后手动将配置和数据内容迁移到新实例(注意新实例不能和原来老版本minio在相同的目录,如果是以磁盘为单位部署,则需要使用新的磁盘。总之,新版本在老版本数据盘上,是无法直接启动的)。

实验记录

1. 部署新旧2个版本minio实例

版本分别为:
minio.RELEASE.2021-12-09T06-19-41Z
minio.RELEASE.2023-03-24T21-41-23Z

如图:

2.部署nginx,配置个简单的nginx域名代理访问

minio2021配置文件:

upstream minio_console2021 {
    server 10.0.0.102:9001 max_fails=3 fail_timeout=5s;
}

server {
    listen          80;   
    server_name     minio2021.test.com;    #假域名,浏览器通过绑定windows电脑hosts访问
    access_log      /var/log/nginx/minio2021.test.com.log main;
    error_log       /var/log/nginx/minio2021.test.com_error.log warn;
    location / {
        proxy_http_version      1.1;
        proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
        proxy_set_header        Host  $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass              http://minio_console2021;
        expires                 0;
    }

}
[root@test101 conf.d]#

minio2023配置文件:

upstream minio_console2023 {
    server 10.0.0.102:9003 max_fails=3 fail_timeout=5s;
}

server {
    listen          80;   
    server_name     minio2023.test.com;    #假域名,浏览器通过绑定windows电脑hosts访问
    access_log      /var/log/nginx/minio2023.test.com.log main;
    error_log       /var/log/nginx/minio2023.test.com_error.log warn;
    location / {
        proxy_http_version      1.1;
        proxy_next_upstream     http_500 http_502 http_503 http_504 error timeout invalid_header;
        proxy_set_header        Host  $host;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass              http://minio_console2023;
        expires                 0;
    }

}
[root@test101 conf.d]#

3. 上传测试数据

在minio2021创建一个bucket并上传一些测试数据,minio2023数据为空:

4. 部署一个mc,做数据迁移

4.1 启动一个mc容器,并进入容器中

# docker run -it --entrypoint=/bin/sh minio/mc

4.2 分别设置minio2021和minio2023的alias

# mc alias set minio2021 http://10.0.0.102:9000   admin     admin@2021
##             别名         minio的后端链接端口  管理员账号  管理员密码
# mc alias set minio2023 http://10.0.0.102:9002 admin admin@2023 

注意:

如上注释,上述命令中的端口是用的minio后端端口,此处是docker部署且映射到主机改了端口,通过ip+端口链接的。如在K8s中,可通过service连接。
执行效果:

4.3 mc迁移数据

mc迁移数据通常有下面三种场景:

##1. 全量迁移,重名文件不覆盖,如bucket不存在,会自动创建
mc mirror  minio2021 minio2023

##2. 只迁移某个bucket,以test为例,迁移的目标bucket需要提前创建
mc mirror  minio2021/test  minio2023/test  #test要提前在minio2023中创建
 
##3. 加上--overwrite参数,覆盖重名文件
mc mirror  --overwrite  minio2021 minio2023
mc mirror  --overwrite  minio2021/test  minio2023/te

这里使用第一种方式,全量迁移:

迁移完成后,在minio2023上能看到minio的bucket了:

但此时在minio2023界面打开test2021这个bucket,却发现文件无法查看,一直处于loading状态:

此时会发现,nginx错误日志可能会没有报错,且如果绕开nginx代理,直接IP+端口访问,就会是正常的。

浏览器打开F12就会发现,有关于WebSocket的报错,访问bucket发起的是websocket请求:
 

所以,minio2023的nginx需要加上websocket代理:

#开启websocket
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

如图:

reload nginx后,再刷新界面,文件加载正常:

数据存与写的区别

进入minio2021和minio2023的数据目录,可以看到数据文件有很大的区别。

在minio2021的数据目录下,看到的是一个一个的文件,与web浏览器端看到的文件一一对应,这些文件可以直接从服务器下载到本地。

这就意味着如果minio的数据目录挂载到服务器本地,则可以直接通过写磁盘的方式将文件写入minio,在minio界面也能正常下载。

但当数据迁移到minio2023后,不管是从minio2021迁移过来的数据,还是新上传的数据,每一个文件,在2023版本的存储目录下都是一个目录,目录下存的是一个.meta元数据文件。

这就意味着在默认情况下,像2021老版本那样直接通过写磁盘的方式将文件写入minio,是行不通了。

minio2023与minio2021文件对比如下图:

至此,整个minio升级与数据迁移完成。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
针对minio数据迁移,可以通过使用硬件媒介或者网络传输的方式进行。其中,使用硬件媒介实现数据迁移的步骤如下: 1. 准备一个用于存储数据的目录,比如将minio数据目录置于/data/minio。 2. 确保minio数据目录与根目录不在同一个磁盘上,需要单独挂载。 3. 如果要在根目录下创建/data/minio目录,可以使用命令mkdir /data/minio来创建。 另外,还可以使用Rclone工具来实现minio数据迁移。使用Rclone进行数据迁移的步骤如下: 1. 准备好Rclone工具。 2. 确保网络通畅或者不同服务器之间可以进行数据迁移。 3. 使用Rclone工具进行minio数据迁移。这种方式安全、简单易用,但是可能会耗费较多的时间,且操作相对繁琐。 同时,需要注意的是,minio支持副本功能,即传入minio中的数据会复制两份,分别存储在规划好的/data/minio/data1和/data/minio/data2目录中。在没有设置纠删码的前提下,数据会存在两份。因此,在启动脚本中需要配置相应的存储位置和声明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [minio 部署、迁移、使用](https://blog.csdn.net/Jerry00713/article/details/130008107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Minio数据迁移](https://blog.csdn.net/qq_43429919/article/details/121390515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值