一.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. 联邦快递 IE和IP的区别 Fedex IE VS Fedex IP

    什么是FedEx IP? FedEx IP指的是联邦快递优先服务,时效比较快些,相对来说价格也比普通的高一些. 什么是FedEx IE? FedEx IE指的是联邦快递经济服务,时效与FedEx IP ...

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

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

  3. ntp时钟服务器配置

    集群中时间不同步有可能会让大数据的应用程序运行混乱,造成不可预知的问题,比如Hbase,当时间差别过大时就会挂掉,所以在大数据集群中,ntp服务,应该作为一种基础的服务,以下在演示在CentOS 7. ...

  4. TCP系列44—拥塞控制—7、SACK关闭的快速恢复

    ) return;    delta = ssthresh - in_flight;     prr_delivered += newly_acked_sacked; if (delta < 0 ...

  5. 整理sql server数据类型

    我们在平常开发过程中,在设计数据的时候,经常碰到数据类型选择的问题,为了更快,更合适地选择正确的数据类型,所以在这里做个总结. 分类 sql server 数据类型 c# 数据类型 描述 应用场景 字 ...

  6. Java compiler level does not match the version of the installed Java project facet. map解决方法

    右键项目"Properties",在弹出的"Properties"窗口左侧,单击"Project Facets",打开"Proje ...

  7. 【beta】nice!-------约吧NABCD

    小组名称:nice! 组长:李权 成员:于淼  刘芳芳韩媛媛 宫丽君 项目内容:约跑app(约吧) 约吧APP下载地址: 百度云:链接:http://pan.baidu.com/s/1jHNBR3g ...

  8. VisualStudio2013 代码查看优化 对齐线

    http://jingyan.baidu.com/article/363872eccef5276e4ba16f91.html

  9. PHP中与类有关的几个魔术常量

    与类有关的魔术常量: 以前学过的魔术常量: __FILE__ __DIR__ __LINE__ 现在: __CLASS__: 代表当前其所在的类的类名: __METHOD__:代表其当前所在的方法名:

  10. 第120天:移动端-Bootstrap基本使用方法

    一.Bootstrap使用 1.搭建Bootstrap页面骨架及项目目录结构 ``` ├─ /weijinsuo/ ··················· 项目所在目录 └─┬─ /css/ ···· ...