`

【转】mongodb Replica Sets +Sharding高可用集群搭建(含认证)

 
阅读更多

集群由三台服务器(假定ip地址为:serverA,serverB,serverC)组成,采用mongodb的复制集+分片(Replica Sets+Sharding) 实现集群的高可靠/高可用以及数据读写的负载均衡。 三台机器分成两个复制集,两个复制集组成一个集群的两个分片(shard1和shard2)。具体如下:

  1、ServerA的s1-1 / ServerB的s1-2 / ServerC的s1-3 组成一个3节点的复制集s1
  2、ServerA的s2-1 / ServerB的s2-2 / ServerC的s2-3 组成一个3节点的复制集s2
  3、复制集s1和s2 组成有两个片的分片集群
  4、为确保配置信息高可用,集群采用3个配置节点存储集群配置信息: ServerA的c1 / ServerB的c2 / ServerC的c3
  5、为对外服务提供高可用,集群采用3个路由节点对外提供服务:ServerA的mongos 1 / ServerB的mongos 2/ ServerC的mongos 3,也可以结合keepalive对外提供一个vip.
 
mongodb集群逻辑结构:
 
mongodb服务进程规划:
 
每台机器运行4个服务进程(2+1+1),端口和目录规划:
 

 详细配置步骤如下:

 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提供了两种关键特性:副本集(Replica Sets)和分片(Sharding)。这篇博客将探讨如何搭建MongoDB的副本集和分片集群。 首先,我们来理解一下MongoDB的...

    Mongodb的ReplicaSets+Sharding架构(window篇)

    MongoDB的Replica Sets+Sharding架构是大数据时代下应对高可用性和可扩展性需求的重要解决方案。本篇文章将深入探讨这两个关键特性在Windows环境下的应用。 **副本集(Replica Sets)** MongoDB的副本集是一种高可用...

    MongoDB 集群配置示例之 sharding 模式

    - **Replica Sets**:副本集,是MongoDB的高可用性解决方案,每个副本集由一个主节点(Primary)和多个副本节点(Secondary)组成,还可以有一个仲裁节点(Arbiter)来协助进行投票和故障转移。 - **Sharding**:分...

    搭建Nosql MongoDB高可用集群

    为了实现MongoDB的高可用性,MongoDB 3.0及以上版本引入了副本集(Replica Sets)的概念,副本集提供了自动故障转移和数据冗余的功能,是推荐的高可用性解决方案。副本集由一组mongod进程组成,其中一个为primary...

    centos7+mongodb 3.4 集群搭建:分片+副本集

    在本文档中,我们将详细介绍如何在CentOS 7.0系统上搭建基于MongoDB 3.4.3版本的集群环境,包括分片(sharding)和副本集(replica sets)的配置。本文档将介绍相关概念、环境准备、机器规划及端口分配、集群搭建的...

    高可用的MongoDB集群

    ### 高可用的MongoDB集群 #### 一、概述 MongoDB是一款强大的、开源的、模式自由的文档型数据库,采用C++语言开发。它具备众多特性,使其成为处理多种类型数据的理想选择。 - **面向集合的存储**:能够有效地存储...

    mongodb集群搭建

    ### MongoDB集群搭建详解 #### 一、MongoDB基础概念与术语对照 在深入了解MongoDB集群搭建之前,我们先简要回顾一下MongoDB的基本概念及其与传统关系型数据库的对应关系。 - **Database(数据库)**:MongoDB中的...

    基于Java和Shell脚本的LG-MongoDB-Sharding集群分片设计源码

    本项目为基于Java和Shell脚本开发...项目作为Java训练营作业14的成果,涉及MongoDB集群分片设计,是大型分布式存储系统架构进阶阶段的一部分,旨在深入讲解MongoDB存储原理及replica sets与Sharded Cluster等高级特性。

    MongoDB 高可用 安装部署

    在高性能、高可用性方面,MongoDB提供了多种解决方案,其中重要的有副本集(Replica Sets)和分片集群(Sharding)。 MongoDB的基本概念包括文档(document)、集合(collection)和数据库(database)。它使用一个类JSON...

    mongodb分片集群安装搭建详细过程(带认证、不带认证、复制集、分片sharding全覆盖)1

    分片集群由几个关键组件构成,包括分片(Shards)、配置服务器(Config Servers)、路由进程(Mongos)和可选的复制集(Replica Sets)。本文将详细介绍如何在MongoDB 3.6.3版本下搭建带有认证和不带认证的分片集群...

    高可用的MongoDB集群详解

    要搭建高可用的MongoDB集群,需要准备的环境包括: - **安装MongoDB**:从官方下载Linux版本,解压并配置。 - **架构设计**:采用Replica Sets + Sharding的方式,确保数据的高可用性和分片的负载均衡。 - **...

    整理的MongoDB集群

    MongoDB集群配置实践通常采用的是副本集(Replica Set)和分片(Sharding)的方式,这两种方式结合可以构建出既具有高可用性又具备良好扩展性的集群环境。 #### 三、Master-Slave 主从结构 **主从架构**是一种常见...

    MongoDB复制集集群配置文件.rar

    MongoDB是一种流行的开源、分布式文档数据库,用于处理大量的数据并提供高性能、高可用性和可扩展性。在MongoDB中,复制集和分片是两种关键的集群技术,用于实现数据冗余和水平扩展。 **复制集(Replica Sets)** ...

    colony(自己做的MongoDb分片式集群搭建配置).rar

    MongoDB是一款高性能、开源、无模式的文档型数据库,它以JSON格式存储数据,适合处理大量数据并提供高可用性和可扩展性。本示例主要介绍如何在Windows环境下搭建一个单机版的MongoDB分片式集群,为理解分布式集群的...

    Linux下Mongodb的分布式分片群集shardingcluster配置.pdf

    在MongoDB中,分片(Sharding)是通过将数据分布在多台服务器上来实现水平扩展,以处理海量数据和高并发请求。这种架构通常由三个关键组件组成:Shard Server、Config Server和Route Server。 1. Shard Server: -...

    nodejs+ mongoDb全套视频

    进阶篇会讲解数据库设计、索引优化、聚合框架、Replica Sets(复制集)和Sharding(分片)等核心概念。高级篇则深入探讨MongoDB的性能监控、备份与恢复、安全策略以及OpsManager的使用。 项目实战部分是学习过程中...

Global site tag (gtag.js) - Google Analytics