当前位置:文档之家› 配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster)
配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster)

这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。

要构建一个MongoDB Sharding Cluster,需要三种角色:

Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障

Config Server: mongod 实例,存储了整个Cluster Metadata,其中包括chunk 信息。

Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

Sharding架构图:

本例实际环境架构

本例架构示例图:

分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1

1. 分别在3台机器运行一个mongod实例(称为mongod shard21,

mongod shard22,mongod shard23)组织replica set2,作为cluster

的shard2

2. 每台机器运行一个mongod实例,作为3个config server

3. 每台机器运行一个mongs进程,用于客户端连接

主机IP端口信息

Server1 10.1.1.1 mongod shard11:27017 mongod shard21:27018 mongod config1:20000

mongs1:30000

Server2 10.1.1.2 mongod shard12:27017 mongod shard22:27018 mongod config2:20000 mongs2:30000

Server3 10.1.1.3 mongod shard13:27017 mongod shard23:27018 mongod config3:20000 mongs3:30000

软件准备

软件准备

1. 创建用户

groupadd -g 20001 mongodb

useradd -u 20001 -g mongodb mongodb passwd mongodb

2. 安装monodb软件

su – mongodb

tar zxvf mongodb-linux-x86_64-1.6.2.tar 安装好后,目录结构如下:

$ tree mongodb-linux-x86_64-1.6.2 mongodb-linux-x86_64-1.6.2

|– GNU-AGPL-3.0

|– README

|– THIRD-PARTY-NOTICES

`– bin

|– bsondump

|– mongo

|– mongod

|– mongodump

|– mongoexport

|– mongofiles

|– mongoimport

|– mongorestore

|– mongos

|– mongosniff

`– mongostat

1 directory, 14 files

3. 创建数据目录

根据本例sharding架构图所示,在各台sever上创建shard数据文件目录Server1:

su – monodb

cd /home/monodb

mkdir -p data/shard11

mkdir -p data/shard21

Server2:

su – monodb

cd /home/monodb

mkdir -p data/shard12

mkdir -p data/shard22

Server3:

su – monodb

cd /home/monodb

mkdir -p data/shard13

mkdir -p data/shard23

配置relica sets

1. 配置shard1所用到的replica sets:

Server1:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard11 –oplogSize 100 –logpath /home/mongodb/data/shard11.log –logappend –fork Server2:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard12 –oplogSize 100 –logpath /home/mongodb/data/shard12.log –logappend –fork Server3:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard1 –port 27017 –dbpath /home/mongodb/data/shard13 –oplogSize 100 –logpath /home/mongodb/data/shard13.log –logappend –fork

初始化replica set

用mongo连接其中一个mongod,执行:

> config = {_id: ’shard1′, members: [

{_id: 0, host: '10.1.1.1:27017'},

{_id: 2, host: '10.1.1.3:27017'}]

}

> rs.initiate(config);

同样方法,配置shard2用到的replica sets:

server1:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard21 –oplogSize 100 –logpath /home/mongodb/data/shard21.log –logappend –fork server2:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard22 –oplogSize 100 –logpath /home/mongodb/data/shard22.log –logappend –fork server3:

cd /home/mongodb/mongodb-linux-x86_64-1.6.2/bin

./mongod –shardsvr –replSet shard2 –port 27018 –dbpath /home/mongodb/data/shard23 –oplogSize 100 –logpath /home/mongodb/data/shard23.log –logappend –fork

初始化replica set

用mongo连接其中一个mongod,执行:

> config = {_id: ’shard2′, members: [

{_id: 1, host: '10.1.1.2:27018'},

{_id: 2, host: '10.1.1.3:27018'}]

}

> rs.initiate(config);

到此就配置好了二个replica sets,也就是准备好了二个shards

配置三台config server

Server1:

mkdir -p /home/mongodb/data/config

./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork #config server也需要dbpath

Server2:

mkdir -p /home/mongodb/data/config

./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork

Server3:

mkdir -p /home/mongodb/data/config

./mongod –configsvr –dbpath /home/mongodb/data/config –port 20000 –logpath /home/mongodb/data/config.log –logappend –fork

配置mongs

在server1,server2,server3上分别执行:

./mongos –configdb 10.1.1.1:20000,10.1.1.2:20000,10.1.1.3:20000 –port 30000

–chunkSize 5 –logpath /home/mongodb/data/mongos.log –logappend –fork

#mongs不需要dbpath

Configuring the Shard Cluster

连接到其中一个mongos进程,并切换到admin数据库做以下配置

1. 连接到mongs,并切换到admin

./mongo 10.1.1.1:30000/admin

>db

Admin

2. 加入shards

如里shard是单台服务器,用>db.runCommand( { addshard : “[:]” } )这样的命令加入,如果shard是replica sets,用replicaSetName/[:port]

[,serverhostname2[:port],…]这样的格式表示,例如本例执行:

>db.runCommand( { addshard :

“shard1/10.1.1.1:27017,10.1.1.2:27017,10.1.1.3:27017″,name:”s1″,maxsize:2048 0} );

>db.runCommand( { addshard :

“shard2/10.1.1.1:27018,10.1.1.2:27018,10.1.1.3:27018″,name:”s2″,maxsize:2048 0} );

注意:在添加第二个shard时,出现error:test database 已经存在的错误,这里用mongo命令连接到第二个replica set,用db.dropDatabase()命令把test数据库给删除然后就可加入

3. 可选参数

Name:用于指定每个shard的名字,不指定的话系统将自动分配

maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes

4. Listing shards

>db.runCommand( { listshards : 1 } )

如果列出了以上二个你加的shards,表示shards已经配置成功

5. 激活数据库分片

命令:

> db.runCommand( { enablesharding : “” } );

通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的collection 将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还需单独对collection作些操作

Collecton分片

要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:

> db.runCommand( { shardcollection : “”,key : });

注:

a. 分片的collection系统会自动创建一个索引(也可用户提前创建好)

b. 分片的collection只能有一个在分片key上的唯一索引,其它唯一索引不被允许One note: a sharded collection can have only one unique index, which must exist on the shard key. No other unique indexes can exist on the collection.

分片collection例子

>db.runCommand( { shardcollection : “test.c1″,key : {id: 1} } )

>for (var i = 1; i <= 200003; i++)

db.c1.save({id:i,value1:”1234567890″,value2:”1234567890″,value3:”1234567890″

,value4:”1234567890″});

> db.c1.stats()

{

“sharded” : true,

“ns” : “test.c1″,

“count” : 200003,

“size” : 25600384,

“avgObjSize” : 128,

“storageSize” : 44509696,

“nindexes” : 2,

“nchunks” : 15,

“shards” : {

“s1″ : {

“ns” : “test.c1″,

“count” : 141941,

“size” : 18168448,

“avgObjSize” : 128,

“storageSize” : 33327616,

“numExtents” : 8,

“nindexes” : 2,

“lastExtentSize” : 12079360,

“paddingFactor” : 1,

“flags” : 1,

“totalIndexSize” : 11157504,

“indexSizes” : {

“_id_” : 5898240,

“id_1″ : 5259264

},

“ok” : 1

},

“s2″ : {

“ns” : “test.c1″,

“count” : 58062,

“size” : 7431936,

“avgObjSize” : 128,

“storageSize” : 11182080,

“numExtents” : 6,

“nindexes” : 2,

“lastExtentSize” : 8388608,

“paddingFactor” : 1,

“flags” : 1,

“totalIndexSize” : 4579328,

“indexSizes” : {

“_id_” : 2416640,

“id_1″ : 2162688

},

“ok” : 1

}

},

“ok” : 1 }

mongodb分片集群认证

1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFile认证,集群所有mongod和mongos实例使用内容相同的keyFile文件 1. 生成密钥文件 1#在其中任意一台机器上生成keyfile 2shell> openssl rand ‐base64 700 > keyfile 3shell> chmod 400 keyfile 4########openssl的下载安装:执行yum ‐y install openssl######## 5 2. 分发密钥文件到每一台 1#将keyfile放置在路径 2shell> mkdir ‐p /opt/mongodb/security/ 3shell> mv keyfile /opt/mongodb/security/ 4shell> scp ‐r /opt/mongodb/security/ root@192.168.94.45:/opt/mongodb/ 5shell> scp ‐r /opt/mongodb/security/ root@192.168.94.57:/opt/mongodb/ 2.关闭所有mongod、mongos、configsvr,编辑配置文件,重新启动每台服务器每个实例 1. 关闭所有configsvr、mongod、mongos 1#关闭时,直接killall杀掉所有进程即可 2shell> killall mongod 3shell> killall mongos 4#或者在启动命令后添加 ‐‐shundown依次关闭 5shell> mongod ‐f /opt/mongodb/conf/mongos.conf ‐‐shutdown 6shell> mongod ‐f /opt/mongodb/conf/shard3.conf ‐‐shutdown 7shell> mongod ‐f /opt/mongodb/conf/shard2.conf ‐‐shutdown 8shell> mongod ‐f /opt/mongodb/conf/shard1.conf ‐‐shutdown 9shell> mongod ‐f /opt/mongodb/conf/configsvr.conf ‐‐shutdown 2. 编辑配置文件 1为每一个mongod、mongos、配置服务器的实例其中的配置文件添加认证属性或者在启动实 例时添加‐‐authorization、‐‐keyFile选项 2shell> vi /opt/mongodb/conf/configsvr.conf 3#configsvr.conf 添加以下配置 4security: 5 authorization: enabled #若启动实例报错,可删除该行 6 keyFile: /opt/mongodb/security/keyfile 7shell> vi /opt/mongodb/conf/shard1.conf 8#shard1.conf 添加以下配置 9security:

MongoDB集群配置帮助文档

MongoDB集群帮助手册 2016年5月 修订记录 一、Mongodb集群架构简介 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。 要构建一个MongoDB Sharding Cluster,需要三种角色: ●Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障 ●Config Server: mongod 实例,存储了整个Cluster Metadata,其中包括chunk 信息。 ●Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像 单一数据库,前端应用可以透明使用。

本例架构示例图:

1.分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1 2.分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2 3.每台机器运行一个mongod实例,作为3个config server 4.每台机器运行一个mongs进程,用于客户端连接 二、集群配置 2.1软件准备 1.安装monodb软件 su – mongodb tar zxvf mongodb-linux-x86_64-1.6.2.tar

MONGODB数据库中自动分片技术应用研究

摘要:mongodb为了提高处理大数据量时的性能,提供了自动分片的技术。mongodb的分片是集合级别的,根据基于分区的片键可以将数据集合均匀的分布在各片上。文中在研究mongodb 特点的基础上,着重分析自动分片技术的应用。对比普通和分片情况下的mongodb性能,提出使用基于分区的mongodb自动分片技术可以提高数据量较大时的性能,使mongodb更稳定。对比片索引和普通索引的性能,提出对于使用非常频繁的查询或写操作,应使用基于片键的索引,可以大幅度提高mongodb的性能。 关键词:mongodb 自动分片性能测试非关系型数据库 中图分类号:tp311.13 文献识别码:a 文章编号:1007-9416(2016)06-0000-00 1 mongodb介绍 mongodb是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的众多有用功能,如辅助索引、范围查询和排序。mongodb的功能非常丰富,比如内置的对mapreduce 式聚合的支持,以及对地理空间索引的支持。mongodb既有优点也有缺点,但是总体来说还是相当不错的,它是nosql数据库中最接近sql数据的一种基于文档的数据库产品,主要为网页应用提供可扩展的高性能数据存储解决方案,并且已经应用在一些世界顶级的互联网公司的产品中。 2 mongodb的自动分片技术介绍 使用自动分片技术的mongodb集群包括以下三个组件:分片服务器、路由服务器配置服务器。 分片服务器负责存储数据。为了提供高可用性和数据一致性,在生产环境中,分片服务器集群中,每一个片都是一个副本集。如果是开发环境或者测试环境中,可以不采用副本集机制。本文主要研究mongodb的自动分片技术,为了更好的观察mongodb的自动分片技术本文中的每一个片都是一个单独的mongod服务,并没有采用副本集技术。 路由服务器,也可称为查询路由服务器,它是mongos实例程序,接收客户端的请求,把请求直接分发给适当的一个或几个分片服务器,收集分片服务器的操作结果汇总成最终结果,然后将最终结果返回给客户端。一个mongodb集群可以有多个路由服务器。 配置服务器存储mongodb集群的元数据。包括数据的分片策略。路由服务器根据这些元数据把请求分发到特殊的分片服务器。并且在3.2版本以后,配置服务器可以应用副本集机制。 3 性能测试 此次测试共涉及5台服务器:3台mongodb服务器。机器配置:cpu 为 intel(r) core (tm) i7-5500u cpu @ 2.40ghz、内存为16g、硬盘1t、操作系统为linux。分别在3台机器运行一个mongod实例和一个mongos进程。在scala程序设计语言下,使用mongodb官方提供的casbah工具包编写程序对mongodb进行操作。 (1)对三个数据集分别插入1亿条数据,要求数据的l1字段取值均匀的分布在长整型取值空间上; 在插入的数据每条为1kb的情况下,普通插入的方式在数据量小于1000万条时,三个数据集性能都是是比较高效的,但之后每秒插入数据量骤降。原因是mongodb的普通插入只是把数据写入内存就结束了,所以在内存有空闲时,普通插入速度是非常高效的,但是随着写入数据量的增加,内存逐渐被占用,此事再写入数据需要在磁盘和内存间进行大量的数据交换,因此性能下降较快。 虽然随着写入数据量的增加,写入性能明显下降,但是分片数据集下降率比未分片的数据集低。在数据量大于2000万后的写入数据性能,分片数据集比未分片数据集要好。 比较collection1和collection2发现,在数据量大于4000万后,collection1的写入

MongoDB入门经典

第一讲MongDB数据库的基本安装文件 https://www.doczj.com/doc/b71098492.html,/display/DOCS/Home MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。Mongo 使用C++开发。Mongo的官方网站地址是:https://www.doczj.com/doc/b71098492.html,/ 首先下载数据库的基本软件安装包,下载地址:https://www.doczj.com/doc/b71098492.html,/download 第二,新建目录“D:\MongoDB”,解压下载到的安装包,找到bin目录下面全部.exe文件,拷贝到刚创建的目录下。 第三,在“D:\MongoDB”目录下新建“data”文件夹,它将会作为数据存放的根文件夹。 配置Mongo服务端: https://www.doczj.com/doc/b71098492.html,/scotthernandez/mongo-seattle-java-development 打开CMD窗口,按照如下方式输入命令: > d: > cd D:\MongoDB > mongod --dbpath D:\MongoDB\data

就基本成功了 然后在浏览器中输入http://localhost:27017/ 显示以下网页You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number 然后就OK啦 第二讲关于在java平台下的mongodb的使用的操作 首先下载mongodb在java中的驱动库文件,下载地址分别为 https://https://www.doczj.com/doc/b71098492.html,/KentBeck/junit/downloads https://https://www.doczj.com/doc/b71098492.html,/mongodb/mongo-java-driver/downloads 第二部新建java工程添加库文件如图所示

mongoDb使用教程

MongoDB Java API 该文档是翻译自文档[mongodb-docs-2010-10-24.pdf]的[Java Language Center]章节,根据自己的理解整理而成。 希望能给像我这样开始接触的朋友一点帮助,同时也做个备忘,因为是刚刚学习,其中的很多功能目前都用不上,以后万一有什么功能不太清楚,也可以直接查阅该文档了。首先安装可视化工具mongoDBvue可去百度搜索 MongoDB Java Driver 简单操作 一、Java驱动一致性 MongoDB的Java驱动是线程安全的,对于一般的应用,只要一个Mongo实例即可,Mongo有个内置的连接池(池大小默认为10个)。 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们可以用以下方式保证一致性: DB mdb = mongo.getDB('dbname'); mdb.requestStart(); // // 业务代码 // mdb.requestDone(); DB和DBCollection是绝对线程安全的,它们被缓存起来了,所以在应用中取到的可能是同一个对象。 二、保存/查找对象(DBObject) Java驱动提供了DBObject接口,方便我们保存对象到数据库中。 定义需要保存的对象: public class Tweet implements DBObject { /** ...... */ } 然后我们可以使用该对象: Tweet tweet = new Tweet(); tweet.put("user", userId); tweet.put("message", message); tweet.put("date", new Date()); collection.insert(tweet); 当从数据库中查询时,结果会自动的转换成DBObject对象,我们可以转换成我们自己的类型: collection.setObjectClass(Tweet); Tweet myTweet = (Tweet)collection.findOne(); 三、创建连接 Mongo m = new Mongo(); Mongo m = new Mongo("localhost"); Mongo m = new Mongo("localhost", 27017); DB db = m.getDB("mydb); 注意:事实上,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了。

配置mongodb分片群集(sharding cluster)

配置mongodb分片群集(sharding cluster) 这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。 要构建一个MongoDB Sharding Cluster,需要三种角色: Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障 Config Server: mongod 实例,存储了整个Cluster Metadata,其中包括chunk 信息。 Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。 Sharding架构图:

本例实际环境架构 本例架构示例图: 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1 1. 分别在3台机器运行一个mongod实例(称为mongod shard21, mongod shard22,mongod shard23)组织replica set2,作为cluster 的shard2 2. 每台机器运行一个mongod实例,作为3个config server 3. 每台机器运行一个mongs进程,用于客户端连接 主机IP端口信息 Server1 10.1.1.1 mongod shard11:27017 mongod shard21:27018 mongod config1:20000

MongoDB架构图分享

MongoDB构架图分享 本文图片来自 Ricky Ho 的博文MongoDB 构架(MongoDB Architecture),这是个一听就感觉很宽泛的话题,但是作者在文章中确实对 MongoDB 由内至外的架构进行了剖析。本文截取了其文章中的几张重点架构示意图片进行简单描述。希望对大家有用。 MongoDB 数据文件内部结构 1.MongoDB 在数据存储上按命名空间来划分,一个 collection 是一个命名空间, 一个索引也是一个命名空间 2.同一个命名空间的数据被分成很多个 Extent,Extent 之间使用双向链表连接 3.在每一个 Extent 中,保存了具体每一行的数据,这些数据也是通过双向链接 连接的 4.每一行数据存储空间不仅包括数据占用空间,还可能包含一部分附加空间,这 使得在数据 update 变大后可以不移动位置

5.索引以 BTree 结构实现 在 MongoDB 中实现事务 众所周知,MongoDB 只支持对单行记录的原子性修改,并不支持对多行数据的原子操作。但是通过上图中的变态操作,实际你也可以自己实现事务。其步骤如图所未:?第 1 步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为 init(如果这时候操作中断,那么在重新启动时,会判断到他处于 init 状态,从而将其保存的多行修改操作应用到具体的行上) ?第 2 步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的 tran 字段中 ?第 3 步:将事务记录的状态从 init 变成 pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是 pending 的,这时候查看其所有对应的

MongoDB架构图解

MongoDB架构图解 本文截取了其文章中的几张重点架构示意图片进行简单描述。希望对大家有用。 MongoDB数据文件内部 结构 MongoDB在数据存储上按命名空间来划分,一个collection是一个命名空间,一个索引也是一个命名空间 同一个命名空间的数据被分成很多个Extent,Extent之间使用双向链表连接 在每一个Extent中,保存了具体每一行的数据,这些数据也是通过双向链接连接的 每一行数据存储空间不仅包括数据占用空间,还可能包含一部分附加空间,这使得在数据update变大后可以不移动位置 索引以BTree结构实现 相关阅读:《MongoDB数据文件内部结构》

在MongoDB中实现事务 众所周知,MongoDB只支持对单行记录的原子性修改,并不支持对多行数据的原子操作。但是通过上图中的变态操作,实际你也可以自己实现事务。其步骤如图所未: 第1步:先记录一条事务记录,将要修改的多行记录的修改值写到里面,并设置其状态为init(如果这时候操作中断,那么在重新启动时,会判断到他处于init状态,从而将其保存的多行修改操作应用到具体的行上) 第2步:然后更新具体要修改的行,将刚才写的事务记录的标识写到它的tran字段中 第3步:将事务记录的状态从init变成pending(如果在这时候操作中断,那么在重新启动时,会判断到它的状态是pending的,这时候查看其所有对应的多条要修改的记录,如果其tran有值,那么就进行第4步,如果没值,说明第4步已经执行过了,直接将其状态从pending 变成commited了就行) 第4步:将需要修改的多条记录的相应值修改了,并且unset掉之前的tran字段 第5步:将事务记录那一条的状态从pending变成commited,事务完成 其实上面的步骤并不罕见,在支持事务的DBMS中,其事务原子性提交的保证大多都与上面类似。其实事务记录的tran那条记录,就类似于这些DBMS中的redolog一样。

MongoDB 命令

查询所有数据库列表 > show dbs 如果想查看当前连接在哪个数据库下面,可以直接输入db >db Admin想切换到test数据库下面 > use test switched to db test >db Test想查看test下有哪些表或者叫collection,可以输入 > show collections system.indexes user想知道mongodb支持哪些命令,可以直接输入help > help HELP showdbs show database names show collections show collections in current database showusersshow users in current database show profile show most recent system.profile entries with time >= 1ms use set curent database to db.help()help on DB methods db.foo.help() help on collection methods db.foo.find() list objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1 it result of the last line evaluated; use to further iterate如果想知道当前数据库支持哪些方法:>db.help(); DB methods: db.addUser(username, password) 添加数据库授权用户 db.auth(username, password) 访问认证 db.cloneDatabase(fromhost) 克隆数据库 https://www.doczj.com/doc/b71098492.html,mandHelp(name) returns the help for the command db.copyDatabase(fromdb, todb, fromhost) 复制数据库 db.createCollection(name, { size : ..., capped : ..., max : ... } ) 创建表 db.currentOp() displays the current operation in the db db.dropDatabase() 删除当前数据库 db.eval_r(func, args) run code server-side db.getCollection(cname) same as db['cname'] or https://www.doczj.com/doc/b71098492.html,ame db.getCollectionNames() 获取当前数据库的表名 db.getLastError() - just returns the err msg string db.getLastErrorObj() - return full status object db.getMongo() get the server connection object db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair db.getName() db.getPrevError() db.getProfilingLevel() db.getReplicationInfo() db.getSisterDB(name) get the db at the same server as this onew db.killOp() kills the current operation in the db db.printCollectionStats() 打印各表的状态信息 db.printReplicationInfo() 打印主数据库的复制状态信息

MongoDB分布式高可用集群

MongoDB分布式高可用集群 一、分布式集群搭建方案 运用MongoDB的复制集(Replica Sets)+分片(Sharding)就能实现MongoDB分布式高可用的集群。分片(sharding)能够增加更多的机器来应对不断增加的负载和数据,也不影响应用。复制集(Replica Sets)能确保每个分片节点都具有自动备份、自动故障恢复能力。 二、MongoDB的高可用集群配置 高可用集群,即High Availability Cluster,简称HA Cluster。集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。搭建高可用集群需要合理的配置多台计算机之间的角色,数据恢复,一致性等,主要有以下几种方式: (1)、主从方式 (2)、双机双工方式 (3)、集群工作方式(多服务器互备方式) MongoDB集群配置的实践也遵循了这几个方案,主要有主从结构,副本集方式和Sharding分片方式。 三、Master-Slave主从结构 主从架构一般用于备份或者读写分离,一般有一主一从和一主多从设计。 由两种角色构成: (1)、Master 可读可写,当数据有修改的时候,会将oplog同步到所有Slave上。 (2)、Slave 只读不可写,自动从Master同步数据。 特别的,对于Mongodb来说,并不推荐使用Master-Slave架构,因为Master-Slave其

中Master宕机后不能自动恢复,除非Replica的节点数超过50,才需要使用Master-Slave架构,正常情况是不可能用那么多节点的。 还有一点,Master-Slave不支持链式结构,Slave只能直接连接Master。Redis的Master-Slave支持链式结构,Slave可以连接Slave,成为Slave的Slave。 四、Relica Set副本集方式 Mongodb的Replica Set即副本集方式主要有两个目的,一个是数据冗余做故障恢复使用,当发生硬件故障或者其它原因造成的宕机时,可以使用副本进行恢复。 另一个是做读写分离,读的请求分流到副本上,减轻主(Primary)的读压力。 1.Primary和Secondary搭建的Replica Set Replica Set是mongod的实例集合,它们有着同样的数据内容。包含三类角色:(1)主节点(Primary) 接收所有的写请求,然后把修改同步到所有Secondary。一个Replica Set只能有一个Primary节点,当Primary挂掉后,其他Secondary或者Arbiter节点会重新选举出来一个主节点。默认读请求也是发到Primary节点处理的,需要转发到Secondary需要客户端修改一下连接配置。 (2)副本节点(Secondary) 与主节点保持同样的数据集。当主节点挂掉的时候,参与选主。 (3)仲裁者(Arbiter) 不保有数据,不参与选主,只进行选主投票。使用Arbiter可以减轻数据存储的硬件需求,Arbiter跑起来几乎没什么大的硬件资源需求,但重要的一点是,在生产环境下它和其他数据节点不要部署在同一台机器上。 (4)选主过程

MongoDB 3.4 高可用集群搭建

MongoDB3.4 高可用集群搭建 一、MongoDB单实例 这种配置只适合简易开发时使用,生产使用不行,因为单节点挂掉整个数据业务全挂(如下图。),虽然不能生产使用,但这个模式可以快速搭建启动,并且能够用mongodb的命令操作数据库。 二、主从模式 使用MySQL数据库时大家广泛用到,采用双机备份后主节点挂掉了后从节点可以接替主机继续服务。所以这种模式比单节点的高可用性要好很多。 主从模式搭建 准备2个虚拟机,一个作为master服务器(192.168.1.41),一个作为slave服务器(192.168.1.54),两个虚拟机都安装并配置好了MongoDB,并创建好了数据库存放文件夹;或者在一台机器上通过使用不同的端口启动2个MongoDB服务,也可以实现。 现在我们使用通过不同的端口启动2个实例的方式来演示。 1.MongoDB的安装配置目录如下 我们启动master服务用的是node1/data作为数据库存放的文件夹,启动slave服务用的是node2/data作为数据库存放的文件夹;

2.启动MongoDB Master服务 命令:bogon:mongodb3.4.4 alvinsun$mongod -dbpath node1/data/ -master 3.启动MongoDB Slave服务器 命令:bogon:mongodb3.4.4 alvinsun$mongod -dbpath node2/data/ -slave -port 27018 -source 127.0.0.1:27017 4.测试 打开一个客户端,并连接到主节点,在主节点插入一个文档。

相关主题
文本预览
相关文档 最新文档