Mongodb学习总结-5(主从复制)

 从这一篇开始咱们主要讨论mongodb的部署技术。sql

    咱们知道sql server可以作到读写分离,双机热备份和集群部署,固然mongodb也能作到,实际应用中咱们不但愿数据库采用单点部署,mongodb

若是碰到数据库宕机或者被毁灭性破坏那是多么的糟糕。数据库

 

一:主从复制服务器

1: 首先看看模型图架构

  

2: 从上面的图形中咱们能够分析出这种架构有以下的好处:app

     <1>  数据备份。性能

     <2>  数据恢复。测试

     <3>  读写分离。3d

 

3:下面咱们就一一实践日志

     实际应用中咱们确定是多服务器部署,限于本身懒的装虚拟机,就在一台机器上实践了。

第一步:咱们把mongodb文件夹放在D盘和E盘,模拟放在多服务器上。

第二步:启动D盘上的mongodb,把该数据库指定为主数据库,其实命令很简单:>mongodb --dbpath='XXX' --master,

           端口仍是默认的27017.

第三步:一样的方式启动E盘上的mongodb,指定该数据库为从属数据库,命令也很简单,固然咱们要换一个端口,好比:8888。

           source 表示主数据库的地址。

           >mongod --dbpath=xxxx --port=8888 --slave --source=127.0.0.1:27017

第四步:从图中的红色区域咱们发现了一条:“applied 1 operations"这样的语句,而且发生的时间相隔10s,也就说明从属数据库每10s

           就向主数据库同步数据,同步依据也就是寻找主数据库的”OpLog“日志,能够在图中红色区域内发现”sync_pullOpLog“字样。

           接下来咱们要作的就是测试,惊讶的发现数据已经同步更新,爽啊。

 

4:  若是我还想增长一台从属数据库,可是我不想在启动时就指定,而是后期指定,那么mongodb能否作的到呢?答案确定是能够的。

      咱们的主或者从属数据库中都有一个叫作local的集合,主要是用于存放内部复制信息。

      好,那么咱们就试一下,我在F盘再拷贝一份mongodb的运行程序,cmd窗口好多啊,你们不要搞乱了。

    

    看上面的log,提示没有主数据库,不要紧,某一天咱们良心发现,给他后期补贴一下,哈哈,再开一个cmd窗口,语句也就是

    在sources中add一个host地址,最后发现数据也同步到127.0.0.1:5555这台从属数据库中....

    

 

5: 读写分离

     这种手段在大一点的架构中都有实现,在mongodb中其实很简单,在默认的状况下,从属数据库不支持数据的读取,可是不要紧,

在驱动中给咱们提供了一个叫作“slaveOkay"来让咱们能够显示的读取从属数据库来减轻主数据库的性能压力,这里就不演示了。

 

二:副本集

    这个也是很牛X的主从集群,不过跟上面的集群仍是有两点区别的。

      <1>:  该集群没有特定的主数据库。

      <2>:  若是哪一个主数据库宕机了,集群中就会推选出一个从属数据库做为主数据库顶上,这就具有了自动故障恢复功能,很牛X的啊。

                 好,咱们如今就来试一下,首先把全部的cmd窗口关掉从新来,清掉db下的全部文件。

 

第一步:  既然咱们要创建集群,就得取个集群名字,这里就取咱们的公司名shopex, --replSet表示让服务器知道shopex下还有其余数据库,

            这里就把D盘里面的mongodb程序打开,端口为2222。指定端口为3333是shopex集群下的另外一个数据库服务器。

 

第二步:  既然上面说3333是另外一个数据库服务器,不要急,如今就来开,这里把E盘的mongodb程序打开。

 

第三步:  ok,看看上面的日志红色区域,彷佛咱们尚未作完,是的,log信息告诉咱们要初始化一下“副本集“,既然日志这么说,那我也就

             这么作,随便链接一下哪一个服务器都行,不过必定要进入admin集合。

 

第四步: 开启成功后,咱们要看看谁才能成为主数据库服务器,能够看到端口为2222的已经成为主数据库服务器。

 

第五步:咱们知道sql server里面有一个叫作仲裁服务器,那么mongodb中也是有的,跟sql server同样,仲裁只参与投票选举,这里咱们

           把F盘的mongodb做为仲裁服务器,而后指定shopex集群中的任一个服务器端口,这里就指定2222。

 

而后咱们在admin集合中使用rs.addArb()追加便可。

追加好了以后,咱们使用rs.status()来查看下集群中的服务器状态,图中咱们能够清楚的看到谁是主,仍是从,仍是仲裁。

 

不是说该集群有自动故障恢复吗?那么咱们就能够来试一下,在2222端口的cmd服务器按Ctrl+C来KO掉该服务器,立马咱们发现

在3333端口的从属服务器便可顶上,最后你们也能够再次使用rs.status()来看下集群中服务器的状态。

相关文章
相关标签/搜索