对于网上的文章来讲,一般遇到问题想要寻求解决方法,其结果每每都是坑较多,成功例子较少。缘由不过是文章习做时间较早,版本较老;或者写做大佬觉得本身的读者能力很强,在某些细节没有展开或遗漏;再或者技术型网站随意借鉴其余原创做者文章,夸大功效排版错乱删减篇幅。html
实际上这种“别人都是坑,我来讲说我作的”这种文章(包括本身)都不必定好到哪里去,看看粉丝关注度和技术难易程度,基本都是刚摸技术没多久的新手~java
so,个人建议就是,若是你有问题,还必定要从几个博客几个问答中找到解决办法的,最好收集多篇【不同】的技术文章,相互参考校对,取其精华去其槽粕,找到答案……mongodb
前话扯得多系列是我文章写做的习惯hhh,(还不是主要内容很少……)好~如今开始进入正题(本文给小白看的,语言粗浅不要森气)↓数据库
目录windows
若是有耐心,请按顺序看完,本文内容……没多少服务器
先谈一谈副本集吧~(英文是replset,如下统称为汉语【副本集】)app
副本集简单呢就是复制出来多份做为副本,首要功能就是防止主节点崩溃致使数据丢失——从节点通过票选选出新的主节点,继续完成其遗志……学习
因为要票选,因此出现0票或者1:1状况都不太好,因此,一般建议节点保持在一主两从或一主三从。其中一主两从是一主,一从,一投票节点(职业投票……)分配会比较好。网站
分红主从主要缘由是功能区分,主节点是数据员主要操做的对象。操做过程和结果会保留成oplog形式,从节点会按期从log中读取,并修改自身数据,达到同步效果。spa
从节点一般赋予读的权利,由于主节点一般不会读取从节点更改信息,而反过来,从节点会根据主节点变化而变化。因此从节点通常用来作读有关操做较多。
例如分词与检索操做,数据分析和识别等。不会对源数据产生“生产必要更改”的人为操做(这里想法多是副本集会自动复原吗?大概吧……不重要)
主节点删除或损毁会使一个从节点变成主节点,一般会继承全部功能,其前提是存在能够被票选出来的节点
从集群部署上,通常生产实践中,会将节点部署在不一样服务器上(仔细想一想就是大一点的另外多台主机咩……),利用路由等原理,将他们连通起来,分配好主与从以后就能够干活了。可是在开发过程当中,基本上都是如今开发者本机上搭建环境的。那么就要尝试理解好,不一样服务器与单机环境的对应关系,这样才能好好的完成副本集的配置工做。
从上图能够看出,不管是主,仍是从节点,都是服务器(同一服务器或不一样服务器)中的一个部分,那么咱们在给主节点部署数据库结构,搭建服务器(这个能够自行查找相关文案)时,所作的,也应该为从节点作一下。换句话说,主节点上已经部署了数据库了(包括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举例,其余系统能够参考替换部份内容便可):
由于下面步骤会去掉数据库内容(破釜沉舟啊……那些帮助帖细点讲也不至于这么坑)
mongod.exe --remove --serviceName "MongoDB"
这里注意的是,若是你的mongod不是配置的全局变量(在个人电脑-环境变量配置),请先cd到MongoDB的bin目录下(不会的,能够点击这里学习)
这样,系统中服务名为MongoDB就会消失。这里插一句,通常新建完成的MongoDB,会自动生成这个服务,默认是自动开启,也就是开机的时候就一块儿开了,或许有时候会影响电脑速度,因此若是你还用电脑作点别的事情,最好将它设置为手动开启。不知道怎么进服务的……请点这里
我就是这么善良,通常有现成的不多会为了阅读量“直接抄一份”~这也是为看我文章的小白培养【去哪里学习提升自身能力水平】
mongod.exe --install --logpath="你的log目录(直到log文件自身位置)的绝对路径" --dbpath="你的数据库文件夹对应的绝对路径(这里只是文件夹哟)"
重装以后就会发现数据库“清爽”了
新建多个文件夹,这几个文件夹就看做是多个服务器节点。目录内新建两个文件夹和文件,分别是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