一、升级Minio至 最新版的 Minio RELEASE.2024-03 文件对象会丢失
之前在文章中提到过使用了一个 2023年的新版时的一些改变, 但这会又有新的改变了。这种更新版本同时改变一些操作命令的方式真让一些搞自动部署SHELL脚本的开发者烦啊。
2023-02月时使用的当时的最新版 2023-02-27T18-10-45Z 需要增加另一个端口来访问控制台。今天更换成了更新版的 RELEASE.2024-03-07T00-43-48Z 。又有一些新的变化。
第一个问题:账号密码的设置
启动时收到提示:WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated. Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD 即在启动的shell脚本中配置MinIO Access和Secret密钥由原来的 MINIO_ACCESS_KEY、MINIO_SECRET_KEY 变为 MINIO_ROOT_USER 、MINIO_ROOT_PASSWORD。
第二个问题:从原有的minio库升级
如果你原来已经有一个minio库,升级minio镜像的话会提示 ERROR Unable to use the drive /data: Drive /data: found backend type fs, expected xl or xl-single - to migrate to a supported backend... 这是因为minio的升级要变更原来的sys配置,只需要将原来 minio_data 文件夹下的.minios.sys文件夹删除重新启动容器即可。
第三个问题:启动时会提示
Warning: The standard parity is set to 0. This can lead to data loss. 可以忽略,是因为单点部署时提示可能有数据丢失风险。
第四个问题:新版部署后不能读取旧版的数据。
这也是最严重的问题,原有的minio库升级,进行上面的问题解决之后,登录minio 控制台,可以看到所有的 bucket都加载了,但是发现 butkcet 的占用大小都为0!原来存储的对象不能兼容。我找到了官网看到了这段内容。
To upgrade to the https://github.com/minio/minio/releases/tag/RELEASE.2022-10-29T06-21-33Z or later release, those who were using the standalone or filesystem deployment modes must create a new Single-Node Single-Drive deployment and migrate settings and content to the new deployment.
即:升级到https://github.com/minio/minio/releases/tag/RELEASE.2022-10-29T06-21-33Z ,或更高版本,使用独立或文件系统部署模式的用户必须创建新的单节点单驱动器部署,并将设置和内容迁移到新的部署。所以在这个 2022-10-29T06-21-33Z 版本进行了重大的改变,已经不兼容原来的文件存储机制了。
官方有一些操作说明:https://min.io/docs/minio/container/operations/install-deploy-manage/migrate-fs-gateway.html 但这仍然是一个麻烦问题啊。另外MinIO的中国镜像地址为: https://dl.minio.org.cn/
二、Minio通过SDK连接时并不能设置连接超时时间
之前使用程序连接minio的时候,就发现程序的接口中根本没有办法实现连接超时时间的设置。
client = Minio(
endpoint="192.168.12.12:9000",
access_key=saccess_key,
secret_key=secret_key
)
整个Minio的调用接口除了这些参数外,还有session_token、secure、region、http_client、credentials,但都没有timeout相关的参数设置。因此通过SDK连接时根本无法实现设置连接超时时间的,导致默认的minio服务器在连接的时候如果服务器有异常,就会一直卡在连接minio上。
网上找到的minio的读写超时时间参数有以下两种方式设置:
1. 通过环境变量设置:
通过设置环境变量 MINIO_CONNECTION_TIMEOUT 和 MINIO_READ_TIMEOUT 来分别指定连接超时和读取超时的时间,单位为秒。
export MINIO_CONNECTION_TIMEOUT=3
export MINIO_READ_TIMEOUT=5
2. 通过配置文件设置:
可以在minio的配置文件~/.minio/config.json中设置连接超时和读取超时参数。在配置文件中,连接超时参数为timeout,读取超时参数为read_timeout。
{
"version": "18",
"credential": {
"accessKey": "YOUR_ACCESS_KEY",
"secretKey": "YOUR_SECRET_KEY"
},
"destination": {
"bucket": ""
},
"timeout": "3s",
"read_timeout": "5s"
}
这两种方式应该都是修改minio服务端的配置项,并不是在连接的客户端上设置,我目前尚未进行测试。但可确定的是在客户端调用时不能设置超时时间。