在之前的《MongoDB分布式部署》中已经提到,同一组数据库服务器上的数据是支持复制的。mongodb支持两种方式的数据复制,简单的主从配置和互为主从的配置。
MongoDB分布式部署之分片配置可见http://hi.baidu.com/lzpsky/blog/item/644e083d6bbd920cbaa16793.html
一、主从配置(Master Slave)
主从数据库需要两个数据库节点即可,一主一从(并不一定非得两台独立的服务器,可使用--dbpath参数指定数据库目录)。
$ bin/mongod --master [--dbpath /data/masterdb/]
于是,主服务器进程就会创建一个local.oplog.$main数据集,即"transaction log",以记录从服务器需要的操作队列信息。
配置一个从数据库节点:
$ bin/mongod --slave --source <masterhostname>[:<port>] [--dbpath /data/slavedb/]
主节点的信息会存放在从节点的 local.sources数据集中,也可以不指定--source参数,而是往local.sources中增加一条包含主节点信息的记录。
$ bin/mongo <slavehostname>/local
> db.sources.find(); > db.sources.insert( { host: <masterhostname> } );
host:<masterhostname> 主节点的ip地址或域名全称,可跟上:port指定端口。
如果指定了only: databasename (optional) ,表示只有指定的数据库才复制,注:v1.2.1+修复了only的一个bug。
一个从节点可以有多个主节点,这种情况下,local.sources中会有多条配置信息。
一台服务器可以同时即为主也为从。如果一台从节点与主节点不同步,比如从节点的数据更新远远跟不上主节点或者从节点中断之后重启但主节点中相关的数据更新日志却不可用了。这种情况下,复制操作将会终止,需要管理者的介入,看是否默认需要重启复制操作。管理者可以使用{resync:1} 命令重启复制操作,可选命令行参数 --autoresync可使从节点在不同步情况发生10秒钟之后,自动重启复制操作。如果指定了--autoresync参数,从节点在10分钟以内自动重新同步数据的操作只会执行一次。
--oplogSize命令行参数(与--master一同使用)配置用于存储给从节点可用的更新信息占用的磁盘空间(M为单位),如果不指定这个参数,默认大小为当前可用磁盘空间的5%(64位机器最小值为1G,32位机器为50M)。
安全性方面:
$ dbshell <slavehostname>/admin -u <existingadminusername> -p<adminpassword>
> use local
> db.addUser('repl', <replpassword>);
^c
$ dbshell <masterhostname>/admin -u <existingadminusername> -p<adminpassword>
> use local
> db.addUser('repl', <replpassword>);
二、互为主从(Replica Pairs)
数据库自动协调某个时间点上的主从关系。开始的时候,数据库会判断哪个是从哪个是主,一旦主服务器负载过高,另一台就会自动成为主服务器。
$ ./mongod --pairwith <remoteserver> --arbiter <arbiterserver>
remoteserver组中的其他服务器host,可加:port指定端口。
arbiterserver 仲裁(arbiter )的host,也可指定端口。仲裁是一台mongodb服务器,用于协助判断某个时间点上的数据库主从关系。如果同组服务器在同一个交换机或相同的ec2可用区域内,就没必要使用仲裁了。如果同组服务器之间不能通信,可是使用运行在第三方机器上的仲裁,使用“抢七”方式有效地敲定主服务器,也可不使用仲裁,这样所有的服务器都假定是主服务器状态,可通过命令人工检测当前哪台数据库是主数据库:
$ ./mongo
> db.$cmd.findOne({ismaster:1});
{ "ismaster" : 0.0 , "remote" : "192.168.58.1:30001" , "ok" : 1.0 }
一致性:故障转移机制只能够保障组中的数据库上的数据的最终一致性。如果机器L是主服务器,然后挂了,那么发生在它身上的最后几秒钟的操作信息就到达不了机器R,那么机器R在机器L恢复之前是不能执行这些操作的。
安全性:同主从的操作相同。
数据库服务器替换。当一台服务器失败了,系统能自动在线恢复。但当一台机器彻底挂了,就需要替换机器,而替换机器一开始是没有数据的,怎么办?以下会解释如何替换一组服务器中的一台机器。
假设nodes(n1,n2)中的n2挂了,需要变成nodes(n1,n3)。
1、假设n2彻底挂了下线了,不能在线恢复。
2、需要告诉n1,你的搭档已经不是n2了而是n3。可使用replacepeer 命令,检测该操作的返回值以确保操作成功。
n1> ./mongo n1/admin
> db.$cmd.findOne({replacepeer:1});
{
"info" : "adjust local.sources hostname; db restart now required"
"ok" : 1.0
}
3、使用以下命令重启n1。
n1> ./mongod --pairwith n3 --arbiter <arbiterserver>
4、启动n3。
n3> ./mongod --pairwith n1 --arbiter <arbiterserver>
注意的是,n3在与n1数据完全同步之前不能接收作为主节点的任何操作。
如果从节点设置了ok标志(db.getMongo().setSlaveOk() ),就可以查询从节点了。
三、配置案例
见《MongoDB分布式部署之分片配置》的第六个模块——案例部分,有详解。
四、java案例
1、链接mongodb:
ServerAddress right = new ServerAddress("10.13.127.212", 18020);
ServerAddress left = new ServerAddress("10.13.127.211", 18020);
Mongo mongo = new Mongo(right, left);
DB db = mongo.getDB("test");
db.authenticate("test", "test".toCharArray());
2、插入:
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("id", i);
dbObject.put("time", System.currentTimeMillis());
coll.insert(dbObject);
3、更新
coll.update(new BasicDBObject("_id", id), getDBObjectByLabel(mongoLabel));
4、查询,查询条件的表达式文档:
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("id", 1); //增加查询条件
BasicDBObject sortObject = new BasicDBObject(LabelConstant.ORDER_BY,LabelConstant.ORDER_DESC);
DBCursor dbCursor = coll.find(dbObject); //不分页不排序
//cursor = coll.find(doc).skip((pageNo - 1) * pageSize).limit(pageSize).sort(sortObject); //分页排序
DBObject result = dbCursor.next(); //取数据
分享到:
相关推荐
MongoDB是一种基于分布式文件存储的开源数据库系统,它在处理大量数据时表现出高效、可扩展性和高可用性。MongoDB采用JSON(JavaScript Object Notation)文档格式存储数据,这种格式灵活且易于理解,使得它在大数据...
### MongoDB大型分布式部署详解 #### 一、MongoDB大型分布式部署概述 MongoDB是一种非常流行的NoSQL数据库系统,尤其适用于需要处理大量非结构...希望本文能够帮助读者更好地理解和掌握MongoDB分布式部署的相关知识。
4. **数据复制机制**:采用主-从和主-主模式,确保数据可用性和容错能力。 5. **自动分片技术**:支持动态数据扩展,提高系统的可伸缩性。 ##### MongoDB结构 MongoDB采用了数据库(database)、集合(collection)、...
### MongoDB分布式集群搭建详解 #### 一、集群与分布式概念 **集群(Cluster)**与**分布式(Distributed)**是两种常见的架构设计模式,用于提高系统的可用性、可伸缩性和性能。 1. **集群(Cluster)** - **定义**:...
总结,本发明提供了一种利用MongoDB分布式集群架构的日志系统,结合分片技术实现了日志数据的有效管理和高效处理。通过对分片策略的优化,系统能够适应不断增长的数据量,同时保持高可用性和性能,为大规模日志分析...
在分布式环境中,MongoDB通过复制集(Replica Set)实现高可用性和数据冗余,以及分片(Sharding)来实现水平扩展。本文将详细介绍MongoDB的分布式安装部署过程,以及如何进行复制集的配置与测试。 一、MongoDB的...
在MongoDB分布式集群中,副本集的概念是核心组成部分。副本集是由多个mongod实例组成的,每个实例称为一个节点。副本集的主要目的是提供数据的冗余和高可用性,确保数据的持久性和一致性的同时,提供读取操作的负载...
1. **MongoDB分布式数据库集群**:MongoDB是一款面向文档的、高性能、灵活的NoSQL数据库,适合处理大量结构化和半结构化数据。在分布式环境下,MongoDB通过分片(Sharding)、复制集(Replica Sets)和自动故障转移...
4. **复制集**:如果数据涉及复制集配置,你可以学习如何设置和管理MongoDB的复制集,以确保数据的高可用性。 5. **分片集群**:对于大规模数据,测试数据可能涉及分片配置,让你了解如何通过分片扩展数据库的存储...
- **数据复制机制**:使用主-从或主-主模式,易于故障恢复和数据热备。 - **自动分片技术**:实现动态数据添加,数据库具有良好的伸缩性。 ### MongoDB结构 MongoDB的结构由三个层次组成:数据库(database)、集合...
在大数据领域,MongoDB 作为一个分布式文件数据库,其分布式特性体现在支持分片(Sharding)和复制集(Replica Set)。分片允许将数据分散在多个服务器上,以水平扩展存储容量和读写性能。复制集则提供了数据冗余,...
MongoDB 的分布式部署涉及多种服务组件,这些组件协同工作以提供高度可扩展且具有容错能力的数据存储解决方案。 **1.1 配置服务(Config Server)** 配置服务负责存储集群的元数据信息,主要包括数据在各个分片...
MongoDB的读写分离机制是基于其数据复制的特性来实现的。读操作可以在主节点或任何一个从节点上执行,而写操作必须在主节点上执行。通过在应用层对读写操作进行合理分配,可以充分利用集群的读取能力,减轻主节点的...
### MongoDB集群分布式存储实战知识点详解 #### 一、MongoDB简介与应用场景 MongoDB是一款开源的NoSQL数据库系统,以其高性能、高可用性和易扩展性而闻名。它使用JSON-like的文档来存储数据,非常适合处理半结构化...
### MongoDB 主从复制,副本集分布式存储 #### 一、MongoDB 主从复制与副本集的概念 MongoDB 是一种非常流行的非关系型数据库系统,它采用面向文档的数据模型,能够高效地处理大量的非结构化数据。为了提高系统的...
Replication 与 Raft 协议是 MongoDB 的一种分布式一致性协议,用于解决分布式系统中的leader选举和数据复制问题。 Raft 论文 Raft 论文是 MongoDB 的一种分布式一致性协议的论文,用于解决分布式系统中的leader...
在搭建MongoDB的分布式数据库集群时,除了分片和复制集技术外,还需要考虑数据的自动故障恢复、自动碎片处理和高效的数据存储等特性。这些特性保证了在任何节点发生故障时,系统都能快速地恢复运行,减少系统停机...
MongoDB是一个流行的开源、分布式文档数据库,被广泛用于处理结构化和半结构化的数据。其设计目标是提供高性能、高可用性和易于扩展性。在深入探讨MongoDB的元数据和数据类型之前,我们先理解一下这两个概念。 元...
MongoDB设计为能够水平扩展的分布式数据库,尤其适合大数据处理和需要快速读写大量数据的场景。本文所涉及的核心知识点是MongoDB的分布式架构,包括复制集(ReplicaSets)和分片(Sharding)的混合使用。复制集负责...