一.mongodb replication 介绍

  官网上的第一句话就是Replication is the process of synchronizing data across multiple servers.翻译过来就是replication(复制)是跨多个服务器同步的过程,基本原理就是一个主服务器和很多从服务器通过同步日志的方式来达到数据一致的目的,并且有且只有一个主服务器,在mongodb中也叫主节点(primary node)负责写操作,而从服务器,也叫次要节点(secondary nodes)只需复制主服务器的一个叫oplog 的日志来与主服务器的数据同步,如果主服务器不幸挂掉,那么mongo的引擎会自动触发一次选举,选出新的主服务器(或者半数以上投票),如果没法完成选举,票数相同等情况,整个集群将会变成只读状态无法写入。mongo也有一个角色叫做仲裁者(Arbiter),它不存储和同步数据,只是作为一个维持权威或者心跳数据的存在避免节点过少无法完成选举,其也帮助主从服务器判断状态,其可以用一些性能较差的机器或者虚拟机扮演。

  作为一个前端以上是我能做出的最好的解释了。下面直接开撸,简单几步几行代码带大家搭建一个mongo replica

二.mongodb replica set

  1.系统介绍

    a.mac osx 10.10

    b.mongodb 3.2.0

    

  2.节点建点

  首先需要去你选择的mongodb数据文件存放的文件夹新建三个数据库,用来模拟三台不通的机器,博主的路径如下

  

cd /data/db
mkdir nodeOne nodeTwo nodeThree

  3.启动三个数据库(dbpath),并且端口(--port 1000x),集群名称(--replSet gabriel),关闭日志选项(--nojournal),守护进程方式启动,会自动拉起(--fork),日志目录(--logpath)。

mongod --dbpath /data/db/node1 --port 10001 --replSet gabriel --nojournal --fork --logpath /data/db/node1.log
mongod --dbpath /data/db/node2 --port 10002 --replSet gabriel --nojournal --fork --logpath /data/db/node2.log
mongod --dbpath /data/db/node3 --port 10003 --replSet gabriel --nojournal --fork --logpath /data/db/node3.log

  4.顺便连接一个服务器,做初始化操作,这里博主连入10001端口

//终端下进入
mongo localhost:10001
//进入后输入初始化方法
rs.initiate({_id:"gabriel",members:[
{_id:1,host:"localhost:10001"},
{_id:2,host:"localhost:10002"},
{_id:3,host:"localhost:10003"},
]})

  收到如下信息就成功了。

{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

  此时会发现终端上的输出已经有了变化。

//从单个一个
>
//变成了
gabriel:OTHER>

  5.查询状态

rs.status()

    在返回中,参数set后面为集群名称,每个members下面可以看到他们各自的情况,其中stateStr是角色,主节点为(PRIMARY)。

  6.进入主节点插入数据,进入从节点查看数据

  

//博主主节点在10001接口
mongo localhost:10001
//切换数据库,插入一条数据,依次输入
use gabdb
db.user.insert({dataid:10001})
db.user.find()

  切换到从节点,你会发现使用show dbs 会报错,是因为还没有开启权限,输入rs.slaveOk();就可以顺利访问了。

  

//切换从节点
mongo localhost:10002 //无权限查询
show dbs
//报错
2016-01-06T14:48:53.155+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 } : //开启
gabriel:SECONDARY> rs.slaveOk()
gabriel:SECONDARY> show dbs

  以上就是简单的建立过程,现在已经可以在从服务器看到主服务器插入的数据了。

  

   

三.在nodejs中使用mongoose连接replica 数据库

  1.版本介绍

  a.nodejs 0.10.25

  b.mongoose 3.8.8

  c.connect-mongo 0.8.2 (低版本有官方bug,慎用)

  

  2.配置如下

  

 var mongoose = require('mongoose'),
//mongoose配置
var opts = {
db: { native_parser: true },
server: {
poolSize: 5 ,
auto_reconnect: true,
socketOptions: {keepAlive: 1}
},
replset: { rs_name: 'gabriel' }
}
//mongoose连接
app.db = mongoose.connect(config.mongodb.repUri, opts);
app.db.on('error', console.error.bind(console, 'mongoose connection error: '));
app.db.once('open', function () {
//and... we have a data store
});
//config.mongodb.repUri 如下
exports.mongodb = { repUri:"mongodb://localhost:10001,localhost:10002,localhost:10003/gabdb"
};

  

所以过程如上所述,有问题可以留言告知,觉得好的点一下推荐~ 

mongodb replica set 和 nodejs中使用mongoose连接replica的更多相关文章

  1. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  2. 在express中使用Mongoose连接MongoDB

    为何要学Mongoose? Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单. 0.安装 ...

  3. Nodejs中Mongodb使用

    Mongodb使用 打开解压后的Mongodb文件夹,新建data.logs文件夹,并在logs文件夹中新建mongodb.log文档. 添加后Mongod文件夹示意图: 用cmd命令行启动Mongo ...

  4. nodejs中使用mongodb quickstart

    nodejs中使用mongodb quickstart node 中使用mongodb的quick start.整理的官网crud简单例子. 在百度找了几篇帖子都有问题,所以直接看官网了. 连接Mon ...

  5. 在nodejs中操作数据库(MongoDB和MySQL为例)

    一.使用nodejs操作MongoDB数据库 ①使用官方的mongodb包来操作 ②使用第三方的mongoose包来操作(比较常用) // 首先必须使MongoDB数据库保持开启状态 // npm下载 ...

  6. Mongo基础使用,以及在Express项目中使用Mongoose

    MongoDB的基本使用 MongoDB特点: 使用BSON存储数据 支持相对丰富的查询操作(相对其他nosql数据库) 支持索引 副本集(支持多个实例/多个服务器运行同个数据库) 分片(数据库水平扩 ...

  7. 使用mongoose连接mongodb(转载文章)

    mongodb数据库 MongoDB是一个高效的基于分布式文件存储的数据库,将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值 ...

  8. nodejs+express+ejs+mongoose实例

    nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...

  9. thinkjs项目中使用mongoose需要注意的地方

    原文链接thinkjs项目中使用mongoose需要注意的地方 由于thinkjs不支持mongodb的关联模型查询,所以我不得不使用mongoose这个第三方odm. 我有两个选择,一是像我在exp ...

随机推荐

  1. 团队介绍&学长采访

    1. 团队介绍 刘畅 博客园ID:森高Slontia 身份:PM 个人介绍: 弹丸粉 || 小说创作爱好者 || 撸猫狂魔 我绝对不知道,我一个写代码的怎么就当PM去了? 张安澜 博客园ID:Mins ...

  2. spring mvc ajaxfileupload文件上传返回json下载问题

    问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...

  3. [linux] vim在源代码中自动添加作者信息(转载)

    原文出处: http://www.vimer.cn/2009/10/用vim在源代码中添加你的个人信息.html vim ~/.vimrc "进行版权声明的设置 "添加或更新头 m ...

  4. spark的数据结构 RDD——DataFrame——DataSet区别

    转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...

  5. xpath获取同级元素

    XPath轴(XPath Axes)可定义某个相对于当前节点的节点集: 1.child 选取当前节点的所有子元素 2.parent 选取当前节点的父节点 3.descendant 选取当前节点的所有后 ...

  6. PSP Daily——团队项目Alpha发布

    视频展示:优酷视频链接.文案如下 PSP Daily软件NABCD分析: 1) N (Need 需求) PSP Daily 解决了用户(软件工程课上学生)记录例行报告.写每周PSP表格和统计的需求.潜 ...

  7. “我爱淘”第二冲刺阶段Scrum站立会议3

    完成任务: 完成了注册界面的设计,以及部分代码,但是还没有完成服务器端的添加功能. 计划任务: 将注册功能实现了它,可以对数据库进行添加,在客户端实现分类功能,通过学院的分类查看书籍. 遇到问题: 分 ...

  8. 第八次作业(课堂实战)- 项目UML设计

    本次作业博客 团队信息 队名:起床一起肝活队 原组长: 白晨曦(101) 原组员: 李麒 (123) 陈德斌(104) 何裕捷(214) 黄培鑫(217) 王焕仁(233) 林志华(128) 乐忠豪( ...

  9. haproxy入门 (作用: 高可用性,负载平衡和用于TCP和基于http的应用程序的代理)

    安装haproxy 1:RPM包安装 yum install -y haproxy   2:编译安装 http://www.haproxy.org/#down   例如安装1.7.9版本 http:/ ...

  10. javascript之彻底理解valueOf, toString

    参与运算的都是简单类型(一般就字符串和数字), 复杂类型是不参与运算的. ***当对象(非简单类型)用作键时,会先调用toString()方法把对象转化成字符串 var a = {},     b = ...