原文地址:http://www.tech126.com/mongodb-sharding-cluster/
从1.6版本起,MongoDB开始正式支持Sharding
同时,MongoDB也推出了Replica Sets,用以替代之前版本的Replica Pairs
通过把Sharding和Replica Sets相结合,我们可以搭建一个分布式的,高可用性,自动水平扩展的集群
一个典型的集群结构如下:
集群由以下3个服务组成:
- Shards Server: 每个shard由一个或多个mongod进程组成,用于存储数据
- Config Server: 用于存储集群的Metadata信息,包括每个Shard的信息和chunks信息
- Route Server: 用于提供路由服务,由Client连接,使整个Cluster看起来像单个DB服务器
另外,Chunks是指MongoDB中一段连续的数据块,默认大小是200M,一个Chunk位于其中一台Shard服务器上
下面,搭建一个Cluster,它由4台服务器组成,包括2个Shard,3个Config,1个Route
其中每个Shard由一个Replica Set组成,每个Replica Set由2个Mongod节点,1个vote节点组成
以下是搭建配置的过程:
1. 四台服务器分别启动相应的Mongod进程:
192.168.95.216
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10000 –replSet set1 –dbpath /pvdata/mongodb_data –logpath /pvdata/mongodb_log/mongod.log
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10001 –replSet set2 –dbpath /pvdata/mongodb_data1 –logpath /pvdata/mongodb_log/mongod1.log
192.168.95.217
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10000 –replSet set1 –dbpath /pvdata/mongodb_data –logpath /pvdata/mongodb_log/mongod.log
192.168.95.218
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10000 –replSet set2 –dbpath /pvdata/mongodb_data –logpath /pvdata/mongodb_log/mongod.log
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10001 –replSet set1 –dbpath /pvdata/mongodb_data1 –logpath /pvdata/mongodb_log/mongod1.log
192.168.95.137
/usr/local/mongodb/bin/mongod –fork –shardsvr –port 10000 –replSet set2 –dbpath /opt/mongodb_data –logpath /opt/mongodb_log/mongod.log
2. 分别配置2组Replica Sets:
192.168.95.216
mongo –port 10000
config = {_id: 'set1', members: [
{_id: 0, host: '192.168.95.216:10000'},
{_id: 1, host: '192.168.95.217:10000'},
{_id: 1, host: '192.168.95.218:10001', arbiterOnly: true}
]}
rs.initiate(config)
rs.status()
192.168.95.218
mongo –port 10000
config = {_id: 'set2', members: [
{_id: 0, host: '192.168.95.218:10000'},
{_id: 1, host: '192.168.95.137:10000'},
{_id: 1, host: '192.168.95.216:10001', arbiterOnly: true}
]}
rs.initiate(config)
rs.status()
注意:2台Server上的10001对应的Mongod,它们只负责在某个node down掉后,进行vote选举新的master,它们本身并不存储数据备份
3.配置3台Config Servers:
mongod –configsvr –fork –logpath /pvdata/mongodb_log/config.log –dbpath /pvdata/mongodb_config_data –port 20000
4.配置1台Route Server:
192.168.95.216
/usr/local/mongodb/bin/mongos –fork –chunkSize 1 –configdb "192.168.95.216:20000,192.168.95.217:20000,192.168.95.218:20000" –logpath /pvdata/mongodb_log/mongos.log
chunkSize参数用来设置chunk块的大小,这里为了测试,设置成1M
5..配置2组Shard:
192.168.95.216
mongo
use admin
db.runCommand({addshard:'set1/192.168.95.216:10000,192.168.95.217:10000'})
db.runCommand({addshard:'set2/192.168.95.218:10000,192.168.95.137:10000'})
db.runCommand({enablesharding:'test'})
db.runCommand({listshards:1})
printShardingStatus()
db.runCommand({shardcollection:'test.test', key:{_id:1}, unique : true})
这样整个配置就完成了,下面可以用pymongo来进行测试:
1
2
3
4
5
6
|
con = pymongo.Connection("192.168.95.216", 27017)
db = con.test
collection = db.test
for i in xrange(10000):
name = ''.join(random.choice(string.letters) for i in xrange(10))
collection.save({'_id':name})
|
然后,进入mongo的命令行,可以在2组的shard中分别查看count值,会发现collection记录被平均的分布到了2组shard server上了
下面,我们再来测试一下automated failover:
将95.218的mongod进程kill -2杀掉后,在95.137的log中,可以看到:
Wed Sep 29 10:51:04 [ReplSetHealthPollTask] replSet info 192.168.95.218:10000 is now down (or slow to respond)
Wed Sep 29 10:51:04 [rs Manager] replSet info electSelf 1
Wed Sep 29 10:51:04 [rs Manager] replSet PRIMARY
说明,新的vote已经完成,95.137变成了新的primary master了
此时,我们再往db中继续写入数据,然后启动95.218,会发现:
Wed Sep 29 10:52:56 [ReplSetHealthPollTask] replSet 192.168.95.218:10000 SECONDARY
说明,95.218此时又作为secondary来运行了
同时,在218 down掉时,137上写入的数据也会继续同步到218上
整个配置过程还是比较简单的,测试也挺正常
但整个Cluster的稳定性,还有待于应用上线后的观察…
分享到:
相关推荐
每个分片都是一个或一组MongoDB实例,它们共同组成一个集群,用于存储数据的不同部分。通过分片,MongoDB可以水平扩展,即增加更多的服务器来处理不断增长的数据量和请求负载。 **1.3 数据分区** - **分片键...
MongoDB 分片(Sharding)是为了解决大数据量存储和查询性能问题而引入的一种分布式数据库解决方案。在MongoDB中,分片允许我们将数据分散到多个物理节点上,每个节点称为一个分片(Shard)。这有助于水平扩展数据库...
MongoDB 分片(Sharding)是为了解决大数据量存储和查询性能问题而引入的一种分布式数据库解决方案。在MongoDB中,分片允许我们将数据分散到多个物理节点上,每个节点称为一个分片(Shard)。这有助于水平扩展数据库...
在处理海量数据时,为了提高性能和可扩展性,MongoDB 提供了分片(Sharding)功能,即将数据分散到多个物理节点上,实现水平扩展。本文将详细介绍2012年最新的MongoDB分片配置步骤,适用于权威的MongoDB环境搭建。 ...
本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...
在开始搭建MongoDB 3.4集群之前,我们首先需要了解几个关键的概念。 **1.1 mongos** mongos是客户端与MongoDB集群之间的接口。它是查询路由器,负责接收客户端的请求并将它们分发到正确的分片或配置服务器。为了...
MongoDB高可用完全分布集群搭建 mongodb是当前最流行的NoSQL数据库之一,具有高性能、高可用性和水平扩展能力的特点。然而,为了充分发挥mongodb的性能和高可用性,需要对其进行合理的架构设计和部署。以下是...
本文将详细介绍如何在CentOS 7操作系统下,搭建一个MongoDB 3.4版本的集群,且包括分片(sharding)与副本集(replica set)两大特性。搭建这样的集群,旨在创建一个高性能、高可用且能够水平扩展的数据库架构。 在...
- 分片集群(Sharding Cluster)是MongoDB的一种扩展机制,它将数据分成多个片段,并将这些片段分布在不同的服务器上,以此来提升处理能力和存储容量。 - **Replica Set** - 副本集(Replica Set)是MongoDB中实现...
搭建MongoDB 3.0.7集群的过程涉及多个步骤,包括下载和安装软件、创建必要的目录结构、配置服务器角色以及启动服务。以下是一个简化的流程: 1. 下载MongoDB 3.0.7的Linux二进制文件并解压。 2. 移动解压后的文件到...
### MongoDB分布式集群搭建详解 #### 一、集群与分布式概念 **集群(Cluster)**与**分布式(Distributed)**是两种常见的架构设计模式,用于提高系统的可用性、可伸缩性和性能。 1. **集群(Cluster)** - **定义**:...
通过上述步骤,我们可以成功搭建一个简单的MongoDB集群。MongoDB集群不仅可以提高系统的稳定性和可靠性,还能通过分片技术实现水平扩展,满足大规模数据存储的需求。在实际生产环境中,还需要考虑更多的细节,比如...
这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的副本集。副本集是MongoDB中的数据冗余和故障转移机制。它由多个MongoDB实例组成,这些实例维护着相同的数据副本。其中,一个实例...
在搭建 MongoDB 分片集群时,首先你需要了解以下几个核心概念: 1. **复制集(Replica Set)**:提供数据冗余和故障转移,确保高可用性。每个复制集由多个成员组成,其中一个是主节点,其他是副节点。数据变更首先...
MongoDB 集群由多个服务器组成,可以包含复制集(Replica Set)和分片(Sharding)。复制集提供数据冗余和故障恢复能力,而分片则用于在多个机器之间分配数据,提高读写性能。 二、复制集搭建 1. **配置节点**:...
搭建MongoDB高可用集群的第一步通常是配置单实例MongoDB,这对于开发测试环境来说是足够的。通过在Linux环境下安装MongoDB,可以快速搭建一个基本的单实例环境。安装时,需要创建数据存储的文件夹,下载安装包,解压...
### MongoDB集群搭建详解 #### 一、参考文档与版本说明 - **参考文档**:官方提供的文档是最权威的参考资料,可以访问以下链接了解详细的分片介绍:...
在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...
为了满足大规模数据处理的需求,本案例采用3台物理服务器搭建MongoDB集群,每台服务器上安装一个MongoDB实例,并通过合理的配置来实现数据的分片存储和高可用性。具体的部署规划如下: 1. **物理服务器准备**: - ...