搭建高可用mongo集群

简介:

MongoDB是一个可扩展、高性能的分布式文档存储数据库,由C 语言编写,旨在为web应用提供可扩展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用,存储数据非常方便。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据 结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面 向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。

功能特性:

面向集合存储,易存储对象类型的数据。

模式自由。

支持动态查询。

支持完全索引,包含内部对象。

支持查询。

支持复制和故障恢复。

使用高效的二进制数据存储,包括大型对象(如视频等)。

自动处理碎片,以支持云计算层次的扩展性

支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。

文件存储格式为BSON(一种JSON的扩展)

可通过网络访问

搭建方式:

搭建集群采用副本集+分片的方式,用于生产环境。

网络拓扑:

搭建过程:

①开启配置服务器(config):

172.16.2.230:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

172.16.2.231:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

172.16.2.232:mongod –port 20000 –dbpath data/ --logpath log/config.log –logappend &

②开启路由(mongos):

172.16.2.230:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

172.16.2.231:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

172.16.2.232:mongos --port 27017 –configdb 172.16.2.230:20000,172.16.2.231:20000,172.16.2.232:20000 –logpath data/mongos.log –logappend &

③副本集的启动与配置:

分片一:

172.16.2.233:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.234:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.235:mongod --port 27017 --replSet shard1 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.233:mongo localhost:27017/admin

>rsconfig={"_id":"shard1","members":[{"_id":0,"host":"172.16.2.233:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.234:27017")

>rs.add("172.16.2.235:27017")

>rs.conf()#查看配置状态(查看分片是否挂掉)

分片二:

172.16.2.236:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.237:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.238:mongod --port 27017 --replSet shard2 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.236:mongo localhost:27017/admin

>rsconfig={"_id":"shard2","members":[{"_id":0,"host":"172.16.2.236:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.237:27017")

>rs.add("172.16.2.238:27017")

>rs.conf()#查看配置状态(查看分片是否挂掉)

分片三:

172.16.2.239:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.240:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

172.16.2.241:mongod --port 27017 --replSet shard3 --dbpath data/ --logpath log/shard1.log –logappend &

初始化副本集:

172.16.2.239:mongo localhost:27017/admin

>rsconfig={"_id":"shard3","members":[{"_id":0,"host":"172.16.2.239:27017"}]}

>rs.initiate(rs.config)#初始化

>rs.add("172.16.2.240:27017")

>rs.add("172.16.2.241:27017")

>rs.conf()#查看配置状态(查看分片是否挂掉)

④添加分片(副本集)至集群:

172.16.2.230:mongo 172.16.2.230:27017/admin

>db.runCommand({"addshard":"shard1/172.16.2.233:27017,172.16.2.234:27017,172.16.2.235:27017"})

>db.runCommand({"addshard":"shard2/172.16.2.236:27017,172.16.2.237:27017,172.16.2.238:27017"})

>db.runCommand({"addshard":"shard3/172.16.2.239:27017,172.16.2.240:27017,172.16.2.241:27017"})

>db.runCommand({"listshard":1})#查看添加的结果(查看健康状态)

⑤激活db和colletion分片功能:

172.16.2.230:mongo 172.16.2.230:27017/admin

>db.runCommand({"enablesharding":"database_1"})

注:激活databas_1分片功能,可让数据库夸shard。若不执行此命令,数据只能存放在一个分片上。此后不同的集合会放到不同的shard上,但同一个collection不会切分。

>db.runCommand({"shardcollection":"database_1.collection_1","key":{"_id":1}})#按片键值"_id"把集合切分

⑥查看分片情况:

>use database_1

>db.collection_1.stats()#查看集合分片状态

>db.printShardingStatus()#查看数据库分片

>printShardingStatus(db.getsisterDB("config"),1)#显示太多chunk无法全部显示时可用此命令查看

至此,mongo集群搭建完毕,并适用于生产环境。但由于此框架有3个接口(路由),很多时候只用了一个接口导致另外两个被浪费掉了。为了避免资源浪费,可在3个接口前边做一个负载均衡,如haproxy。

付:

添加分片:db.runCommand({addshard:"ip:port",allowLocal:true})

删除分片:db.runCommand({removeshard:"ip:port"})

数据备份:./bin/mongodump -h 远程要备份的数据库ip –port 27017 -d 要备份的数据库 –c 要备份的集合(可选)-o 备份到某处

数据恢复:./bin/mongorestore -h 远程要恢复的数据库ip -p 27017 -d 要恢复的数据库 --drop 先前备份的位置/数据库名字

时间: 2024-10-21 12:58:07

搭建高可用mongo集群的相关文章

搭建高可用mongodb集群(四)—— 分片(经典)

转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么

搭建高可用mongodb集群(二)—— 副本集

http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html 在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 这篇文章看完这些问题就可以搞定了.NoSQL的产生就是为了解决大数据量.高扩展性.高

搭建高可用mongodb集群—— 分片

从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而治之.上图看看就清楚了,如下 taobao岳旭强在infoq中提到的 架构图: 上图中有个TDDL,是taobao的一

搭建高可用mongodb集群(四)—— 分片

转载自LANCEYAN.COM 按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句

搭建高可用mongodb集群(一)——配置mongodb

搭建高可用mongodb集群(一)--配置mongodb 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病. 高性能,Nosql通过简单的key-value方式获取数据,非常快速.还有N

搭建高可用MongoDB集群(四):分片

按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!"分片"就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而

【转】搭建高可用mongodb集群(二)—— 副本集

在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 这篇文章看完这些问题就可以搞定了.NoSQL的产生就是为了解决大数据量.高扩展性.高性能.灵活数据模型.高可用性.但是光通过主从模式的架构远远达不到上面几点,由此MongoDB设计了副本集和分片的功能

【转】搭建高可用mongodb集群(四)—— 分片

按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!“分片”就用这个来解决这个问题. 传统数据库怎么做海量数据读写?其实一句话概括:分而治之.上图看看就清楚

搭建高可用mongodb集群

搭建高可用mongodb集群(一)——配置mongodb Posted on 17 十一月, 2013 by lanceyan | 9条评论 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的