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

对于网上的文章来说,通常遇到问题想要寻求解决方法,其结果往往都是坑较多,成功例子较少。原因不过是文章习作时间较早,版本较老;或者写作大佬以为自己的读者能力很强,在某些细节没有展开或遗漏;再或者技术型网站随意借鉴其他原创作者文章,夸大功效排版错乱删减篇幅。

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

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

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

目录

如果有耐心,请按顺序看完,本文内容……没多少

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

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

        由于要票选,所以出现0票或者1:1情况都不太好,所以,通常建议节点保持在一主两从或一主三从。其中一主两从是一主,一从,一投票节点(职业投票……)分配会比较好。

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

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

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

        主节点删除或损毁会使一个从节点变成主节点,通常会继承所有功能,其前提是存在可以被票选出来的节点

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

 图片来自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

猜你喜欢

转载自www.cnblogs.com/6luv-ml/p/9187435.html
今日推荐