nebula 迁移可以直接拷贝data目录么

使用 data 目录直接替换进行迁移,根据不同集群条件,有以下两种方法:

  1. 新旧集群各个 metad / storaged 机器的 IP 完全一致。这样只需要按 IP 一一对应,将数据文件夹从老机器拷贝到新机器,然后启动集群即可。
  2. 如果不能找到 IP 完全一致的集群,则仍有理论可行的的方法可以替换,但并未经过严格测试。
    1. 要保证新旧集群的拓扑结构(包括节点数量和对应目录结构)一致。比如老集群有 A(data1, data2), B(data1), C(data1),则新集群也得是 D(data1, data2), E(data1), F(data1),格式为 机器IP(数据文件夹1, 数据文件夹2...)

    2. 仍以上面例子来说,在迁移时,要做 A->D,B->E,C->F 的一一对应的文件夹拷贝。

    3. 拷贝完成后,要先启动 metad 服务,然后利用 metad 的 HTTP 服务,做 storaged 机器 host 替换。对每个 storaged 的 ip 逐一调用命令:curl -Gs "http://${metad_ip}:${metad_ ws_http_port}/replace?from=${from_storaged_ip}&to=${to_storaged_ip} ,如 curl -Gs "http://192.168.8.5:19559/replace?from=192.168.8.5&to=192.168.8.6

    4. 最后启动 storaged 服务和 graphd 服务。

注:方法二非常繁琐,通常情况下不建议尝试,你也可以使用官方的 back&restore 工具 br 来实现迁移。

参考其他方式:利用 snapshot 进行集群迁移

1 个赞

建议加一个命令,直接替换metad的分片信息和storaged的peer信息,就不用手动操作了,对数据迁移,集群搬迁,机器替换和ip变更都很友好。
最好还能加个指定leader转移功能,balance leader做不到流量均衡,有时候希望将某个流量大的leader转移到相对空闲的机器上,balance leade是做不到这点的。 :partying_face:
这两个功能一年用不到几次,但用上的时候确实很方便 :joy:

1 个赞

这两个问题:

  1. 替换 metad 中 storage peer 信息得用户指定映射,用户做这个映射,也是比较繁琐的。
  2. leader 选举涉及到 raft 选主逻辑,balance 只能做到尽力,很难去强力干涉 raft 把主一定选到某一个机器,毕竟还是要符合 raft 本身约束。
2 个赞