MongoDB支持两种复制模式:

  • 主从复制(Master/Slave)
  • 复制集复制(Replica Set)

下面主要记录我在centos虚拟机上安装replica set,主要参考:http://docs.mongodb.org/manual/tutorial/deploy-replica-set/

首先准备好3份配置文件:

 port = 27017

 dbpath = /home/bells/install/data1
logpath = /home/bells/install/log1/1.log fork = true
replSet = rs0
 port = 27016

 dbpath = /home/bells/install/data2
logpath = /home/bells/install/log2/2.log fork = true
replSet = rs0
 port = 27015

 dbpath = /home/bells/install/data3
logpath = /home/bells/install/log3/3.log fork = true
replSet = rs0

然后再启动这3个mongodb服务

sudo ./mongodb1/bin/mongod --smallfiles --config 1.conf
sudo ./mongodb2/bin/mongod --smallfiles --config 2.conf
sudo ./mongodb3/bin/mongod --smallfiles --config 3.conf

其实smallfiles也应该写进*.conf文件中的。

最后配置:

主要是通过下面的命令

rs.initiate()   使用默认的配置初始化replica set在当前的服务器

rs.status()    显示当前replica set的状态

rs.add(serverInfo)   增加新的成员到replica set 中

rs.addArb(serverInfo)    增加一个arbiter到replica set中

 rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "localhost.localdomain:27017",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
> rs.conf()
{
"_id" : "rs0",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "localhost.localdomain:27017"
}
]
}
rs0:PRIMARY> rs.add("localhost.localdomain:27016")
{ "ok" : 1 }
rs0:PRIMARY> rs.add("localhost.localdomain:27015")
{ "ok" : 1 }
rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2014-02-23T01:43:16Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "localhost.localdomain:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 602,
"optime" : Timestamp(1393119782, 1),
"optimeDate" : ISODate("2014-02-23T01:43:02Z"),
"self" : true
},
{
"_id" : 1,
"name" : "localhost.localdomain:27016",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 17,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2014-02-23T01:43:15Z"),
"lastHeartbeatRecv" : ISODate("2014-02-23T01:43:15Z"),
"pingMs" : 0,
"lastHeartbeatMessage" : "initial sync need a member to be primary or secondary to do our initial sync"
},
{
"_id" : 2,
"name" : "localhost.localdomain:27015",
"health" : 1,
"state" : 5,
"stateStr" : "STARTUP2",
"uptime" : 14,
"optime" : Timestamp(0, 0),
"optimeDate" : ISODate("1970-01-01T00:00:00Z"),
"lastHeartbeat" : ISODate("2014-02-23T01:43:16Z"),
"lastHeartbeatRecv" : ISODate("2014-02-23T01:43:16Z"),
"pingMs" : 1,
"lastHeartbeatMessage" : "syncThread: 12520 new file allocation failure"
}
],
"ok" : 1
}
rs0:PRIMARY> db.person.insert({"name":"jack", "age":20})
rs0:PRIMARY> db.person.find()
{ "_id" : ObjectId("5309529869d3a7216c59ef2a"), "name" : "jack", "age" : 20 }
 [bells@localhost install]$ ./mongodb2/bin/mongo --port 27016
MongoDB shell version: 2.4.5
connecting to: 127.0.0.1:27016/test
rs0:SECONDARY> db.person.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
rs0:SECONDARY> rs.slaveOk();
rs0:SECONDARY> db.person.find()
{ "_id" : ObjectId("5309529869d3a7216c59ef2a"), "name" : "jack", "age" : 20 }

安装部署过程中,遇到两个问题:

1. 启动mongodb时,错误日志:

 Sun Feb 23 09:47:57.930 [initandlisten] ERROR: Insufficient free space for journal files
Sun Feb 23 09:47:57.930 [initandlisten] Please make at least 3379MB available in /home/bells/install/data1/journal or use --smallfiles
Sun Feb 23 09:47:57.930 [initandlisten]
Sun Feb 23 09:47:57.953 [initandlisten] exception in initAndListen: 15926 Insufficient free space for journals, terminating

解决办法就是,启动的时候,加个   --smallfiles : 这个参数默认值是false,如果设为true,则会是每个文件最大的大小限定为512M而不是默认的2G

2. 在secondary中,查询时:

 rs0:SECONDARY> db.person.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }

这个是正常的,因为SECONDARY默认是不允许读写操作的,可以:

rs0:SECONDARY> db.slaveOk();

来解决!

MongoDB之Replica Set(复制集复制)的更多相关文章

  1. mongodb 复制集

    mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...

  2. 认识MongoDB复制集

    ​ 从这一篇开始,我们要踏上MongoDB进阶之路啦,想想还有点小开心呢.一筐猪镇楼. ​ 引入复制集 我们先来想一个场景,如果本地项目使用MongoDB,都是下载,安装,连接一条龙服务.这实际也就是 ...

  3. mongodb复制集Replica Set使用简介

    MongoDB高可用 对于MongoDB,可以支持使用单机模式提供服务,但是在实际的生产环境中,单机模式将面临很大的风险,一旦这个数据库服务出现问题,就会导致线上的服务出现错误甚至崩溃.因此,在实际生 ...

  4. MongoDB 复制集模式Replica Sets

    1.概述 复制集是一个带有故障转移的主从集群.是从现有的主从模式演变而来,增加了自动故障转移和节点成员自动恢复. 复制集模式中没有固定的主结点,在启动后,多个服务节点间将自动选举 产生一个主结点.该主 ...

  5. 【MongoDB】windows平台搭建Mongo数据库复制集(类似集群)(转)

    原文链接:[MongoDB]windows平台搭建Mongo数据库复制集(类似集群)(一) Replica  Sets(复制集)是在mongodDB1.6版本开始新增的功能,它可以实现故障自动切换和自 ...

  6. MongoDB 复制集 (三) 内部数据同步

    一 数据同步        一个健康的secondary在运行时,会选择一个离自己最近的,数据比自己新的节点进行数据同步.选定节点后,它会从这个节点拉取oplog同步日志,具体流程是这样的:      ...

  7. MongoDB 复制集(二) 选举 自动故障切换

    一   复制集的高可用性简介       复制集通过故障自动切换来实现高可用性,当主节点出现故障的时候,从节点可以通过选举成为主节点,而这个过程在大多数当情况下是自动进行的,不需要手动干预.在某些情况 ...

  8. MongoDB 复制集 (一) 成员介绍

       一 MongoDB 复制集简介          MongoDB的复制机制主要分为两种:          Master-Slave    (主从复制)      这个已经不建议使用       ...

  9. 【MongoDB】windows平台搭建Mongo数据库复制集(相似集群)(一)

    Replica  Sets(复制集)是在mongodDB1.6版本号開始新增的功能.它能够实现故障自己主动切换和自己主动修复功能成员节点的功能,各个DB之间的数据全然一致,大大减少了单点故障的风险. ...

随机推荐

  1. Java课后简答题

    1.简述Java的特点. 面向对象.跨平台性.健壮性.安全性.可移植性.多线程性.动态性等. 2.简述JRE与JDK的区别. JRE(Java Runtime Environment,Java运行时环 ...

  2. GIS-010-ArcGIS JS 三种查询模式(转)

    QueryTask.FindTask.IdentifyTask都是继承自ESRI.ArcGIS.Client.Tasks: 1.QueryTask:是一个进行空间和属性查询的功能类,它可以在某个地图服 ...

  3. laravel 5.3 多用户认证

    不知道对不对,乱来一下!!!! 1)laravel自带了一个用户认证系统,要使用的话,直接运行一下命令就可以用了 php artisan make:auth 会生成相应的控制器.路由和模版文件 2)数 ...

  4. php 升级后 htmlspecialchars 返回空 的解决方案

    今天将php版本升级到5.3.0以上(我升级到php5.4.13)的版本后发现一个问题 htmlspecialchars 函数返回为空.查了资料后,发现新版本对htmlspecialchars这个函数 ...

  5. Windows下Mysql主从配置(Mysql5.5)

    主数据库IP:192.168.3.169从数据库IP:192.168.3.34 主数据库配置my.inin: 在[mysqld]下添加配置数据:server-id=1     #配一个唯一的ID编号, ...

  6. 【APIO2016】Fireworks[DP 可并堆维护凸包优化]

    4585: [Apio2016]烟火表演 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 100  Solved: 66[Submit][Status] ...

  7. Mac下Python与Kafka的配合使用

    安装并配置Kafka 安装 # brew install kafka 配置 """ zookeeper配置文件/usr/local/etc/kafka/zookeeper ...

  8. Suricata规则配置

    Suricata 规则配置 IDS/IPS/WAF IPS.IDS和WAF分别是入侵防御系统和入侵检测系统以及WEB应用防火墙的简称,很多人说这些玩意不就是盒子吗已经过时了,其实不是,SIEM其实是有 ...

  9. 【BZOJ1901】Zju2112 Dynamic Rankings 主席树+树状数组

    [BZOJ1901]Zju2112 Dynamic Rankings Description 给定一个含有n个数的序列a[1],a[2],a[3]……a[n],程序必须回答这样的询问:对于给定的i,j ...

  10. 最小树形图(hdu4009)

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) T ...