Closed heroWang closed 6 years ago
以前有过类似的需求,但没有实现,简单说下我的思路,不一定对。
锁定config是为了让写操作等待,从而避免op执行顺序错乱吧? 其实就算不锁定,在运维时间写操作少的时候,并且oplog已经跟上的情况下更新meta,顺序错乱的几率应该很小.
还有个问题,怎么让mongos去更新meta; 我知道可以强制每个mongos flush.有没有别的办法能达到同样的效果呢? 因为我们实在有太多mongos了.
是的,让写操作阻塞,直至config更新完成。 不然可能会有这种情况: 比如两个分片s1和s2,原来数据在s1,写入的数据转发至s1,如果在改config时候不阻塞写,在更新meta过程中,有可能一部分数据转发到s1(此时meta尚未更新成功),一部分数据转发到s2(meta更新成功),恰好有一条数据的update在两个阶段都有,然后写入s1的数据通过oplog回放后覆盖s2的update,导致数据不一致。
第二个问题我也不清楚,应该得看源码实现了。
好的. 谢谢您的认真解答. 如果有需要我会去实现一下这个想法.
考虑以下场景: 由于错误的shard key 引起数据分布不均匀.一些chunk非常的大,不能被balancer自动迁移, 而且不能够再split.
这种jumbo chunk是否可以通过同步到其他shard.然后修改chunk元数据,重载到mongos的方式迁移chunk?
现在有这个想法要实现一下.但对于修改元数据这个点有些疑惑.请大家给一点意见.非常感谢!!!