关于storage扩缩容,有几个问题想请教下官方。
背景:假设一个space的副本创建的时候设置为3,partition_num=10,现在有3台机器ABC。
场景一:是不是意味着此时ABC都有十个partition的副本,只不过leader均衡分布在3台机器上。
场景二:假设我扩容了两台storage DE,是不是意味着此时并不是所有机器都保存所有partition的副本。比如partition 1只保存在BCD三台机器上,不保存在AE上。
场景三:在场景二的基础上(有5个storage),假设partition 1 只存在ABC上,将storage AB移走,剩下CDE三台机器,此时partition 1是否只在C上有副本,读写partition1会有影响吗。
steam
2
场景一:BALANCE DATA
执行完的话,partition 是 ABC 都有 10 个的,同样的,BALANCE LEADER
之后 leader 会均匀分布在 3 台机器上
场景二、三:无论机器数增加还是减少,总副本数都不变 ,因为你一开始指定了 replica 是 3,假如你从 3 台删掉一台的话,就会报错(不合法报错,因为副本指定了 3)
你好steam,总副本数不变
的意思是不是,当replica=3时,即便有5台机器,也只有其中3台包含某个partition的数据。此时不同partition可能保存在不同的三台机器上。
勾选了两个回复的解决方案 这个应该不用全部回复的解决方案都要勾的吧…
steam
10
它就会显示 1 个啦,你选了 B 的话 A 就自动取消啦
场景二,执行 balance data 后,30 个副本均匀分布在 5 台机器,所以有某个 partition 不在机器 A 上。
场景三,会影响读写,因为直接强制移走 AB,partition 1 只有 1 个副本了,选不了主。
正确的操作,应该是执行 balance remove A,B, 这个时候,会重新把 AB 上的副本迁移到其他3 台机器上。
1 个赞
你好HarrisChu,还有个问题,假如我的机器从3台扩容到5台,用什么方式可以判断数据是否已经同步完成呢
Hi HarrisChu,不好意思又打扰你了,我又有个问题 假如我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 信息,在集群里是特别重要的,为了防止用户改错,我们没有放开。
对于你的问题:
- 单副本下,只能通过比较后门的方式去做,不建议。
- 多副本,A,B,C 3 副本,然后 C 换成了 D,数据还在的话,可以加入集群后,执行 balance remove C,就会把 D 加进来追数据了,然后因为本来就有数据,其实追数据很就好了。