`

MongoDB伪分布集群搭建

    博客分类:
  • DB
阅读更多

OS:CentOS7

MongoDB 版本:3.6

安装 

创建Mongo的yum源文件

vi /etc/yum.repos.d/mongodb-org-3.6.repo

  替换为阿里源

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

 安装mongo

sudo yum install -y mongodb-org

 

创建节点数据目录 

$ mkdir -p /data/rs-{a,b}-{1,2,3}

 

启动节点mongo服务 

mongod --shardsvr --replSet shard-a --dbpath /data/rs-a-1 --port 30000 --logpath /data/rs-a-1.log --fork
mongod --shardsvr --replSet shard-a --dbpath /data/rs-a-2 --port 30001 --logpath /data/rs-a-2.log --fork
mongod --shardsvr --replSet shard-a --dbpath /data/rs-a-3 --port 30002 --logpath /data/rs-a-3.log --fork

mongod --shardsvr --replSet shard-b --dbpath /data/rs-b-1 --port 30100 --logpath /data/rs-b-1.log --fork
mongod --shardsvr --replSet shard-b --dbpath /data/rs-b-2 --port 30101 --logpath /data/rs-b-2.log --fork
mongod --shardsvr --replSet shard-b --dbpath /data/rs-b-3 --port 30102 --logpath /data/rs-b-3.log --fork

 初始化副本集 

 mongo localhost:30000
> rs.initiate()
将节点加入副本集中
shard-a:PRIMARY> rs.add("localhost:30001")
shard-a:PRIMARY> rs.addArb("localhost:30002")

mongo localhost:30100
> rs.initiate()
shard-b:OTHER> rs.add("localhost:30101")
shard-b:PRIMARY> rs.addArb("localhost:30102")

 创建配置服务节点 

创建数据目录
mkdir /data/config-{1,2,3}
启动配置节点
mongod --configsvr --replSet cfgReplSet --dbpath /data/config-1 --port 27019 --logpath /data/config-1.log --fork
mongod --configsvr --replSet cfgReplSet --dbpath /data/config-2 --port 27020 --logpath /data/config-2.log --fork
mongod --configsvr --replSet cfgReplSet --dbpath /data/config-3 --port 27021 --logpath /data/config-3.log --fork
配置服务器初始化副本集
mongo localhost:27019
>rs.initiate({_id:"cfgReplSet",configsvr:true,members:[{_id:0,host:"localhost:27019"},{_id:1,host:"localhost:27020"},{_id:2,host:"localhost:27021"}]})

 

启动Mongo路由

mongos --configdb cfgReplSet/localhost:27019,localhost:27020,localhost:27021 --logpath /data/mongos.log --fork --port 40000

配置集群

mongo localhost:40000
分片设置
sh.addShard("shard-a/localhost:30000,localhost:30001")
sh.addShard("shard-b/localhost:30100,localhost:30101")
验证分片结果
mongos> db.getSiblingDB("config").shards.find()
{ "_id" : "shard-a", "host" : "shard-a/localhost:30000,localhost:30001", "state" : 1 }
{ "_id" : "shard-b", "host" : "shard-b/localhost:30100,localhost:30101", "state" : 1 }
使用admin数据库验证
mongos> use admin
switched to db admin
mongos> db.runCommand({listshards:1})
{
        "shards" : [
                {
                        "_id" : "shard-a",
                        "host" : "shard-a/localhost:30000,localhost:30001",
                        "state" : 1
                },
                {
                        "_id" : "shard-b",
                        "host" : "shard-b/localhost:30100,localhost:30101",
                        "state" : 1
                }
        ],
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1524381570, 2),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1524381570, 2)
}

 数据库分片

sh.enableSharding("mydb")
mongos> db.getSiblingDB("config").databases.find()
{ "_id" : "mydb", "primary" : "shard-b", "partitioned" : true }
分片mydb中的集合myCol,使用id,username作为分片键
mongos> sh.shardCollection("mydb.myCol",{username:1,_id:1})
{
        "collectionsharded" : "mydb.myCol",
        "collectionUUID" : UUID("d2ecc073-ed7e-4940-bee5-9e1a45694f23"),
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1524382128, 14),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        },
        "operationTime" : Timestamp(1524382128, 14)
}

 

 集群分片验证

基于《MongoDB Cookbook, Second Edition.pdf》中脚本修改,批量插入数据,将脚本修改为基于MongoDB 3.6的版本

ruby load.rb 100

mongos> sh.status()
   {  "_id" : "cloud-docs",  "primary" : "shard-a",  "partitioned" : true }
                cloud-docs.spreadsheets
                        shard key: { "username" : 1, "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard-a 3
                                shard-b 2
                        { "username" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "username" : "Abbott", "_id" : ObjectId("5adc9b211a5680820f0d28b8") } on : shard-b Timestamp(2, 0) 
                        { "username" : "Abbott", "_id" : ObjectId("5adc9b211a5680820f0d28b8") } -->> { "username" : "Islas", "_id" : ObjectId("5adc9b381a5680820f0d3161") } on : shard-b Timestamp(3, 0) 
                        { "username" : "Islas", "_id" : ObjectId("5adc9b381a5680820f0d3161") } -->> { "username" : "Schlabach", "_id" : ObjectId("5adc9b511a5680820f0d3b7c") } on : shard-a Timestamp(3, 1) 
                        { "username" : "Schlabach", "_id" : ObjectId("5adc9b511a5680820f0d3b7c") } -->> { "username" : "Velasques", "_id" : ObjectId("5adc9b381a5680820f0d31a1") } on : shard-a Timestamp(2, 4) 
                        { "username" : "Velasques", "_id" : ObjectId("5adc9b381a5680820f0d31a1") } -->> { "username" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard-a Timestamp(1, 3) 
					

分片shard-a是cloud-docs数据库的主分片,shard-a有三个块,shard-b有2块,同时在结果中显示数据位于哪个分片中,数据增多,分片中的块也将继续增大

ruby load.rb 800
分片中的块数
 chunks:
        shard-a 9
        shard-b 6

 数据的分片结果

 { "username" : { "$minKey" : 1 }, "_id" : { "$minKey" : 1 } } -->> { "username" : "Abbott", "_id" : ObjectId("5adc9b211a5680820f0d28b8") } on : shard-a Timestamp(5, 0) 
 { "username" : "Abbott", "_id" : ObjectId("5adc9b211a5680820f0d28b8") } -->> { "username" : "Charles", "_id" : ObjectId("5adc9b911a5680820f0d5198") } on : shard-b Timestamp(5, 1) 
 { "username" : "Charles", "_id" : ObjectId("5adc9b911a5680820f0d5198") } -->> { "username" : "Grimmett", "_id" : ObjectId("5adc9ddc1a568089ecb9ac91") } on : shard-b Timestamp(4, 3) 
 { "username" : "Grimmett", "_id" : ObjectId("5adc9ddc1a568089ecb9ac91") } -->> { "username" : "Islas", "_id" : ObjectId("5adc9b381a5680820f0d3161") } on : shard-b Timestamp(4, 4) 
 { "username" : "Islas", "_id" : ObjectId("5adc9b381a5680820f0d3161") } -->> { "username" : "Lafond", "_id" : ObjectId("5adc9f3d1a568089ecba0a26") } on : shard-b Timestamp(4, 5) 
 { "username" : "Lafond", "_id" : ObjectId("5adc9f3d1a568089ecba0a26") } -->> { "username" : "Mccluney", "_id" : ObjectId("5adc9b5b1a5680820f0d3f35") } on : shard-b Timestamp(4, 6) 
 { "username" : "Mccluney", "_id" : ObjectId("5adc9b5b1a5680820f0d3f35") } -->> { "username" : "Mendoza", "_id" : ObjectId("5adc9dcf1a568089ecb9a70b") } on : shard-b Timestamp(4, 7) 
 { "username" : "Mendoza", "_id" : ObjectId("5adc9dcf1a568089ecb9a70b") } -->> { "username" : "Overman", "_id" : ObjectId("5adca05d1a568089ecba7df0") } on : shard-a Timestamp(5, 5) 
 { "username" : "Overman", "_id" : ObjectId("5adca05d1a568089ecba7df0") } -->> { "username" : "Rardin", "_id" : ObjectId("5adc9f031a568089ecb9f30e") } on : shard-a Timestamp(5, 6) 
 { "username" : "Rardin", "_id" : ObjectId("5adc9f031a568089ecb9f30e") } -->> { "username" : "Royal", "_id" : ObjectId("5adc9b321a5680820f0d2f4d") } on : shard-a Timestamp(5, 7) 
 { "username" : "Royal", "_id" : ObjectId("5adc9b321a5680820f0d2f4d") } -->> { "username" : "Schlabach", "_id" : ObjectId("5adc9b511a5680820f0d3b7c") } on : shard-a Timestamp(3, 4) 
 { "username" : "Schlabach", "_id" : ObjectId("5adc9b511a5680820f0d3b7c") } -->> { "username" : "Steffensen", "_id" : ObjectId("5adc9e7b1a568089ecb9e8cb") } on : shard-a Timestamp(5, 2) 
 { "username" : "Steffensen", "_id" : ObjectId("5adc9e7b1a568089ecb9e8cb") } -->> { "username" : "Vasconcellos", "_id" : ObjectId("5adca0171a568089ecba6793") } on : shard-a Timestamp(5, 3) 
 { "username" : "Vasconcellos", "_id" : ObjectId("5adca0171a568089ecba6793") } -->> { "username" : "Velasques", "_id" : ObjectId("5adc9b381a5680820f0d31a1") } on : shard-a Timestamp(5, 4) 
 { "username" : "Velasques", "_id" : ObjectId("5adc9b381a5680820f0d31a1") } -->> { "username" : { "$maxKey" : 1 }, "_id" : { "$maxKey" : 1 } } on : shard-a Timestamp(1, 3) 

 

0
0
分享到:
评论

相关推荐

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    MongoDB集群搭建

    MongoDB MongoDB集群搭建 环境集群搭建 MongoDB MongoDB集群搭建 环境集群搭建

    mongodb高可用完全分布集群搭建

    MongoDB高可用完全分布集群搭建 mongodb是当前最流行的NoSQL数据库之一,具有高性能、高可用性和水平扩展能力的特点。然而,为了充分发挥mongodb的性能和高可用性,需要对其进行合理的架构设计和部署。以下是...

    高可用mongodb集群搭建

    ### 高可用MongoDB集群搭建知识点详解 #### 一、MongoDB概述 ##### 1.1 简介 MongoDB是一款用C++语言编写的开源文档型数据库管理系统,它结合了面向文档的数据模型和可扩展性,适用于处理大规模数据。MongoDB的...

    mongodb集群搭建

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

    mongodb 分片集群搭建过程(无副本)

    mongodb 分片集群搭建过程(无副本),详细操作步骤,linux命令

    MongoDB企业级分片集群搭建视频.zip

    7 MongoDB副本集的搭建.mp4 8 MongoDB副本集故障自动切换.mp4 9 MongoDB副本集各实例的优先级设置.mp4 10 MongoDB副本集的伸缩.mp4 11 MongoDB数据的备份和恢复.mp4 12 Python简单操作MongoDB.mp4 13 Python获取...

    MongoDB分布式搭建执行文件(直接可运行)搭建MongoDB分布式集群

    (3) 请在报告中使用文字和截图详细描述MongoDB分片集群搭建及配置的主要步骤: - 搭建配置集服务器(Mongod) - 搭建分片集服务器(Mongod) - 搭建路由节点服务器(Mongos) - 添加分片集到集群 - 创建数据库...

    MongoDB分片集群搭建教程:副本集创建与数据分片

    内容概要:本文提供了详细的MongoDB分片集群的搭建指导,涵盖了从环境准备、配置文件编写、副本集的建立、主节点的选择、配置服务器和数据分片服务器的配置到最后的路由节点的搭建与操作整个流程,以及对数据库的...

    mongodb集群搭建教程

    ### MongoDB集群搭建教程 #### 一、主从模式详解 **主从模式**是MongoDB中最常见的复制方式之一,主要用于实现数据库同步备份、故障恢复以及读取扩展等功能。该模式的核心在于建立一个主节点和一个或多个从节点,...

    mongodb分片集群增加acl

    本文将详细介绍在MongoDB 3.6版本中如何增加分片集群的ACL(访问控制列表)权限,以及在搭建分片集群过程中可能遇到的一些问题及其解决方案。 ### MongoDB分片集群简介 MongoDB分片集群是一种分布式数据存储结构,...

    MongoDB4.2分片及副本集群搭建.docx

    MongoDB4.2分片及副本集群搭建详细指导手册,详细描述了MongoDB4.2数据库服务器集群的搭建以及副本和分片服务的配置过程及具体操作指令。

    13、MongoDB分片集群&高级集群架构详解-ev.rar

    13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...

    mongodb3.4集群搭建

    ### MongoDB 3.4 集群搭建详解 #### 相关概念 在开始搭建MongoDB 3.4集群之前,我们首先需要了解几个关键的概念。 **1.1 mongos** mongos是客户端与MongoDB集群之间的接口。它是查询路由器,负责接收客户端的...

    spring+mongodb集群搭建Demo

    总结,搭建Spring+MongoDB集群涉及安装MongoDB、配置复制集和分片、设置Spring应用的数据库连接、创建数据访问层以及进行测试和维护。这个过程旨在提高应用程序的稳定性和性能,特别是在大数据量和高并发场景下。...

    centos7下mongodb4.0.6分片集群搭建-单体升级成绩群方案.pdf

    在搭建 MongoDB 分片集群时,首先你需要了解以下几个核心概念: 1. **复制集(Replica Set)**:提供数据冗余和故障转移,确保高可用性。每个复制集由多个成员组成,其中一个是主节点,其他是副节点。数据变更首先...

Global site tag (gtag.js) - Google Analytics