关于storage扩缩容的问题

勾选了两个回复的解决方案 :thinking: 这个应该不用全部回复的解决方案都要勾的吧…

它就会显示 1 个啦,你选了 B 的话 A 就自动取消啦

好的:ok_hand:

场景二,执行 balance data 后,30 个副本均匀分布在 5 台机器,所以有某个 partition 不在机器 A 上。
场景三,会影响读写,因为直接强制移走 AB,partition 1 只有 1 个副本了,选不了主。
正确的操作,应该是执行 balance remove A,B, 这个时候,会重新把 AB 上的副本迁移到其他3 台机器上。

1 个赞

好的,谢谢

你好HarrisChu,还有个问题,假如我的机器从3台扩容到5台,用什么方式可以判断数据是否已经同步完成呢 :thinking:

https://docs.nebula-graph.com.cn/2.6.1/8.service-tuning/load-balance/

balance data xxxx

好的谢谢

Hi HarrisChu,不好意思又打扰你了,我又有个问题 :joy:假如我storage的数据离线迁移到另一台机器上,或者说换了个ip:port重新加入集群,这时候我怎么能让metad知道这台机器上有哪些parts呢。

我现在试了下,在同样的数据路径上换了端口启动storaged加入metad,在partition distribution那里会提示 “No valid partition” 。

对了,我用的是2.0版本。不清楚最新版有没有解决类似的问题。

补充一下,我做测试的是单机集群,space创建的时候都指定了replica=1。

还有一种情况,我也想询问一下,如果是replica=3的3机器集群,其中有一台机器换了个ip加入集群(仅仅只是换了ip,数据还在),新ip上也会出现"No valid partition" 的情况吗,这种情况该怎么让meta知道我这个新ip上其实是有partition的…

机器上的 part 信息,在集群里是特别重要的,为了防止用户改错,我们没有放开。
对于你的问题:

  1. 单副本下,只能通过比较后门的方式去做,不建议。
  2. 多副本,A,B,C 3 副本,然后 C 换成了 D,数据还在的话,可以加入集群后,执行 balance remove C,就会把 D 加进来追数据了,然后因为本来就有数据,其实追数据很就好了。

hack 方式改 meta 信息,如何将一个机器的数据迁移到另一台机器 - #17,来自 dingding

好的,谢谢。

1.我想确认一下,多副本情况下,ABC 3副本,C换成D,此时C offline,D online。然后balance data remove C,此时D加入集群后是追加日志的方式同步数据,还是类似传送快照的方式同步数据?换句话说,D加入AB这个集群后,AB中的leader在给D同步数据时,是否会类似离线节点重新加入集群,通过比较D的log和leader发过来的log来判断是否追加日志。 而不是直接全量数据复制。

2.有考虑对ip和parts的映射关系做优化吗?比如加一层,维护一张storageID和parts的映射,以及hosts和storageID的映射,storage启动时需要在配置指定自己的storageID。这样一来,storage host就能随便换了。对于迁移或者换机器等需求都挺方便的。 :rofl:

1 个赞
  1. 是追加日志的。
  2. 一个是 part 信息对集群特别重要,动态的去改,有可能影响 raft 选举,另外就是这种场景多副本 balance 也更好一点,因为有可能在你下线过程中,有新的数据写进来,再加进来的节点还是要追数据的。

对于换机器的话,后面我们有 br 工具,你只要复制快照就好了。

1 个赞

好的,谢谢

下午好,我输入这条命令curl -Gs “http://xxx:xxx/replace?from=xxx&to=xxx”, 返回的错误信息是write to kvstore failed, operator() , 162 。我想问下这是什么错误呢 :sweat_smile: 看起来是MetaHttpReplaceHostHandler.cpp 第162的报错,但是不知道是拿part就错了还是raft同步错了。

是不是只能给leader角色的meta发这个http请求,我发现给leader机器上的meta发这个可以成功,follower角色会报这个错误

是的,只能发给 meta 的 leader

好的,那个链接说的是给所有meta发这条命令,有一点点误导 :rofl:

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。