返回顶部
首页 > 资讯 > 数据库 >MongoDB sharding分片
  • 723
分享到

MongoDB sharding分片

2024-04-02 19:04:59 723人浏览 泡泡鱼
摘要

背景当mongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。1、MonGoDB sh

背景

mongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。


1、MonGoDB sharding简介

三种角色:

配置服务器(config):是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。

路由服务器(mongos):起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息.

分片服务器(sharding):是一个独立mongod进程,保存数据信息。可以是一台服务器,如果想要高可用也可以配置成副本集。


2、实验环境

两台机器的IP:

172.16.101.54 sht-sgmhadoopcm-01

172.16.101.55 sht-sgmhadoopnn-01


config server:

172.16.101.55:27017


mongos:

172.16.101.55:27018


sharding:

172.16.101.54:27017

172.16.101.54:27018

172.16.101.54:27019


2、启动config服务

修改配置服务器的配置文件,主要是参数clusterRole指定角色为configsvr

[root@sht-sgmhadoopnn-01 mongodb]# cat /etc/mongod27017.conf
systemLog:
   destination: file
   path: "/usr/local/mongodb/log/mongod27017.log"
   logAppend: true
   
storage:
   dbPath: /usr/local/mongodb/data/db27017
   journal:
      enabled: true
      
proceSSManagement:
   fork: true
   pidFilePath: /usr/local/mongodb/data/db27017/mongod27017.pid
net:
   port: 27017
   bindIp: 0.0.0.0
   
setParameter:
   enableLocalhostAuthBypass: false
   
sharding:
   clusterRole: configsvr
   arcHiveMovedChunks: true

[root@sht-sgmhadoopnn-01 mongodb]# bin/mongod --config /etc/mongod27017.conf

warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default

about to fork child process, waiting until server is ready for connections.

forked process: 31033

child process started successfully, parent exiting


3、启动mongos服务

修改路由服务器的配置文件,主要是参数configDB指定config服务器的IP和port,不需要配置有关数据文件的信息,因为路由服务器不存储数据

[root@sht-sgmhadoopnn-01 mongodb]# cat /etc/mongod27018.conf
systemLog:
   destination: file
   path: "/usr/local/mongodb/log/mongod27018.log"
   logAppend: true
   
processManagement:
   fork: true
   pidFilePath: /usr/local/mongodb/data/db27018/mongod27018.pid
   
net:
   port: 27018
   bindIp: 0.0.0.0
   
setParameter:
   enableLocalhostAuthBypass: false
   
sharding:
   autoSplit: true
   configDB: 172.16.101.55:27017
   chunkSize: 64


[root@sht-sgmhadoopnn-01 mongodb]# bin/mongos --config /etc/mongod27018.conf

warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default

2018-11-10T18:57:13.705+0800 W SHARDING running with 1 config server should be done only for testing purposes and is not recommended for production

about to fork child process, waiting until server is ready for connections.

forked process: 31167

child process started successfully, parent exiting


4、启动sharding服务

就是一个普通的mongodb进程,普通的配置文件

[root@sht-sgmhadoopcm-01 mongodb]# cat /etc/mongod27017.conf
systemLog:
   destination: file
   path: "/usr/local/mongodb/log/mongod27017.log"
   logAppend: true
   
storage:
   dbPath: /usr/local/mongodb/data/db27017
   journal:
      enabled: true
      
processManagement:
   fork: true
   pidFilePath: /usr/local/mongodb/data/db27017/mongod27017.pid
   
net:
   port: 27017
   bindIp: 0.0.0.0
   
setParameter:
   enableLocalhostAuthBypass: false

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27017.conf

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27018.conf

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongod --config /etc/mongod27019.conf


5、登陆mongos服务并添加sharding信息

[root@sht-sgmhadoopnn-01 mongodb]# bin/mongo --port=27018

mongos> sh.addShard("172.16.101.54:27017")

{ "shardAdded" : "shard0000", "ok" : 1 }

mongos> sh.addShard("172.16.101.54:27018")

{ "shardAdded" : "shard0001", "ok" : 1 }

mongos> sh.addShard("172.16.101.54:27019")

{ "shardAdded" : "shard0002", "ok" : 1 }


查看集群分片信息

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5be6b98a507b3e0370eb36b4")
}
  shards:
    {  "_id" : "shard0000",  "host" : "172.16.101.54:27017" }
    {  "_id" : "shard0001",  "host" : "172.16.101.54:27018" }
    {  "_id" : "shard0002",  "host" : "172.16.101.54:27019" }
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours:
        No recent migrations
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
mongos> db.runCommand({listshards:1})
{
    "shards" : [
        {
            "_id" : "shard0000",
            "host" : "172.16.101.54:27017"
        },
        {
            "_id" : "shard0001",
            "host" : "172.16.101.54:27018"
        },
        {
            "_id" : "shard0002",
            "host" : "172.16.101.54:27019"
        }
    ],
    "ok" : 1
}


6、开启分片

需要执行分片的库和集合,以及分片模式,分片模式分为两种hash和range

[root@sht-sgmhadoopnn-01 mongodb]# bin/mongo --port=27018

分片库是testdb

mongos> sh.enableSharding("testdb")

{ "ok" : 1 }


(1)hash分片模式测试

分片的集合是collection1,根据id进行hash分片

mongos> sh.shardCollection("testdb.collection1",{"_id":"hashed"})

{ "collectionsharded" : "testdb.collection1", "ok" : 1 }


共插入10个测试document

mongos> use testdb

switched to db testdb

mongos> for(var i=0;i<10;i++){db.collection1.insert({name:"jack"+i});}

WriteResult({ "nInserted" : 1 })

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5be6b98a507b3e0370eb36b4")
}
  shards:
    {  "_id" : "shard0000",  "host" : "172.16.101.54:27017" }
    {  "_id" : "shard0001",  "host" : "172.16.101.54:27018" }
    {  "_id" : "shard0002",  "host" : "172.16.101.54:27019" }
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours:
        2 : Success
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
    {  "_id" : "test",  "partitioned" : false,  "primary" : "shard0000" }
    {  "_id" : "testdb",  "partitioned" : true,  "primary" : "shard0000" }
        testdb.collection1
            shard key: { "_id" : "hashed" }
            chunks:
                shard0000    2
                shard0001    2
                shard0002    2
            { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-6148914691236517204") } on : shard0000 Timestamp(3, 2)
            { "_id" : NumberLong("-6148914691236517204") } -->> { "_id" : NumberLong("-3074457345618258602") } on : shard0000 Timestamp(3, 3)
            { "_id" : NumberLong("-3074457345618258602") } -->> { "_id" : NumberLong(0) } on : shard0001 Timestamp(3, 4)
            { "_id" : NumberLong(0) } -->> { "_id" : NumberLong("3074457345618258602") } on : shard0001 Timestamp(3, 5)
            { "_id" : NumberLong("3074457345618258602") } -->> { "_id" : NumberLong("6148914691236517204") } on : shard0002 Timestamp(3, 6)
            { "_id" : NumberLong("6148914691236517204") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0002 Timestamp(3, 7)

查看每个sharding上的数据分布情况db.collection.stats()

mongos> db.collection1.stats()
{
    "sharded" : true,
    "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
    "userFlags" : 1,
    "capped" : false,
    "ns" : "testdb.collection1",
    "count" : 10,   #共十个document数据
    "numExtents" : 3,
    "size" : 480,
    "storageSize" : 24576,
    "totalIndexSize" : 49056,
    "indexSizes" : {
        "_id_" : 24528,
        "_id_hashed" : 24528
    },
    "avgObjsize" : 48,
    "nindexes" : 2,
    "nchunks" : 6,
    "shards" : {
        "shard0000" : {
            "ns" : "testdb.collection1",
            "count" : 0,
            "size" : 0,
            "numExtents" : 1,
            "storageSize" : 8192,
            "lastExtentSize" : 8192,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 16352,
            "indexSizes" : {
                "_id_" : 8176,
                "_id_hashed" : 8176
            },
            "ok" : 1
        },
        "shard0001" : {
            "ns" : "testdb.collection1",
            "count" : 6,
            "size" : 288,
            "avgObjSize" : 48,
            "numExtents" : 1,
            "storageSize" : 8192,
            "lastExtentSize" : 8192,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 16352,
            "indexSizes" : {
                "_id_" : 8176,
                "_id_hashed" : 8176
            },
            "ok" : 1
        },
        "shard0002" : {
            "ns" : "testdb.collection1",
            "count" : 4,
            "size" : 192,
            "avgObjSize" : 48,
            "numExtents" : 1,
            "storageSize" : 8192,
            "lastExtentSize" : 8192,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 16352,
            "indexSizes" : {
                "_id_" : 8176,
                "_id_hashed" : 8176
            },
            "ok" : 1
        }
    },
    "ok" : 1
}

分别登陆sharding节点查看数据分布,和通过命令db.collection.stats()看到的结果一致

可以发现节点27017上没有数据,节点27018上有6个document,节点27019上有4个document,出现这种情况的原因可能是插入的数据量太小,没有分布均匀,数据量越大,分布越均匀。

[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo 172.16.101.54:27017/testdb

> db.collection1.find()


[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo 172.16.101.54:27018/testdb

> db.collection1.find()

{ "_id" : ObjectId("5be6c467e6467cc8077da816"), "name" : "jack1" }

{ "_id" : ObjectId("5be6c467e6467cc8077da817"), "name" : "jack2" }

{ "_id" : ObjectId("5be6c467e6467cc8077da818"), "name" : "jack3" }

{ "_id" : ObjectId("5be6c467e6467cc8077da81a"), "name" : "jack5" }

{ "_id" : ObjectId("5be6c467e6467cc8077da81c"), "name" : "jack7" }

{ "_id" : ObjectId("5be6c467e6467cc8077da81e"), "name" : "jack9" }


[root@sht-sgmhadoopcm-01 mongodb]# bin/mongo 172.16.101.54:27019/testdb

> db.collection1.find()

{ "_id" : ObjectId("5be6c467e6467cc8077da815"), "name" : "jack0" }

{ "_id" : ObjectId("5be6c467e6467cc8077da819"), "name" : "jack4" }

{ "_id" : ObjectId("5be6c467e6467cc8077da81b"), "name" : "jack6" }

{ "_id" : ObjectId("5be6c467e6467cc8077da81d"), "name" : "jack8" }


(2)range分片模式测试

分片的集合是collection2,根据name进行range分片

mongos> sh.shardCollection("testdb.collection2",{"name":1})

{ "collectionsharded" : "testdb.collection2", "ok" : 1 }

mongos> for(var i=0;i<1000;i++){db.collection2.insert({name:"jack"+i});}

WriteResult({ "nInserted" : 1 })

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5be6b98a507b3e0370eb36b4")
}
  shards:
    {  "_id" : "shard0000",  "host" : "172.16.101.54:27017" }
    {  "_id" : "shard0001",  "host" : "172.16.101.54:27018" }
    {  "_id" : "shard0002",  "host" : "172.16.101.54:27019" }
  balancer:
    Currently enabled:  yes
    Currently running:  no
    Failed balancer rounds in last 5 attempts:  0
    Migration Results for the last 24 hours:
        4 : Success
  databases:
    {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
    {  "_id" : "test",  "partitioned" : false,  "primary" : "shard0000" }
    {  "_id" : "testdb",  "partitioned" : true,  "primary" : "shard0000" }
        testdb.collection1
            shard key: { "_id" : "hashed" }
            chunks:
                shard0000    2
                shard0001    2
                shard0002    2
            { "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-6148914691236517204") } on : shard0000 Timestamp(3, 2)
            { "_id" : NumberLong("-6148914691236517204") } -->> { "_id" : NumberLong("-3074457345618258602") } on : shard0000 Timestamp(3, 3)
            { "_id" : NumberLong("-3074457345618258602") } -->> { "_id" : NumberLong(0) } on : shard0001 Timestamp(3, 4)
            { "_id" : NumberLong(0) } -->> { "_id" : NumberLong("3074457345618258602") } on : shard0001 Timestamp(3, 5)
            { "_id" : NumberLong("3074457345618258602") } -->> { "_id" : NumberLong("6148914691236517204") } on : shard0002 Timestamp(3, 6)
            { "_id" : NumberLong("6148914691236517204") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0002 Timestamp(3, 7)
        testdb.collection2
            shard key: { "name" : 1 }
            chunks:
                shard0000    1
                shard0001    1
                shard0002    1
            { "name" : { "$minKey" : 1 } } -->> { "name" : "jack1" } on : shard0001 Timestamp(2, 0)
            { "name" : "jack1" } -->> { "name" : "jack5" } on : shard0002 Timestamp(3, 0)
            { "name" : "jack5" } -->> { "name" : { "$maxKey" : 1 } } on : shard0000 Timestamp(3, 1)


mongos> db.collection2.stats()
{
    "sharded" : true,
    "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
    "userFlags" : 1,
    "capped" : false,
    "ns" : "testdb.collection2",
    "count" : 1000,
    "numExtents" : 6,
    "size" : 48032,
    "storageSize" : 221184,
    "totalIndexSize" : 130816,
    "indexSizes" : {
        "_id_" : 65408,
        "name_1" : 65408
    },
    "avgObjSize" : 48.032,
    "nindexes" : 2,
    "nchunks" : 3,
    "shards" : {
        "shard0000" : {
            "ns" : "testdb.collection2",
            "count" : 555,
            "size" : 26656,
            "avgObjSize" : 48,
            "numExtents" : 3,
            "storageSize" : 172032,
            "lastExtentSize" : 131072,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 65408,
            "indexSizes" : {
                "_id_" : 32704,
                "name_1" : 32704
            },
            "ok" : 1
        },
        "shard0001" : {
            "ns" : "testdb.collection2",
            "count" : 1,
            "size" : 48,
            "avgObjSize" : 48,
            "numExtents" : 1,
            "storageSize" : 8192,
            "lastExtentSize" : 8192,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 16352,
            "indexSizes" : {
                "_id_" : 8176,
                "name_1" : 8176
            },
            "ok" : 1
        },
        "shard0002" : {
            "ns" : "testdb.collection2",
            "count" : 444,
            "size" : 21328,
            "avgObjSize" : 48,
            "numExtents" : 2,
            "storageSize" : 40960,
            "lastExtentSize" : 32768,
            "paddingFactor" : 1,
            "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
            "userFlags" : 1,
            "capped" : false,
            "nindexes" : 2,
            "totalIndexSize" : 49056,
            "indexSizes" : {
                "_id_" : 24528,
                "name_1" : 24528
            },
            "ok" : 1
        }
    },
    "ok" : 1
}

参考链接

Sharding

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB sharding分片

本文链接: https://lsjlt.com/news/40409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [MongoDB] Sharding 分片
    ...
    99+
    2024-04-02
  • MongoDB sharding分片
    背景当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。1、MongoDB sh...
    99+
    2024-04-02
  • 2.MongoDB Sharding Cluster分片集群
    原文:https://www.cnblogs.com/fengyuanfei/p/14495513.html...
    99+
    2018-07-08
    2.MongoDB Sharding Cluster分片集群 数据库入门 数据库基础教程
  • MongoDB实战(11)Sharding 分片(下)
    管理维护Sharding 列出所有的Shard Server 查看Sharding信息 判断是否是Sharding 对现有的表进行Sharding刚才我们是...
    99+
    2024-04-02
  • MongoDB实战(11)Sharding 分片(上)
    这是一种将海量的数据水平扩展的数据库集群系统数据分表存储在sharding 的各个节点上使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群。 MongoDB&...
    99+
    2024-04-02
  • MongoDB 3.4中怎么配置sharding分片
    这篇文章给大家介绍MongoDB 3.4中怎么配置sharding分片,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1. 创建配置服务副本集创建...
    99+
    2024-04-02
  • MONGODB SHARDING
    Sharding Introduction Sharding is a method for storing data across multiple machines. MongoDB ...
    99+
    2024-04-02
  • mongodb迁移分片,关闭或者移除表的sharding ,
    MongoDB的Shard集群来说,添加一个分片很简单,AddShard就可以了。但是缩减集群(删除分片)这种一般很少用到,但是有些场景,必须把它上面的数据自动迁移到其他Shard上。 mongo...
    99+
    2024-04-02
  • 57-4 数据库分片概念及mongodb sharding的实现
    04 数据库分片的概念及mongodb sharding的实现配置环境:node1: 192.168.1.121 CentOS release 6.7node2: 192.168.1.122 CentOS ...
    99+
    2024-04-02
  • mongodb之sharding搭建
    mongodb版本3.2.7资源划分:192.168.1.11:27017----》config server192.168.1.11:27018----》mongos192.168.1.11:27019-...
    99+
    2024-04-02
  • MongoDB分片
    简介:分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若...
    99+
    2024-04-02
  • mongodb sharding key的选择
    两个最容易出现的误区– 递增的sharding key– 随机的sharding keySharding key的选择 递增的Sharding key– 数据文件挪动少(优势)– 因为数据文件递增,所以会...
    99+
    2024-04-02
  • MongoDB之分片
    1、环境 操作系统信息: IP 操作系统 MongoDB 10.163.91.15 ...
    99+
    2024-04-02
  • Oracle 19.3 Sharding 安裝配置之02 (安裝Sharding-系統管理分片)
    规划 序号 主机名 組件 ...
    99+
    2024-04-02
  • MongoDB Sharding学习理论篇
    MongoDB Sharding技术是MongoDB为了解决随着数据量的增加和读写请求的增加,单个MongoDB实例无法应对的问题.通过使用Sharding,MongoDB将数据切分成多个部分,将数据分布存...
    99+
    2024-04-02
  • MongoDB实战(12)Replica Sets + Sharding
    MongoDB Auto-Sharding 解决了海量存储和动态扩容的问题但离实际生产环境所需的高可靠、高可用还有些距离所以有了” Replica Sets ...
    99+
    2024-04-02
  • mongoDB分片技术
    MongoDB 分片分片在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读...
    99+
    2024-04-02
  • MongoDB Sharding学习操作篇二
    接上一篇14.配置集群中的balancer进程balancer进程运行在集群中的某一个mongos实例上,确保chunks均匀分布在整个集群上。更改指定shard的最大存储大小15.移除已有分片集群中的一个...
    99+
    2024-04-02
  • 【Mongodb】sharding 集群Add/Remove 节点
    MongoDB的Auto-Sharding能够做到:...
    99+
    2023-06-06
  • Sharding-Jdbc 自定义复合分片的实现(分库分表)
    目录Sharding-JDBC的数据分片策略分片键分片算法分片策略SQL Hint实战–自定义复合分片策略小结Sharding-JDBC中的分片策略有两个维度,分别是: 数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作