集群由三台服务器(假定ip地址为:serverA,serverB,serverC)组成,采用mongodb的复制集+分片(Replica Sets+Sharding) 实现集群的高可靠/高可用以及数据读写的负载均衡。 三台机器分成两个复制集,两个复制集组成一个集群的两个分片(shard1和shard2)。具体如下:
详细配置步骤如下:
1、配置shard1用到复制集 s1:
在serverA上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork
在serverB上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork
在serverC上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork
连接三个节点的任一个初始化复制集s1
>use admin
>config = {_id:'s1',members:[{_id:0,host:'serverA:27020',priority:1},{_id:1,host:'serverB:27020'},{_id:2,host:'serverC:27020'}]}
>rs.initiate(config)
>rs.status()
另外对复制集s1的所有节点都执行如下命令确保所有节点都能分担读取的压力
>db.getMongo().setSlaveOk();
2、配置shard2用到复制集 s2:
在serverA上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log --logappend --fork
在serverB上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log --logappend --fork
在serverC上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log --logappend --fork
连接三个节点的任一个初始化复制集s2
>use admin
>config = {_id:'s2',members:[{_id:0,host:'serverA:27021'},{_id:1,host:'serverB:27021',priority:1},{_id:2,host:'serverC:27021'}]}
>rs.initiate(config)
>rs.status()
另外对复制集s2的所有节点都执行如下命令确保所有节点都能分担读取的压力
>db.getMongo().setSlaveOk();
3、配置三台Config Server:
在serverA上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
在serverB上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
在serverC上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork
4、配置三台Route Server:
在serverA上:mongos -fork --logpath /data
/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017
在serverB上:mongos -fork --
logpath /data
/mongo/route/log/mongo.log
--configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017
在serverC上:mongos -fork --
logpath /data
/mongo/route/log/mongo.log
--configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017
5、配置Shard Cluster:
连接任一mongos进程执行以下命令:
use admin
db.runCommand({addShard:"shard1/serverA:27020,serverB:27020,serverC:27020"})
db.runCommand({addShard:"shard2/serverA:27021,serverB:27021,serverC:27021"})
db.printShardingStatus()
6、激活数据库及集合的分片功能:
连接任一mongos进程执行以下命令:
db.runCommand({enablesharding:"testdb"})
db.runCommand({shardcollection:"testdb.collection_test",key:{_id:1}})
7、登录mongos添加用户:
use admin
db.addUser("<user>","<password>")
db.addUser("<user>","<password>",true) //添加只读用户
8、关闭三台机器的全部mongod,mongos:
sudo killall mongod
sudo killall mongos
9、生成keyfile:(每个进程的key file都保持一致)
openssl rand -base64 753 >keyfile
将生成的keyfile 拷贝到mongod/mongos 进程对应的文件夹
并执行语句更改权限:sudo chmod 600 keyfile
使用--keyFile参数指定前面生成的keyfile文件,重启三台机器全部mongod,mongos进程
在serverA上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork --keyFile /data/mongo/s1_1/keyfile
在serverB上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork --keyFile /data/mongo/s1_2/keyfile
在serverC上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork --keyFile /data/mongo/s1_3/keyfile
在serverA上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log --logappend --fork --keyFile /data/mongo/s2_1/keyfile
在serverB上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log --logappend --fork --keyFile /data/mongo/s2_2/keyfile
在serverC上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log --logappend --fork --keyFile /data/mongo/s2_3/keyfile
在serverA上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork --keyFile /data/mongo/config/keyfile
在serverB上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork --keyFile /data/mongo/config/keyfile
在serverC上:mongod -fork --configsvr --dbpath /
data
/mongo/config/db --port 27018 --logpath /
data
/mongo/config/log/mongo.log --fork --keyFile /data/mongo/config/keyfile
在serverA上:mongos -fork --logpath /data
/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile /data/mongo/route/keyfile
在serverB上:mongos -fork --
logpath /data
/mongo/route/log/mongo.log
--configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile /data/mongo/route/keyfile
在serverC上:mongos -fork --
logpath /data
/mongo/route/log/mongo.log
--configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile /data/mongo/route/keyfile
完毕!
转自 http://www.cnblogs.com/ylh1223/archive/2013/04/23/3037301.html
相关推荐
在大型分布式系统中,为了实现高可用性和水平扩展,MongoDB提供了两种关键特性:副本集(Replica Sets)和分片(Sharding)。这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的...
MongoDB的Replica Sets+Sharding架构是大数据时代下应对高可用性和可扩展性需求的重要解决方案。本篇文章将深入探讨这两个关键特性在Windows环境下的应用。 **副本集(Replica Sets)** MongoDB的副本集是一种高可用...
- **Replica Sets**:副本集,是MongoDB的高可用性解决方案,每个副本集由一个主节点(Primary)和多个副本节点(Secondary)组成,还可以有一个仲裁节点(Arbiter)来协助进行投票和故障转移。 - **Sharding**:分...
为了实现MongoDB的高可用性,MongoDB 3.0及以上版本引入了副本集(Replica Sets)的概念,副本集提供了自动故障转移和数据冗余的功能,是推荐的高可用性解决方案。副本集由一组mongod进程组成,其中一个为primary...
在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...
### 高可用的MongoDB集群 #### 一、概述 MongoDB是一款强大的、开源的、模式自由的文档型数据库,采用C++语言开发。它具备众多特性,使其成为处理多种类型数据的理想选择。 - **面向集合的存储**:能够有效地存储...
### MongoDB集群搭建详解 #### 一、MongoDB基础概念与术语对照 在深入了解MongoDB集群搭建之前,我们先简要回顾一下MongoDB的基本概念及其与传统关系型数据库的对应关系。 - **Database(数据库)**:MongoDB中的...
本项目为基于Java和Shell脚本开发...项目作为Java训练营作业14的成果,涉及MongoDB集群分片设计,是大型分布式存储系统架构进阶阶段的一部分,旨在深入讲解MongoDB存储原理及replica sets与Sharded Cluster等高级特性。
在高性能、高可用性方面,MongoDB提供了多种解决方案,其中重要的有副本集(Replica Sets)和分片集群(Sharding)。 MongoDB的基本概念包括文档(document)、集合(collection)和数据库(database)。它使用一个类JSON...
分片集群由几个关键组件构成,包括分片(Shards)、配置服务器(Config Servers)、路由进程(Mongos)和可选的复制集(Replica Sets)。本文将详细介绍如何在MongoDB 3.6.3版本下搭建带有认证和不带认证的分片集群...
要搭建高可用的MongoDB集群,需要准备的环境包括: - **安装MongoDB**:从官方下载Linux版本,解压并配置。 - **架构设计**:采用Replica Sets + Sharding的方式,确保数据的高可用性和分片的负载均衡。 - **...
MongoDB集群配置实践通常采用的是副本集(Replica Set)和分片(Sharding)的方式,这两种方式结合可以构建出既具有高可用性又具备良好扩展性的集群环境。 #### 三、Master-Slave 主从结构 **主从架构**是一种常见...
MongoDB是一种流行的开源、分布式文档数据库,用于处理大量的数据并提供高性能、高可用性和可扩展性。在MongoDB中,复制集和分片是两种关键的集群技术,用于实现数据冗余和水平扩展。 **复制集(Replica Sets)** ...
MongoDB是一款高性能、开源、无模式的文档型数据库,它以JSON格式存储数据,适合处理大量数据并提供高可用性和可扩展性。本示例主要介绍如何在Windows环境下搭建一个单机版的MongoDB分片式集群,为理解分布式集群的...
在MongoDB中,分片(Sharding)是通过将数据分布在多台服务器上来实现水平扩展,以处理海量数据和高并发请求。这种架构通常由三个关键组件组成:Shard Server、Config Server和Route Server。 1. Shard Server: -...
进阶篇会讲解数据库设计、索引优化、聚合框架、Replica Sets(复制集)和Sharding(分片)等核心概念。高级篇则深入探讨MongoDB的性能监控、备份与恢复、安全策略以及OpsManager的使用。 项目实战部分是学习过程中...