亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB sharding分片

發布時間:2020-07-08 02:21:35 來源:網絡 閱讀:1041 作者:Darren_Chen 欄目:MongoDB數據庫

背景

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潮安县| 芜湖市| 翁牛特旗| 长春市| 金川县| 阳泉市| 西和县| 临洮县| 铜山县| 平果县| 淮北市| 花莲县| 册亨县| 白城市| 五常市| 阳西县| 霸州市| 兴安县| 高邑县| 乐清市| 大新县| 平罗县| 寻甸| 临漳县| 通化县| 石河子市| 宽甸| 循化| 和静县| 合水县| 呼伦贝尔市| 山阴县| 双峰县| 上虞市| 五常市| 武宣县| 南城县| 昔阳县| 凤台县| 宜兰市| 大同市|