MongDB主从复制、复制集
主从复制比较简单,指定master、slave即可,其中master可写可读、slave只能读不能写。向master插入数据时,mongodb会自动将数据复制到slave节点。这样做的好处是读写分离,也便于控制一些权限。方法:
启动master:
像正常启动一样,只用加一个--master即可将此节点标记为主。
mongod --dbpath "F:\mongo\dbs\master" --port --master --logpath "F:\mongo\logs\master\MongoDB.log" --rest
启动slave:
与正常启动相比多了两个参数,一个是--slave(把这个机器标识为slave),另一个是--source 127.0.0.1:10000(表示此slave的master是本机的10000号端口)
mongod --dbpath "D:\mongo\dbs\slave" --port --slave --source 127.0.0.1: --logpath "D:\mongo\logs\slave\MongoDB.log" --rest
然后可以测试,向master插入数据,会被自动复制到slave。向slave插入数据会提示mot master异常。
Replica Set复制集:
replica Set的特点是多个节点互相备份,其中一个节点担任primary,其余节点担任secondary。当primary节点挂掉之后,会通过选举机制在secondary中重新产生一个primary节点,可以提高mongoDB的健壮性。特别是在分片中,可以将每个分片使用replica set作为复制集这样更稳定。
操作步骤:
第一个节点启动时:
C:\Users\tree>mongod --dbpath "D:\Program Files\MongoDB\data\db" --logpath "D:\Program Files\MongoDB\data\log\MongoDB.log" --logappend --rest --journal --replSet CIF/127.0.0.1:
这样就启动了一个在27017的节点。
其中使用--replSet CIF/127.0.0.1:10000来声明这个节点是一个复制集,复制集的名字是“CIF”,另外一个节点在127.0.0.1的10000端口上。
第二个节点:
E:\MongoDB_CIF\bin>mongod --dbpath "E:\MongoDB_CIF\data\db" --port --logpath "E:\MongoDB_CIF\data\log\MongoDB.log" --logappend --rest --journal --replSet CIF/127.0.0.1:
同样使用--replSet CIF/127.0.0.1:27017声明这个节点和本机27017的节点同为一个CIF复制集。
第三个节点:
我们在linux虚拟机上加入第三个节点是,随便指定上面的一个节点就行,mongoDB会自动将所有节点连接起来,如:
[root@localhost log]# mongod -dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/data/log/MongoDB.log --logappend --fork --rest --journal --replSet CIF/192.168.43.104:
about to fork child process, waiting until server is ready for connections.
all output going to: /usr/local/mongodb/data/log/MongoDB.log
forked process:
child process started successfully, parent exiting
OK,三个节点都建立好了,现在开始初始化:
初始化:
随便在一个终端进行,这个终端会被当成primary节点。要求secondary节点没有数据,否则会报一个already has data......must be empty什么的错。
config={"_id":"CIF","members":[{"_id":,"host":"192.168.43.104:27017"},{"_id":,"host":"192.168.43.104:10000"},{"_id":,"host":"192.168.43.101:27017"}]}
rs.initiate(config)
客户端打印如下信息,说明复制集建立成功:
> rs.initiate(config)
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" :
}
然后进入控制页面看看:

可以看见一个primary节点,两个secondary节点。
加入一个仲裁节点:
下面测试在2000端口启动一个仲裁节点:
mongod -dbpath "E:\MongoDB_Arbiter\data\db" --port --logpath "E:\MongoDB_Arbiter\data\log\MongoDB.log" --logappend --rest --journal --replSet CIF/127.0.0.1:
在primary节点上重新配置:
config={"_id":"CIF","members":[{"_id":,"host":"192.168.43.104:27017",priority:},{"_id":,"host":"192.168.43.104:10000"},{"_id":,"host":"192.168.43.101:27017"},{"_id":,"host":"192.168.43.104:20000",arbiterOnly:true}]}
CIF:PRIMARY> rs.reconfig(config)

以上变配置好了复制集。复制集主节点操作没有任何问题,但是对从节点进行操作时:
CIF:SECONDARY> show collections
Mon Sep ::36.128 error: { "$err" : "not master and slaveOk=false", "code" : } at src/mongo/shell/query.js:
会报一个我们熟悉的错,not master~需要设置slaveOK属性才可以在secondary节点查询:
CIF:SECONDARY> db.getMongo().setSlaveOk()
然后再查询就OK了。
如需修改每个节点的权重:
//登录primary节点,显示当前复制集的配置:
CIF:PRIMARY> rs.conf()
{
"_id" : "CIF",
"version" : ,
"members" : [
{
"_id" : ,
"host" : "192.168.43.104:27017",
"priority" :
},
{
"_id" : ,
"host" : "192.168.43.104:10000"
},
{
"_id" : ,
"host" : "192.168.43.101:27017"
},
{
"_id" : ,
"host" : "192.168.43.104:20000",
"arbiterOnly" : true
}
]
} //把这个配置付给一个变量config
CIF:PRIMARY> config=rs.conf() //重新修改config变量的值
CIF:PRIMARY> config.members[].priority= CIF:PRIMARY> config.members[].priority= //重新把config变量配置到mongo集群中:
CIF:PRIMARY> rs.reconfig(config)
Mon Sep ::29.808 DBClientCursor::init call() failed
Mon Sep ::29.811 trying reconnect to 127.0.0.1:
Mon Sep ::29.818 reconnect 127.0.0.1: ok
reconnected to server after rs command (which is normal)
附:linux下可以通过conf配置文件启动
配置文件全文:
# mongo.conf #where to log
logpath=/var/log/mongo/mongod.log logappend=true # fork and run in background
fork = true #port = dbpath=/var/lib/mongo # Enables periodic logging of CPU utilization and I/O wait
#cpu = true # Turn on/off security. Off is currently the default
#noauth = true
#auth = true # Verbose logging output.
#verbose = true # Inspect all client data for validity on receipt (useful for
# developing drivers)
#objcheck = true # Enable db quota management
#quota = true # Set oplogging level where n is
# =off (default)
# =W
# =R
# =both
# =W+some reads
#oplog = # Diagnostic/debugging option
#nocursors = true # Ignore query hints
#nohints = true # Disable the HTTP interface (Defaults to localhost:).
#nohttpinterface = true # Turns off server-side scripting. This will result in greatly limited
# functionality
#noscripting = true # Turns off table scans. Any query that would do a table scan fails.
#notablescan = true # Disable data file preallocation.
#noprealloc = true # Specify .ns file size for new databases.
# nssize = <size> # Accout token for Mongo monitoring server.
#mms-token = <token> # Server name for Mongo monitoring server.
#mms-name = <server-name> # Ping interval for Mongo monitoring server.
#mms-interval = <seconds> # Replication Options # in replicated mongo databases, specify here whether this is a slave or master
#slave = true
#source = master.example.com
# Slave only: specify a single database to replicate
#only = master.example.com
# or
#master = true
#source = slave.example.com # Address of a server to pair with.
#pairwith = <server:port>
# Address of arbiter server.
#arbiter = <server:port>
# Automatically resync if slave data is stale
#autoresync
# Custom size for replication operation log.
#oplogSize = <MB>
# Size limit for in-memory storage of op ids.
#opIdMem = <bytes>
故我们上面的启动第三个节点的如下脚本可以改成配置文件形式:
之前的配置:
[root@localhost log]# mongod -dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/data/log/MongoDB.log --logappend --fork --rest --journal --replSet CIF/192.168.43.104:
之后的配置:【待续】
MongDB主从复制、复制集的更多相关文章
- Mongodb Manual阅读笔记:CH8 复制集
8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- mongdb复制集搭建
可参考官网教程 复制集增加了数据的冗余同时也提高了mongodb的可靠性,相比传统的主从架构,mongodb具有自动容灾的特性,即主库挂掉后会自动从剩下的从库中选举出一个节点做为主库(不需要人工干预) ...
- mongdb 复制集
步骤: 一.启动三台进程 1../bin/mongod --dbpath=/home/work/app/mongodb/mongodb-linux-x86_64-amazon-3.2.7/data/r ...
- mongoDB研究笔记:复制集故障转移机制
上面的介绍的数据同步(http://www.cnblogs.com/guoyuanwei/p/3293668.html)相当于传统数据库中的备份策略,mongoDB在此基础还有自动故障转移的功能.在复 ...
- MongoDB实战指南(七):MongoDB复制集之复制集工作机制
http://www.cnblogs.com/longshiyVip/p/5097336.html 概述了复制集,整体上对复制集有了个概念,但是复制集最重要的功能之——自动故障转移是怎么实现的呢?数据 ...
- MongoDB 复制集 (一) 成员介绍
一 MongoDB 复制集简介 MongoDB的复制机制主要分为两种: Master-Slave (主从复制) 这个已经不建议使用 ...
- 快速搭建MySQL复制集
快速搭建MySQL复制集 1 环境说明 MySQL版本 5.6 basedir :/u01/my3306 #MySQL软件目录 数据目录 :/u01/mysql/[实例名]/data 日志目录 :/u ...
- mongodb 复制集
mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- Mongodb主从复制/ 副本集/分片集群介绍
前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...
随机推荐
- 关于Linux内核学习的误区以及相关书籍介绍
http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...
- [转]Android应用的自动更新
软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...
- hdu 1800 Flying to the Mars
Flying to the Mars 题意:找出题给的最少的递增序列(严格递增)的个数,其中序列中每个数字不多于30位:序列长度不长于3000: input: 4 (n) 10 20 30 04 ou ...
- SVN - 基础知识
1. 术语 $ svn checkout URL [PATH] ----- 下载服务器所有文件 (clone) 到本地[path] --- 只需一次 $ svn checkout http: ...
- java通过jni方式获取硬盘序列号(windows,linux)
linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘 ...
- 3G 2G GPRS 1G的概念
3G, 第三代移动通信技术(3rd-generation,3G),是指支持高速数据传输的蜂窝移动通讯技术.3G服务 能够同时传送声音及数据信息,速率一般在几百kbps以上.3G标准:它们分别是WCDM ...
- MinGW中的头文件路径级环境变量设置
整理自 MinGW中的头文件路径 C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...
- 构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介
构建简单的 C++ 服务组件,第 1 部分: 服务组件体系结构 C++ API 简介 熟悉将用于 Apache Tuscany SCA for C++ 的 API.您将通过本文了解该 API 的主要组 ...
- zookeeper如何永久监听
转自:http://www.cnblogs.com/viviman/archive/2013/03/11/2954118.html 一 回调基础知识 znode 可以被监控,包括这个目录节点中存储的数 ...
- [转贴]C++、C#写的WebService相互调用
以下宏文(原文在 http://blog.sina.com.cn/s/blog_4e7d38260100ade4.html),是转贴并进行了修饰编辑: 首先感谢永和兄提供C++的WebService服 ...