MongoDB关于replSet的配置概述(一主二从)

对于网上的文章来讲,一般遇到问题想要寻求解决方法,其结果每每都是坑较多,成功例子较少。缘由不过是文章习做时间较早,版本较老;或者写做大佬觉得本身的读者能力很强,在某些细节没有展开或遗漏;再或者技术型网站随意借鉴其余原创做者文章,夸大功效排版错乱删减篇幅。html

实际上这种“别人都是坑,我来讲说我作的”这种文章(包括本身)都不必定好到哪里去,看看粉丝关注度和技术难易程度,基本都是刚摸技术没多久的新手~java

so,个人建议就是,若是你有问题,还必定要从几个博客几个问答中找到解决办法的,最好收集多篇【不同】的技术文章,相互参考校对,取其精华去其槽粕,找到答案……mongodb

前话扯得多系列是我文章写做的习惯hhh,(还不是主要内容很少……)好~如今开始进入正题(本文给小白看的,语言粗浅不要森气)↓数据库

 

 

目录windows

 

 

 

 

 

若是有耐心,请按顺序看完,本文内容……没多少服务器

 

先谈一谈副本集吧~(英文是replset,如下统称为汉语【副本集】)app

        副本集简单呢就是复制出来多份做为副本,首要功能就是防止主节点崩溃致使数据丢失——从节点通过票选选出新的主节点,继续完成其遗志……学习

        因为要票选,因此出现0票或者1:1状况都不太好,因此,一般建议节点保持在一主两从或一主三从。其中一主两从是一主,一从,一投票节点(职业投票……)分配会比较好。网站

        分红主从主要缘由是功能区分,主节点是数据员主要操做的对象。操做过程和结果会保留成oplog形式,从节点会按期从log中读取,并修改自身数据,达到同步效果。spa

        从节点一般赋予读的权利,由于主节点一般不会读取从节点更改信息,而反过来,从节点会根据主节点变化而变化。因此从节点通常用来作读有关操做较多。

        例如分词与检索操做,数据分析和识别等。不会对源数据产生“生产必要更改”的人为操做(这里想法多是副本集会自动复原吗?大概吧……不重要)

        主节点删除或损毁会使一个从节点变成主节点,一般会继承全部功能,其前提是存在能够被票选出来的节点

从集群部署上,通常生产实践中,会将节点部署在不一样服务器上(仔细想一想就是大一点的另外多台主机咩……),利用路由等原理,将他们连通起来,分配好主与从以后就能够干活了。可是在开发过程当中,基本上都是如今开发者本机上搭建环境的。那么就要尝试理解好,不一样服务器与单机环境的对应关系,这样才能好好的完成副本集的配置工做。

 图片来自https://blog.csdn.net/java2000_wl/article/details/7777319

上图能够看出,不管是主,仍是从节点,都是服务器(同一服务器或不一样服务器)中的一个部分,那么咱们在给主节点部署数据库结构,搭建服务器(这个能够自行查找相关文案)时,所作的,也应该为从节点作一下。换句话说,主节点上已经部署了数据库了(包括dbpath和logpath),那么不配置从节点的数据库环境,则从节点只是一块内存而已什么也不是,还怎么作数据库呢。

同理,在本机搭建环境的时候,其实是我遇到的问题,不理解服务器与本机的关系。网上默认你们都可以理解,以致于都避而不谈,直接说以后的事情。因此我初期搭建环境,直接输入

config={ _id:"replset_test",members:[  
{_id:0,host:"127.0.0.1:27017"}, {_id:1,host:"127.0.0.1:27018"}, {_id:2,host:"127.0.0.1:27019"} ]}

的时候,给的结果只有一个id为0的数据源节点,使用rs.add也很差使,rs.remove提示说只有一个节点,无法投票选出下一个主节点因此不能删……因此就陷入了对于小白来讲的个人死循环中——想多添加节点,结果不是说节点已添加就是说没法找到该节点(后来才明白这句话的含义);想删了重作,结果说节点太少balabala不让删。

网上直接搜索删除副本集相关,结果都不使人满意,主要就在于缺乏节点。因此我找到了下面这个文章↓

https://www.jb51.net/article/109091.htm

在这先说明一下,我在这里作得操做彻底源于bug没法修复前提,不得不实施的“网吧重启”操做,实际上还有更好的办法,若是读者也有相同问题且项目目前已保存备份状况下,能够借鉴一下我这个操做。

为了方便阅读,我将其中一部分摘抄一下(这里使用windows举例,其余系统能够参考替换部份内容便可):

1)作好数据备份

由于下面步骤会去掉数据库内容(破釜沉舟啊……那些帮助帖细点讲也不至于这么坑)

2)卸载MongoDB服务

mongod.exe --remove --serviceName "MongoDB"

这里注意的是,若是你的mongod不是配置的全局变量(在个人电脑-环境变量配置),请先cd到MongoDB的bin目录下(不会的,能够点击这里学习)

这样,系统中服务名为MongoDB就会消失。这里插一句,通常新建完成的MongoDB,会自动生成这个服务,默认是自动开启,也就是开机的时候就一块儿开了,或许有时候会影响电脑速度,因此若是你还用电脑作点别的事情,最好将它设置为手动开启。不知道怎么进服务的……请点这里

我就是这么善良,通常有现成的不多会为了阅读量“直接抄一份”~这也是为看我文章的小白培养【去哪里学习提升自身能力水平】

3)卸载了固然还要再装回来……(哎,何苦)

mongod.exe --install --logpath="你的log目录(直到log文件自身位置)的绝对路径" --dbpath="你的数据库文件夹对应的绝对路径(这里只是文件夹哟)" 

重装以后就会发现数据库“清爽”了

4)配置replset(终于到重点了……)

新建多个文件夹,这几个文件夹就看做是多个服务器节点。目录内新建两个文件夹和文件,分别是db(或data),log(或logs),mongo.conf。主要是为了好记,其别的名字也无所谓……

dbpath=D:/mongodb/rs/data   #数据存放目录  
logpath=D:/mongodb/rs/logs/mongod.log  #日志文件目录  
port=12345   #mongodb端口  
logappend=true   #追加方式写日志文件  
fork=true        #后台运行  
journal=true     #启用日志选项,MongoDB的数据操做将会写入到journal文件夹的文件里  
oplogSize=2048   #同步操做记录文件大小(MB)  
smallfiles=true  #使用较小的默认文件  
replSet=dbset    #副本集名称,同一个副本集,名称必须一致  

将以上代码内容写到每一个MongoDB的对应节点文件夹目录内的mongo.conf文件内(这里文件名和后缀能够更改,文本文件能打开就均可以)

这里的目录名要根据放置的目录名进行更改,端口号要设置不一样的,副本集名称要设置统一名称否则会出错。

关闭正在运行的MongoDB服务器。如今咱们经过指定 --replSet 选项来启动mongoDB。--replSet 基本语法格式以下:

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

在不一样的命令窗口,分别对每一个文件夹内的节点都作这个操做。

默认按照顺序,第一个节点就是主节点primary,其后节点为secondary(这个能够以后更改)

而后再新来一个命令行窗口,执行mongo命令,进入MongoDB命令行环境,找到主节点对应服务器,输入:

rs.add(HOST_NAME:PORT)

这里add内参数为其与secondary节点的ip:port。意为将其余节点添加进入主节点中,做为从节点使用。

至此配置完成,你可使用db.isMaster() 来查看对应服务器是否为主节点。你可使用rs.status()来查看目前replset副本集状态。

啊,终于成功了,撒花~~~~✿✿ヽ(°▽°)ノ✿

附:

本文参考:

http://tcrct.iteye.com/blog/2108099       mongodb replica set(副本集)设置步骤

http://www.runoob.com/mongodb/mongodb-replication.html     MongoDB 复制(副本集)

https://www.jb51.net/article/109091.htm    Mongodb常见错误与解决方法小结(Mongodb中常常出现的错误)

操做环境:

windows7   MongoDB3.6.5

相关文章
相关标签/搜索