我有一个运行了多年的dokcer部署的MinIO实例,平时自己有什么服务需要object storage全都一股脑往里塞。像Mastodon的媒体,聊天平台的附件之类的东西,不知不觉就占了越来越大的空间了。
最初部署的时候,没好好看文档,把MinIO的数据放在Raid阵列上了,这是当时我存储空间最大的东西,想当然的就放上去了。随着服务和数据越来越多,不仅占用的空间越来越大,性能问题也非常严重,经常请求很少的时候就开始卡,传输数据量大或者写入多的时候经常出问题。最近实在忍不了了,准备把数据都迁移走。
因为是docker部署,其实只要把服务关了然后把docker-compose.yml跟数据全复制到新机器就行了,不过数据传输的时候服务只能保持下线状态,所有依赖它的其他服务全都会受到不同程度的影响。如果能做到无缝迁移,那肯定是最方便的。
MinIO并没有提供一个迁移的流程,但是可以通过Site Replication来创建镜像,在完成同步后再把反代指向镜像。这样还有一个好处,如果想要顺便改变MinIO的配置,比如增减node或者硬盘的数量,通过Site Replication也可以实现。
在迁移目标服务器运行一个全新的MinIO站点
要进行Site Replication,首先需要建立全新的站点。配置Site Replication的时候只能有至多一个站点有数据,因为要迁移现有的站点,所以只能建立全新的站点作为迁移的对象。
部署新站点的流程跟正常的部署没有区别,配置Site Replication并不需要有域名,同步完数据以后也可以直接把原来的反代指向这个站点,所以这个新站点只要能通过ip访问即可。Docker-compose部署可参考MinIO repo。
使用命令行工具mc配置Site Replication
成功部署新站点后就可以配置Site Replication了,MinIO的命令管理工具mc可以直接安装,也可以通过docker运行,如果想写进docker-compose.yml,可以在docker-compose.yml里加入:
minio-mc:
container_name: minio-mc
image: minio/mc:latest
entrypoint: /bin/sh
depends_on:
- minio
使用docker compose run --rm -it minio-mc
即可运行。
如果不想写在docker-compose.yml里,也可以在docker pull minio/mc
拉取镜像后使用docker run --rm -it --entrypoint=/bin/sh minio/mc
运行。
运行mc后,先通过mc alias set minioX URL Admin Password
命令给原站点和新站点分别设置alias,这里以minio1(原站点)和minio2(新站点)为例。
设置好alias可以用mc alias ls
检查,然后用mc admin info minio1
查看原站点的统计数据,mc admin info minio2
检查新站点是否为空,确认无误后配置Site Replication。
使用mc admin replicate add minio1 minio2
启动Site Replication,有数据的minio1必须在第一个。成功之后可以使用mc admin replicate info minio1
以及mc admin replicate status minio1
命令检查状态。
启动Site Replication之后,因为新站点还是空的,可以通过mc admin replicate resync start minio1 minio2
强制进行同步,同步进度可以用mc admin replicate resync status minio1 minio2
检查。
将反代或load balancer指向新站点并取消Site Replication
等数据完成同步之后,就可以更改反代或load balancer的设置把后端指向新站点了。不过这个时候Site Replication还是没有取消,实质上原站点变成了新站点的备份。如果不再需要原站点,可以用mc admin replicate rm minio1 --all --force
以及mc admin replicate rm minio2 --all --force
取消Site Replication。
Comments NOTHING