最新消息:走过的,离开的,已经错过,新开始2016

果果.IT 笔记-Mongodb数据迁移扩容篇

技术随笔 果果 5385浏览 0评论

Mongdb在使用中会出现一些问题,需要迁移数据,你可以使用导出导入的方法进行数据转移,但是会产生数据不一致性,下面果果介绍使用副本集的复制数据,不停机转移数据。

我们知道Replica Sets由一台PRIMARY和多台 Secondary组成,当PRIMARY故障,从Secondary重新选举出PRIMARY,我们就使用新加服务器或者新建服务,加入Replica Sets来完成复制。

可以先在应用的连接字串符符中添加新的机器。

新建一台mongodb,启动服务,修改hosts。

登陆PRIMARY

#添加节点
rs.add("vm94:27010");
等待复制完成
可以用
rs.status();
查看副本集状态,看看是否为Secondary。

复制完成后,登陆新加的mongodb控制台可以看到mongoSet:Secondary>

接下来我们要让新加的这台成为PRIMARY。

进入PRIMARY机器中,修改rs.conf()配置。
#查看现在副本集的配置,查看现在各台的priority,默认都是1
cfg = rs.conf();
#把新加的机器priority修改为更高的,使其成为主。
cfg.members[3].priority = 3;

#初始化配置
rs.reconfig(cfg);
这里说明一下members[3],中括号的数,不是现在Replica Sets 中的_ID,我们cfg = rs.conf();中,从第一台机器开始数,从0开始,我们加的新的这台ID应该是4,但是这里就应该是3,priority值要高于现在的主,大于就可以。

稍等片刻,新加的这台会成为PRIMARY

前段测试数据没有问题,我们就可以删除原来的了。
登陆现在的priority执行

rs.remove("vm91:27010");

最后,成功把PRIMARY转移到新的服务器上,没有停机,没有影响在线业务。

这里还有说一下,如果你新加入的不想成为PRIMARY,但只是想让其他的机器成为PRIMARY,有的人做法是直接结束PRIMARY的服务。让Arbiter重新选举出PRIMARY。其实我们可以直接让PRIMARY不参加选举,其他机器就会成为PRIMARY。
#30秒内不参加PRIMARY选举
rs.stepDown(30)
这样其他高priority的就会成为PRIMARY,如果都是一样的就随机产生PRIMARY。

转载请注明:果果.IT » 果果.IT 笔记-Mongodb数据迁移扩容篇

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址