不同后端数据迁移

seafile支持在文件系统、s3、ceph、swift、阿里云oss等存储后端之间互相迁移数据。

在不同后端迁移数据需要三个步骤: 1.新建临时 seafile.conf 文件 2.运行迁移脚本 3.替换 seafile.conf

新建临时 seafile.conf 文件

创建一个新的 seafile.conf, 填写目的后端的配置 (需要包含 [block_backend], [commit_object_backend], [fs_object_backend]), 保存到一个目录下, 如 /opt (此目录需要用户具有读取权限)

 例如,要迁移到阿里云后端:
cat > seafile.conf << EOF
[block_backend]
name = oss
key_id = LTAIXX****
key = 4BY7WEN*****
bucket = seafblk
endpoint = oss-cn-shanghai.aliyuncs.com

[commit_object_backend]
name = oss
key_id = LTAIBk*****
key = s6jaAJev******
bucket = seafcomm
endpoint = oss-cn-shanghai.aliyuncs.com

[fs_object_backend]
name = oss
key_id = LTAIr9******
key = K95ajKksD******
bucket = seaffs
endpoint = oss-cn-shanghai.aliyuncs.com
EOF

mv seafile.conf /opt

将配置中的 key, bucket 等信息替换成自己的配置

如果您要迁移到本地文件系统,seafile.conf 临时配置示例如下:

cat > seafile.conf << EOF
[commit_object_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup

[fs_object_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup

[block_backend]
name = fs
# the dir configuration is the new seafile-data path
dir = /var/data_backup

EOF

mv seafile.conf /opt

迁移大量数据对象

如果存储中存在数百万个数据对象(尤其是 fs 对象),这时迁移所有对象可能需要花费很长时间,因为将花费超过一半的时间用于检查目标存储中是否存在对象。为此, 自专业版 7.0.8 起,我们增加了一项功能以加快检查速度。

这要求您在运行迁移脚本之前,设置此环境变量:

export OBJECT_LIST_FILE_PATH=/path/to/object/list/file

这样将会创建出3个对象列表文件:/path/to/object/list/file.commit,/path/to/object/list/file.fs, /path/to/object/list/file.blocks

第一次运行迁移脚本时,目标存储中现有的对象将会被记录到对应的对象列表文件中。 然后,当您第二次运行脚本时,它将从列表文件加载现有对象列表,而不是查询目标。 并且新迁移的对象也将添加到该文件中。 在迁移期间,迁移过程通过检查预加载的对象列表来检查对象是否存在,而不是询问目标,这将大大加快迁移过程。

建议您第一次运行迁移脚本时,在“获取对象列表”阶段中不要中断脚本。 否则,文件中的对象列表将不完整。

另一个加速迁移的技巧是增加迁移脚本中的工作线程数和任务队列大小。 您可以在以下代码中修改nworkermaxsize变量:

class ThreadPool(object):    
    def __init__(self, do_work, nworker=20):        
        self.do_work = do_work        
        self.nworker = nworker        
        self.task_queue = Queue.Queue(maxsize = 2000)

可以将工作线程数设置为相对较大的值,因为它们主要用来等待I/O操作完成。

运行迁移脚本

假设 seafile 的安装路径为 ~/haiwen, 进入 ~/haiwen/seafile-server-latest 目录下, 执行 migrate.sh, 参数为新建的 seafile.conf 所在目录,这里为 /opt

cd ~/haiwen/seafile-server-latest
./migrate.sh /opt

最后需要先停止seafile服务,再做一次增量迁移。

替换 seafile.conf

对象迁移完成后, 需要将 seafile.conf 替换成新后端的配置

mv /opt/seafile.conf ~/haiwen/conf

此时的 seafile.conf 中仅有关于后端的配置, 更多的配置项和配置方法,如 memcache等,可以参考 这篇文档 进行补充。 替换配置文件之后,重启seafile服务,就可以正常访问新后端的数据了。

Last modified by 徐家强, 2022-02-10

新建临时 seafile.conf 文件
迁移大量数据对象
运行迁移脚本
替换 seafile.conf