MongoDB分布式设计-主从复制,副本集

原创 2016年08月30日 16:28:28

1.前言

         为应对互联网业务的快速增加,用户访问在某段时间的快速增加,系统的高可用,可扩展,容错性被放在了越来越重要的位置。随着技术的发展,业界给出了很多解决方案,

 下面为大家介绍下MongoDB的主从复制,副本集在windows 操作系统的部署。

2.主从复制

            顾名思义,数据库主从库,一定为主库和从库。随着持久层压力增加,读写分离的技术已经得到广泛应用。mongoDB 的master-slave设计方式即遵从了上述实现方式。主库负责写入数据,从库负责读取数据;主库在写入数据后,自动把增量数据同步到可用从库节点。以下是代码实现细节:

         1)首先下载MongoDB 企业级版本(https://www.mongodb.com/download-center),然后把MongoDB的bin路径配置到Path路径下,以便MongoDB启动。


         2)设置一个主库,两个从库,配置如下:

        主库(三个文件,1111.conf,):

       

 1111.conf(完成主服务器的配置):

        dbpath = E:\mongodb\database\MS\a #数据库数据文件地址
        port = 1111 #数据库监听端口
        bind_ip = 127.0.0.1 #服务器地址
        master = true  #设置当前数据库为主库

 mongo1111StartServer.bat(加载1111.conf,初始化数据库服务器配置):

        mongd      -config 1111.conf

 mongo1111.bat(启动1111服务器客户端):

       mongo 127.0.0.1:1111


       从库(127.0.0.1:2222)1:

     

  


   2222.conf(完成主服务器的配置):

             dbpath = E:\mongodb\database\MS\b #数据库数据文件地址
              port = 2222 #数据库监听端口
              bind_ip = 127.0.0.1 #服务器地址
              slave =   true  #设置当前数据库为从库

              source = 127.0.0.1:1111#设置从库的主库地址,用于同步数据

            

    mongo2222StartServer.bat(加载2222.conf,初始化数据库服务器配置):

                mongd      -config 2222.conf

    mongo2222.bat(启动1111服务器客户端):

                 mongo 127.0.0.1:2222

          


3)从库(127,0.0.1:3333)2:


   3333.conf(完成主服务器的配置):

             dbpath = E:\mongodb\database\MS\c #数据库数据文件地址
              port = 3333 #数据库监听端口
              bind_ip = 127.0.0.1 #服务器地址
              slave =   true  #设置当前数据库为从库

              source = 127.0.0.1:1111#设置从库的主库地址,用于同步数据

            

    mongo3333StartServer.bat(加载3333.conf,初始化数据库服务器配置):

                mongd      -config  3333.conf

    mongo3333.bat(启动3333服务器客户端):

                 mongo 127.0.0.13333


3)启动三个服务器,观察是否正确启动:

 









4.分别打开CMD,启动三个数据库客户端,操作主库,切换到stu数据库,插入数据可以正常插入,从库插入失败





5.查看从库数据,发现从库已经从主库同步到数据





6)至此,完成主从库搭建。














3.副本集

          一般情况下,MongoDB的主从复制已基本完成分布式应用的需求。然而,随着业务的增加,用户访问的瞬时增加,服务器硬件寿命,故障因素理论存在。因此,一旦主服务器出现故障,无法完成业务请求处理,从库无法同步数据,用户则无法正常访问,因此系统的扩展性,容错性,高可用显得尤为重要。故,MongoDB的副本集技术应用而生。副本集,顾名思义,就是一个个副本的集合,因此不存在特定主服务器,如果已经设置为master的写主库出现故障,系统根据特定算法从数据同步完好,性能较好的读库中推举出另外一个master主写库,继续处理用户的请求,更好保证系统的高可用,高扩展,高容错。

      以下给出部署步骤:

1)首先配置四个MongoDB数据库服务器(设定副本集名称,数据库文件所在路径,数据库监听端口,数据库数据同步之前的缓存空间大小:即数据达到多少时才须同步)打开CMD,输入以下命令后,出现wait for 127.0.0.1:... connection 后,说明创建成功

  a.创建端口为9927数据库服务器:

   mongod     --replSet mayadong  --dbpath E:\mongodb\database\a  --port 9927 --oplogSize 512


b.创建端口为9927数据库服务器:

   mongod     --replSet mayadong  --dbpath E:\mongodb\database\a  --port 9927 --oplogSize 512




c.创建端口为9927数据库服务器:

   mongod     --replSet mayadong  --dbpath E:\mongodb\database\a  --port 9927 --oplogSize 512



d.创建端口为9927数据库服务器:

   mongod     --replSet mayadong  --dbpath E:\mongodb\database\a  --port 9927 --oplogSize 512


亦可以把启动服务端和客户端命令编写成bat文件(批处理文件),每次点击执行





2)启动四台服务器之后,启动任意一台服务器的客户端,进行副本集的配置(主库确定,仲裁者服务器(非必须))

这里选择9927。


config = {

_id:"mayadong",

members:

[


{_id:0,host:"localhost:9927"},

{_id:1,host:“localhost:9928"},

{_id:2,host:"localhost:9929"},

{_id:3,host:"localhost:9930",arbiterOnly:true}


]

}


如若新增服务器,可用config.members.push({_id:3,host:"localhost:9930"}),因其数据结构为栈,支持push,pop操作,所以也用config.members.push(members元素下标)删除服务器节点。


3)进行副本集初始化,执行rs.initiate(config)进行初始化。




4)设置之后,几次命令执行后发现,命令行显示副本集名称:primary,说明设置主从库关系成功,查看副本集状态和当前数据库服务器是否为主库,

发现从库、仲裁库包含9928,9929,9930,当前数据库为主库。







5)设置完成后,进行插入数据操作。



6)待数据插入成功后,启动其他任意一个服务器的客户端(这里选择),查看是否进行数据同步。

在打开客户端是,查看当前服务器数据库时,会出现如下错误,执行rs.slaveOk()即可,设置成从库。


7)观察后,确认数据以及同步。再现数据库故障宕机问题,强行关闭9927已设定服务器,自然在9927客户端无法操作,然后再打开9928,9929,9930,发现9929是数据节点已自动切换为主服务器,完成测试猜想。




4.总结

         在正常情况下,服务器数量足够,运行良好,用户访问适当,主从服务器完全可以通过主从库的读写分离,应对系统压力,保证性能,配置相对简单。但是新业务的增加,服务器的故障,外部系统接入,必然对系统的扩展性,可用性,容错性提出了更高的要求,因此副本集出现解决了MongoDB在这方面的短板,虽然配置相对复杂,但时保证了系统扩展性,可用性,容错性。




















mongoDB的两个特性:主从复制、副本集

一、主从复制 1.主从复制是一个简单的数据库同步备份的集群技术. 1.1在数据库集群中要明确的知道谁是主服务器,主服务器只有一台. 1.2从服务器要知道自己的数据源也就是对于的主服务是谁...

MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)

MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
  • canot
  • canot
  • 2016年02月25日 17:29
  • 8294

MongoDB——主从复制&副本集

前面我说到了,MongoDB数据库支持服务器之间的数据复制。支持主从模式及服务器之间的相互复制。目的当然是实现负载均衡与故障恢复。Mongo中内置了两种技术:主从复制、副本集。下面就简单介绍这两种模式...

MongoDB使用场景和局限

MongoDB的使用场景:     1.Web应用程序。文档能表示丰富的数据结构,建模相同数据库所需的集合数量通常会比使用完全正规化关系型数据库的数据表数量要少。动态查询和二级索引能让你轻松的实现S...

MongoDB——主从复制&副本集

前面我说到了,MongoDB数据库支持服务器之间的数据复制。支持主从模式及服务器之间的相互复制。目的当然是实现负载均衡与故障恢复。Mongo中内置了两种技术:主从复制、副本集。下面就简单介绍这两种模式...

MongoDB总结(三):mongoDB的主从复制、副本集、分布式部署

主从复制  主从复制是MongoDB最常用的复制方式。这种方式非常灵活,可用于备份、故障恢复、读扩展等。   MongoDB的复制至少需要两个服务器或者节点。其中一个是主节点,负责处理客户端请求,其...

MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)

MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....) 作者:canot 一、mongodb主从复制配置 主从复制是mongodb最常用的复制方式,也是一个简单...

MongoDB——主从复制&副本集

前面我说到了,MongoDB数据库支持服务器之间的数据复制。支持主从模式及服务器之间的相互复制。目的当然是实现负载均衡与故障恢复。Mongo中内置了两种技术:主从复制、副本集。下面就简单介绍这两种模式...

mongodb的主从复制和副本集

主从复制    主从复制是一个集群的模式,表现形式是:一个主数据库,N个从数据库。 优点: 数据备份:主-->从A        主-->从B ... 数据恢复:主库挂了,从A或者从B的数据就能马上起...

MongoDB学习笔记(3)主从复制和副本集

概述 环境配置 简单的在本机c盘下方了两个目录,mongodb模拟主服务,_1模拟从服务。唯一不同的是配置文件的区别。 master: dbpath=C:\mongodb\data\db logpa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MongoDB分布式设计-主从复制,副本集
举报原因:
原因补充:

(最多只允许输入30个字)