Mongodb 副本集搭建问题总结及解决办法

 更新时间:2016年12月15日 14:44:44   作者:生_若蜉蝣  
这篇文章主要介绍了Mongodb 副本集搭建问题总结及解决办法的相关资料,在Mongodb 副本集搭建过程中会遇到很多问题,这里就对常见问题进行总结并提供解决办法,需要的朋友可以参考下

Mongodb 副本集搭建问题总结及解决办法

Mongodb数据库的副本集是由多台服务器组成,基中一台是主节点,其它为从节点,如果主节点宕机就自动切换到任意一个从节点。如果以前的主节点修复完成和正常运行就自动变成从节点,从节点不能查询数据。也可以在一台服务器装多个Mongodb端口不一样。

在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的。

但是,却仍然有这种情况存在,就如我这几天主要负责的事,就是一个系统的全部服务器迁移中的部分机器迁移,还有一部分由别人负责。

这个系统涉及到flume数据采集,storm数据分析,rabbitmq消息分发,ehcache缓存提升系统性能,MongoDB副本集存储数据,tomcat管理系统应用等,架构基本如下:

而这里我主要负责的是rabbitmq、tomcat、ehcache、mongodb,这里边tomcat、ehcache的安装和配置都比较简单,只是rabbitmq需要依赖于erlang。而erlang又需要依赖一些其他的东西,这些东西需要root权限执行yum,而我们没有root权限,于是稍微花了一点点功夫。

除此之外,mongodb副本集的再次搭建也稍微遇到了一点点问题,不过好在一切还是按照预料中发展的,以前没遇到过的问题也通过经验猜想完美解决。

之所以mongodb副本集搭建会遇到一些问题,大部分原因是因为这次并非亲自动手,而是由所带的新人操作。
首先,按照我给的文档他一步步的操作下去,结果在端口上,不知道是因为习惯还是因为什么,他所设置的端口并不是我们要求的端口。

那么这时候当我要求他改成要求的端口时,他有些茫然,不知道是应该把所有配置删了重配,还是要怎样。

由于时间关系,于是我给他提供了一个方案,就是直接使用配置优先级的方式改掉端口。之前我写过的副本集搭建的文档中应该有说过优先级怎么改,大体上是下边三步:

config=rs.conf()
config.members[0].priority=2
rs.reconfig(config)

那么根据这个,我们设想的改端口应该是下边这样(下边ip和端口只是随便假设的,生产环境自然不能随便透漏):

config=rs.conf()
config.members[0].host="192.168.117.88:37017"
rs.reconfig(config)

但是结果呢,在第三步的时候抛出异常,遗憾的是当时只为了解决问题而没有截图,忘记具体是什么异常了,但大体意思是说这个端口的成员不存在。
于是,我又给他提供了第二个方案,那就是先把三个成员中非主服务的任意一个从成员中删除:

rs.remove("ip:port")

然后把这台机的端口改为我们需要的37017,之后再使用增加成员的命令添加进来:

rs.add("ip:port")

然后就这样操作三次后,三台服务器的端口都成功修改成要求的端口。

这个过程中,当修改到主服务的时候,因为一开始设置了最高优先级,因此需要把另外一台先设置成更高的优先级操作。
问题就这样解决了,只不过事后我又想了想,似乎这种方案并非是最优最简洁的,因为当时没有细想第一种方案中那个问题的原因,后来一想,多半是因为那台机还是原端口没有被重启。

如果我们先把非主服务机器的端口都改好重启,那么再次用第一种方案进行应该也是可行的,而且还会比第二种方案简单,有机会了一定要试试。

本以为这样就可以了,然后没想到的是,当我们都迁移完成后,被告知那些机器都是测试服务网段的,要改成生产网段。
于是乎,所有的机器ip全部变了,以至于我们的mongodb副本集又要重新配置。

但是这一次比较麻烦的是,之前那次改端口是因为我至少可以保证有两台机还是正常运行的,可以操作rs命令,但是这一次ip一变,我三台机都无法正常成为主服务,以至于rs命令失效。

几番折腾,始终没有想出好的方案,于是只好把data目录下的内容尽数删除,然后真正的重新配置一遍。
然而,在这位新手的操作下,配置的过程中,把本该是如下的命令:

config={_id:”reptest”,members:[{_id:0,host:”192.168.0.160:57017”},{_id:1,host:”192.168.0.211:57017”},{_id:,host:”192.168.0.213:57017”}]}
rs.initiate(config)

弄成了这样:

config={_id:”reptest”,members:[{_id:0,host:”192.168.0.160:57017”},{_id:1,host:”192.168.0.211:57017”},{_id:,host:”192.168.0.213:57017”}]}
rs.initiate()

也就是说这里他虽然给config赋值了,但是再加载的时候竟然没有使用,这也怪了忘了告诉他之前发现的一个问题。

通常我们在window系统上操作Linux上的应用,都会使用crt或者putty这些工具,这两个工具各有优劣,而我发现当我们进入mongo shell中操作时,这两个工具是有区别的,使用putty就可以回退,而crt就不能再mongodb shell中回退。

因此当他敲完rs.initiate(),想要回到括号里加上config时,已经没了回头路,只能硬着头皮回车。

而这时候,rs.initiate()只能执行一次,接下来和我文档中的操作不一样了,又该怎么办呢?

经过上一个问题,这个问题貌似就很好解决的,怎么办呢,我觉得还是可以使用rs.add和修改配置的方式解决,然后把这个想法告诉他,他照此操作后,果然一次搞定!

好了,这次的两个问题基本就这样解决了,不知其他朋友们,是否对这种情况还有更好的解决方案?欢迎留言解惑。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • MongoDB客户端工具NoSQL Manager for MongoDB介绍

    MongoDB客户端工具NoSQL Manager for MongoDB介绍

    这篇文章介绍了MongoDB客户端工具NoSQL Manager for MongoDB,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 记一次Mongodb中admin数据库导致的事故

    记一次Mongodb中admin数据库导致的事故

    这篇文章主要给大家介绍了关于一次Mongodb中admin数据库导致的事故的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-03-03
  • MongoDB执行mongoexport时的异常及分析(数字类型的查询)

    MongoDB执行mongoexport时的异常及分析(数字类型的查询)

    这篇文章主要给大家介绍了关于MongoDB执行mongoexport时的异常及分析(数字类型的查询)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • MongoDB中实现多表联查的实例教程

    MongoDB中实现多表联查的实例教程

    数据库应用在我们的生活中是很常见的,在编辑一些应用以及软件的时候都需要用到数据库来存储数据,下面这篇文章主要给大家介绍了关于MongoDB中实现多表联查的相关资料,需要的朋友可以参考下
    2022-07-07
  • 浅谈MongoDB的备份方式

    浅谈MongoDB的备份方式

    mongodb数据库同样离不开必要的维护,如备份、恢复、导入、导出。其实备份和恢复比导入和导出要方便些,而且一般不会出错,所以大部分时候使用备份和恢复操作就可以了。下面我们来简单谈谈MongoDB的备份方式
    2015-05-05
  • MongoDB慢查询与索引实例详解

    MongoDB慢查询与索引实例详解

    索引通常能够极大的提高查询的效率,这篇文章主要给大家介绍了关于MongoDB慢查询与索引的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • MongoDB使用场景总结

    MongoDB使用场景总结

    这篇文章介绍了什么场景该用MongoDB,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • MongoDB Shell常用基本操作命令详解

    MongoDB Shell常用基本操作命令详解

    这篇文章主要为大家介绍了MongoDB Shell常用基本操作命令详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • MongoDB数据库安装配置、基本操作实例详解

    MongoDB数据库安装配置、基本操作实例详解

    这篇文章主要介绍了MongoDB数据库安装配置、基本操作,结合实例形式详细分析了MongoDB数据库安装配置具体步骤、相关命令与基本操作实现技巧,需要的朋友可以参考下
    2020-01-01
  • NoSQL优缺点与MongoDB数据库简介

    NoSQL优缺点与MongoDB数据库简介

    这篇文章介绍了NoSQL的优缺点与MongoDB数据库,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论