1. 程式人生 > >MongoDB之——Sharding 分片

MongoDB之——Sharding 分片

這是一種將海量的資料水平擴充套件的資料庫集群系統,資料分表儲存在 sharding 的各個節點上,使用者通過簡單的配置就可以很方便地構建一個分散式 MongoDB 叢集。MongoDB 的資料分塊稱為 chunk。每個 chunk 都是 Collection 中一段連續的資料記錄,通常最大尺寸是 200MB,超出則生成新的資料塊。
要構建一個 MongoDB Sharding Cluster,需要三種角色:

  • Shard Server

即儲存實際資料的分片,每個 Shard 可以是一個 mongod 例項,也可以是一組 mongod 例項構成的 Replica Set。為了實現每個 Shard 內部的 auto-failover, MongoDB 官方建議每個 Shard為一組 Replica Set。

  • Config Server

為了將一個特定的 collection 儲存在多個 shard 中,需要為該 collection 指定一個 shard key,例如{age: 1} , shard key 可以決定該條記錄屬於哪個 chunk。 Config Servers 就是用來儲存:所有 shard 節點的配置資訊、每個 chunk 的 shard key 範圍、 chunk 在各 shard 的分佈情況、該叢集中所有 DB 和 collection 的 sharding 配置資訊。

  • Route Process

這是一個前端路由,客戶端由此接入,然後詢問 Config Servers 需要到哪個 Shard 上查詢或儲存記錄,再連線相應的 Shard 進行操作,最後將結果返回給客戶端。客戶端只需要將原本發給 mongod 的查詢或更新請求原封不動地發給 Routing Process,而不必關心所操作的記錄儲存在哪個 Shard 上。


Shard Server 1: 20000
Shard Server 2: 20001
Config Server : 30000
Route Process: 40000

1、啟動 Shard Server

mkdir -p /data/shard/s0 --建立資料目錄
mkdir -p /data/shard/s1
mkdir -p /data/shard/log --建立日誌目錄
/Apps/mongo/bin/mongod --shardsvr --port 20000 --dbpath /data/shard/s0 --fork --logpath /data/shard/log/s0.log --directoryperdb --啟動 Shard Server 例項 1
/Apps/mongo/bin/mongod --shardsvr --port 20001 --dbpath /data/shard/s1 --fork --logpath /data/shard/log/s1.log --directoryperdb --啟動 Shard Server 例項 2

2、啟動 Config Server

mkdir -p /data/shard/config --建立資料目錄
/Apps/mongo/bin/mongod --configsvr --port 30000 --dbpath /data/shard/config --fork --logpath /data/shard/log/config.log --directoryperdb --啟動 Config Server 例項

3、啟動 Route Process

/Apps/mongo/bin/mongos --port 40000 --configdb localhost:30000 --fork --logpath /data/shard/log/route.log --chunkSize 1 --啟動 Route Server 例項
mongos 啟動引數中, chunkSize 這一項是用來指定 chunk 的大小的,單位是 MB,預設大小為 200MB,為了方便測試 Sharding 效果,我們把 chunkSize 指定為 1MB。

4、配置 Sharding

接下來,我們使用 MongoDB Shell 登入到 mongos,新增 Shard 節點
[[email protected] ~]# /Apps/mongo/bin/mongo admin --port 40000 --此操作需要連線 admin 庫
MongoDB shell version: 1.8.1
connecting to: 127.0.0.1:40000/admin
> db.runCommand({ addshard:"localhost:20000" }) --新增 Shard Server
{ "shardAdded" : "shard0000", "ok" : 1 }
> db.runCommand({ addshard:"localhost:20001" })
{ "shardAdded" : "shard0001", "ok" : 1 }
> db.runCommand({ enablesharding:"test" }) --設定分片儲存的資料庫
{ "ok" : 1 }
> db.runCommand({ shardcollection: "test.users", key: { _id:1 }}) --設定分片的集合名稱,且必須指定 Shard Key,系統會自動建立索引
{ "collectionsharded" : "test.users", "ok" : 1 }
>

5、驗證 Sharding 正常工作

我們已經對 test.users 表進行了分片的設定,下面我們們插入一些資料看一下結果
> use test
switched to db test
> for (var i = 1; i <= 500000; i++) db.users.insert({age:i, name:"liuyazhuang", addr:"Beijing",country:"China"})
> db.users.stats()
{
	"sharded" : true, --說明此表已被 shard
	"ns" : "test.users",
	"count" : 500000,
	"size" : 48000000,
	"avgObjSize" : 96,
	"storageSize" : 66655232,
	"nindexes" : 1,
	"nchunks" : 43,
	"shards" : {
		"shard0000" : { --在此分片例項上約有 24.5M 資料
			"ns" : "test.users",
			"count" : 254889,
			"size" : 24469344,
			"avgObjSize" : 96,
			"storageSize" : 33327616,
			"numExtents" : 8,
			"nindexes" : 1,
			"lastExtentSize" : 12079360,
			"paddingFactor" : 1,
			"flags" : 1,
			"totalIndexSize" : 11468800,
			"indexSizes" : {
				"_id_" : 11468800
			},
			"ok" : 1
		},
		"shard0001" : { --在此分片例項上約有 23.5M 資料
			"ns" : "test.users",
			"count" : 245111,
			"size" : 23530656,
			"avgObjSize" : 96,
			"storageSize" : 33327616,
			"numExtents" : 8,
			"nindexes" : 1,
			"lastExtentSize" : 12079360,
			"paddingFactor" : 1,
			"flags" : 1,
			"totalIndexSize" : 10649600,
			"indexSizes" : {
				"_id_" : 10649600
			},
			"ok" : 1
		}
	},
	"ok" : 1
}
>
我們看一下磁碟上的物理檔案情況
[[email protected] bin]# ll /data/shard/s0/test --此分片例項上有資料產生
總計 262420
-rw------- 1 root root 16777216 06-03 15:21 test.0
-rw------- 1 root root 33554432 06-03 15:21 test.1
-rw------- 1 root root 67108864 06-03 15:22 test.2
-rw------- 1 root root 134217728 06-03 15:24 test.3
-rw------- 1 root root 16777216 06-03 15:21 test.ns
[[email protected] bin]# ll /data/shard/s1/test --此分片例項上有資料產生
總計 262420
-rw------- 1 root root 16777216 06-03 15:21 test.0
-rw------- 1 root root 33554432 06-03 15:21 test.1
-rw------- 1 root root 67108864 06-03 15:22 test.2
-rw------- 1 root root 134217728 06-03 15:23 test.3
-rw------- 1 root root 16777216 06-03 15:21 test.ns
[[email protected] bin]#
看上述結果,表明 test.users 集合已經被分片處理了,但是通過 mongos 路由,我們並感覺不到是資料存放在哪個 shard 的 chunk 上的,這就是 MongoDB 使用者體驗上的一個優勢,即對使用者是透明的

相關推薦

MongoDB——Sharding 分片

這是一種將海量的資料水平擴充套件的資料庫集群系統,資料分表儲存在 sharding 的各個節點上,使用者通過簡單的配置就可以很方便地構建一個分散式 MongoDB 叢集。MongoDB 的資料分塊稱為 chunk。每個 chunk 都是 Collection 中一段連續的資料

MongoDB分片

索引 第一篇 csdn 屬性 collect sso factor mar popu 本文介紹分片的思想和MongoDB中的實現方法。 首先須要介紹一些主要的概念。 分片 分片。也叫做分區。是一種經常使用的數據庫優化技術。其含義就是將數據拆

MongoDB(4.0)分片——大數據的處理

Opens 內存 內容 ber -s shard show cto ans 什麽是分片 高數據量和吞吐量的數據庫應用會對單機的性能造成較大壓力,大的查詢量會將單機的CPU耗盡,大的數據量對單機的存儲壓力較大,最終會耗盡系統的內存而將壓力轉移到磁盤IO上。MongoDB分片是

MongoDBshard_副本集和分片部署

sla server nod ase _id person member logs gpo 機器角色分配和拓撲環境如下: -------------------配置副本集s1-------------------------------1.創建目

MongoDB sharding分片

背景 當MongoDB儲存海量的資料時,一臺機器可能不足以儲存資料,也可能不足以提供可接受的讀寫吞吐量。這時,我們就可以通過在多臺機器上分割資料,使得資料庫系統能儲存和處理更多的資料。 1、MongoDB sharding簡介 三種角色: 配置伺服器(config):是一個獨立的mongod程

MongoDB Sharding分片 shell 指令碼

#!/bin/sh CONFIG_NAME=$1 CONFIG_PORT=$2 SERIAL_NUM=$3 STORAGE_HOME=$4 if [ ! -n "$CONFIG_NAME" ] ; then CONFIG_NAME=MCCONFIG fi

Linux下Mongodb的分散式分片群集(sharding cluster)配置

> db.runCommand({shardcollection:"test.c1", key: {id: 1}});); > for (vari=0; i<=2000000; i++) {db.c1.save({id: i, value1: "1234567890",value2: "12

mongodb 3.4 配置sharding分片

摘抄mongodb官網: Sharding is a method for distributing data across multiplemachines. MongoDB uses sharding to support deployments with very

搭建Mongodb叢集:分片Sharding+副本集Replica Set 二

檔案配置:1. mongodb0.cfgport=27017replSet=rs1shardsvr=truelogpath=D:\mongodb\logs\r0.logdbpath=D:\mongodb\db\r0keyFile=D:\mongodb\key\keyfile

Morphia - mongodbORM框架

embedded art tails transient sdn tar detail nbsp hit 一、簡介 二、註解 [email protected]/* */ [email protected]/* */[email prote

MongoDB增刪改查(一)

type over friend top ews tex 內容 ive review 本文主要介紹MongoDB數據庫增刪改查操作。 增 mongoDB和其它關系型數據庫一樣,通過insert來添加數據到集合中去。 db.collectio

MongoDB學習路線

mongodbMongoDB AtlasDatabase as a ServiceDeploy, operate, and scale a MongoDB database in the cloud with just a few clicks. MongoDB Atlas is fully elastic

MongoDB 幽靈操作避免

出現 等待 原因 依然 觸發 才會 job -s style 進行靜態加載數據到集合的過程中可能會出現。 假設建立一個任務(Job):在MongoDB中進行千條更新操作,開始後迅速終止任務,終止所有更新操作,但依然發現新的更新任務在不斷出現,即使任務已經停止。

mongodb安裝

參考 chkconfig exp man key per star sudo 64位 前言 系統環境是CentOS,linux只支持64位版本 yum源安裝 rpm包說明 mongodb-org-server 包含mongod進程,關聯配置,初始化腳本mongod

MongoDBpymongo

upd star client 關系 alt ads 記錄 進入 結果 PyMongo是什麽  PyMongo是驅動程序,使python程序能夠使用Mongodb數據庫,使用python編寫而成. 安裝  環境:Ubuntu 14.04+python2.7+Mongo

Mongodb權限認證管理

nosql mongodb 權限認證 Mongodb默認是不開啟認證的,對於數據庫來說,這有很大的安全隱患,下面記錄下生產中Mongodb權限認證的方法。 一,環境 阿裏雲:CentOS Linux release 7.4.1708 (Core)Mongodb版本: 3.6.2 二,添加超級用戶

分布式數據庫中間件sharding-jdbc

sta math 進行 turn 使用 opened pri import 是我 小編今天在做Sharding-jdbc時出現了一些問題,就上網百一百,發現網上的sharding-jdbc的參考是挺少的,唉還是要繼續學習看文檔。 Sharding-jdbc介紹 Shardi

MongoDB Limit 選取 Skip 跳過 Sort 排序 MongoDB - 7

想要 但是 人的 怎麽 解釋 price fin image limit 我們已經學過MongoDB的 find() 查詢功能了,在關系型數據庫中的選取(limit),排序(sort) MongoDB中同樣有,而且使用起來更是簡單 首先我們看下添加幾條Document進來

WebFlux04 SpringBootWebFlux集成MongoDBWindows版本

ng- 類型 god 持久層 tor optional 安裝目錄 bat 控制臺 1 下載並安裝MongoDB   1.1 MongoDB官網        1.2 下載     solutions -> download center        1.3 安裝  

mongoDB基礎

名稱 指令 安裝 href 技術 14. 二次 進度條 查找 關於mongoDB數據庫摘要 1.安裝mongoDB 2.mongo數據庫概念 3.mongo數據庫指令 mongo數據庫對於實際項目開發中可能不實用,但作為為前端做測試,足以。 關閉數據庫