MongoDB(二)--主从模式和副本集模式

注:本文讨论mongo主从模式(master/slave)和副本集模式的搭建以及优缺点.

 

一、master/slave方案

1、搭建master服务器

$:mongod --dbpath=./../data --master --oplogSize 64 --port 5566

2、搭建slave服务器

$:mongod --slave --source 10.10.20.48:5566 --dbpath=./../dataSlave --port 5567 --slavedelay 10 --only test --autoresync

3、尝试从slave插入数据

$:mongod  10.10.20.48:5567

$:use masterSlave

$:db.info.insert({“name”:”luo”})

此处报错:not master

4、尝试从master插入数据,slave查看数据

$: mongod  10.10.20.48:5566

$:use masterSlave

$:db.info.insert({“name”:”luo”})

此处插入数据成功

$:db.info.find()

{ "_id" : ObjectId("548e954b0cd7253b60dc1601"), "name" : "luo" }

 

 

从slave查看:

$:mongod  10.10.20.48:5567

$:use masterSlave

$:db.info.find()

{ "_id" : ObjectId("548e954b0cd7253b60dc1601"), "name" : "luo" }

查询成功。

5、结论

能够指定需要备份的数据库,按照设置的时间间隔进行自动备份,slave服务器只能进行查询操作。

优点:无需修改代码。

缺点:不支持故障切换。

 

二、replicaSets副本集

使用一组3个mongo节点来作为一个set完成副本集工作。

1、在每个节点启动服务

a、mongod --replSet luo/10.10.20.48 --port 27017 --dbpath ./../dataRepl1

b、mongod --replSet luo/10.10.20.48 --port 27018 --dbpath ./../dataRepl2

c、mongod --replSet luo/10.10.20.48 --port 27019 --dbpath ./../dataRepl3

注:a、如果部署在三台不同的机器上,可以全部使用27017端口,本文档所有其他配置过程相同,只需修改IP和PORT即可。

     b、推荐使用配置文件的方式启动服务,配置文件名取为mongod.cfg,文件内容(填入你需要的内容即可,字段可选)如下:

1 dbpath=./../dataArbi
2 logpath=./../logFile
3 replSet=luo
4 port=27017
5 keyFile=/home/pds/keyFile

 启动命令为:mongod –f mongod.cfg

2、初始化这个set

a、进入任意一个mongo服务的客户端:

$:mongo  10.10.20.48:27017

b、输入配置语句:

$:config = {_id: 'luo', members: [

                          {_id: 0, host: '10.10.20.48:27017'},

                          {_id: 1, host: '10.10.20.48:27018'},

                          {_id: 2, host: '10.10.20.48:27019'}]

               }

注:如果配置为2+1的模式(primary+secondary+arbitor),则

$:config = {_id:"luoArbi",members:[

                        {_id:0,host:"10.10.20.48:28010",priority:4},

                        {_id:1,host:"10.10.20.48:28011",priority:2},

                        {_id:2,host:"10.10.20.48:28012",arbiterOnly : true}]

               }

控制台输出:

 

c、 初始化:

$:rs.initiate(config)

 

d、查看状态:

$:rs.status()

 

e、primary27017插入数据

$:mongo  10.10.20.48:27017

$:db.info.insert({"name":"luoshuai"})

$:db.info.find()

>{ "_id" : ObjectId("548ea2a16be5003cfeb92f9a"), "name" : "luoshuai" }

f、  secondary27018插入数据

$:mongo  10.10.20.48:27018

$:db.info.insert({"name":"luoshuai"})

报错not master

g、secondary27018查询数据

$:mongo  10.10.20.48:27018

$:db.info.find()

      报错:error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

设置secondary可读:

$: db.getMongo().setSlaveOk()

$:db.info.find()

查询结果:{ "_id" : ObjectId("548ea2a16be5003cfeb92f9a"), "name" : "luoshuai" }

h、secondary27019查询数据

和g条结果相同。

i、  关闭primary服务,查看剩余两台secondary运行状态

 

27017停止运行,27018成为primary

j、  重新启动27017

 

27017重新启动,成为secondary,27018依旧保持primary不变。

k、 对新的primary27018进行操作,增删查改都可以正确完成

l、  对新的secondary27017进行操作,27017已变成副本集,符合副本集的通用特征。

注:仲裁搭建成功提示(这是在linux系统搭建的服务):

 

 

3、结论

一台主服务和两台副本集服务,主服务完成增删查改功能,副本集初始阶段不能进行任何操作,设置之后,能够进行读操作;如果主服务崩溃或者失去连接,自动有一个副本集成为主服务,旧的主服务重新启动之后自动成为副本集服务器,三台服务器重新组成新的完整的副本集服务。

优点:能够应对主服务突然崩溃的情况,自动完成故障转移。

缺点:增加写数据成功判断后可能会延长写入时间。

 

三、replicaSets副本集模式效率测试和适用结论

1、效率测试(不同环境可能略有不同):

a、写入时(数据总量100,000)                 单位:s

写入方式

3

2+1

writeConcern=2

210

234

writeConcern=1

22

122

 

 

 

 

 

 

b、读取时(数据总量100,000,读取数据偏移53343)             单位:ms

查询方式

windows3

li3

li3+index

li2+1

li2+1+index

secondaryPreferred()

48

220

100

240

80

primary()

49

160

80

150

80

 

 

 

 

 

 

2、适用结论:

    1:如果需要自动化故障切换和后备支援的话,使用Replica-Set(管理起来很方便);

    2:如果使用了--auth(出于安全的原因) 或者 --slavedelay的话,目前推荐使用M/S;

    3:如果使用分片,Replica-Set是很适合使用的,特比是对于比较大的集群,效果更好。

转载于:https://www.cnblogs.com/taxuegongzi/p/4205359.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值