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副本集搭建过程中的问题和解决技巧的更多相关文章
- MongoDB副本集搭建及备份恢复
一.MongoDB副本集(repl set)介绍 早起版本使用master-slave,一主一从和MySQL类似,但slave在此架构中为只读,当主库宕机后,从库不能自动切换为主: 目前已经淘汰了ma ...
- windows版本 MongoDB副本集搭建及开启身份验证
------------恢复内容开始------------ ------------恢复内容开始------------ MongoDB副本集搭建 我搭建的是一个主节点,两个副节点 构建目录结构如下 ...
- MongoDB 副本集搭建
搭建mongodb副本集 [root@ mongodb]# cd /u02 [root@ u02]# mkdir -p mongodb/data_2777 [root@ u02]# mkdir -p ...
- MongoDB 副本集搭建 & 副本集扩容
副本集的搭建 创建多实例目录 [root@redis03 ~]# mkdir /server/mongodb/2801{7,8,9}/{conf,logs,pid,data} -p 编辑多实例配置文件 ...
- Mongodb副本集搭建经验
一.环境配置经验 1.一般安装的副本集的时候,主实例可以有数据库和用户:从实例不能.仲裁机不能有任何数据库包括用户 2.搭建副本集的时候Host使用外网IP,否则使用Mongodb VUE 1.6.9 ...
- mongodb副本集搭建
1.创建目录 mkdir -p /data/r1 /data/r2 /data/r3 2.启动: bin/mongod --config ../mongod.conf --replSet r1 b ...
- MongoDB副本集replica set (二)--副本集环境搭建
(一)主机信息 操作系统版本:centos7 64-bit 数据库版本 :MongoDB 4.2 社区版 ip hostname 192.168.10.41 mongoserver1 192.16 ...
- 在centos7上搭建mongodb副本集
1.安装副本集介绍 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的 ...
- mongodb 4.0副本集搭建
近期有同学问mongodb副本集难不难部署,我的回答是不难,很快,几分钟搞定,比mysql MHA简单的不止一点半点. 那么到底如何部署呢?请看下文. 1. 准备工作 1.1 下载软件 选择版本并下 ...
随机推荐
- Git版本管理的简介与安装[一]
标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 git简介 很多人都知道,Linus在1991年创建了开源的Linux,从此,Lin ...
- linux tar 压缩解压命令
tar命令: -c 压缩-x 解压缩-t 不解压的情况下查看文件内容-r 向压缩文件追加文件-u 更新压缩文件 以上参数必须和'-f'参数连用,且'-f'必须为最后一个参数,后接文档名 -z 对应gz ...
- https原理及实践
转载请注明出处 安全知识 网络安全问题 数据机密性 在网络传输数据信息时,对数据的加密是至关重要的,否则所有传输的数据都是可以随时被第三方看到,完全没有机密性可言. 数据机密性解决问题思路 利用算法 ...
- C# Ioc ASP.NET MVC Dependency Injection
ASP.NET MVC Dependency Injection 同志们,非常快速的Ioc注册接口和注入Mvc Controller,步骤如下: 安装Unity.Mvc NuGet Package 在 ...
- yum安装centos系统依赖库
安装centos系统依赖库,安装软件过程中,经常需要的一些库,可以在编译安装软件前执行如下命令: 首先更新系统(这步可以不执行) yum -y update 这种更新是全部更新,但是有时一些软件不想更 ...
- bzoj 3509: [CodeChef] COUNTARI] [分块 生成函数]
3509: [CodeChef] COUNTARI 题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数 \(2*a[j]\)不太好处理,暴力fft不如直接暴 ...
- COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]
传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...
- 【linux之正则表达式】
一.grep grep家族grep.egrep.fgrepGlobally search a Regular Expression and Print根据我们提供的模式进行查找,并且将文件中匹配的行显 ...
- php 压缩函数gzencode gzdeflate gzcompress
gzencode 默认使用ZLIB_ENCODING_GZIP编码,使用gzip压缩格式,实际上是使用defalte 算法压缩数据,然后加上文件头和adler32校验 gzdeflate 默认使用ZL ...
- [Python Study Notes] 变量/编码/注释
Ps:我这里选择的IDE为pycharm,个人感觉还是比较好用的. 1.变量 声明变量/赋值变量 #_*_ coding:utf-8 _*_ # author = "liu" ab ...