mongo分片

第1章 分片的概念

1.有了副本集思恐,為什么還需要分片悯许?
副本集資源利用率不高
分片可以提高資源利用率

2.分片的缺點(diǎn)
理想情況下需要機(jī)器比較多
配置和運(yùn)維變得復(fù)雜且困難
提前規(guī)劃好特別重要杨箭,一旦建立后在想改變架構(gòu)變得很困難

第2章 分片涉及到的名詞

1.路由服務(wù)mongos 
路由服務(wù)凫碌,提供代理鸳址,替用戶去向后請求shard分片的數(shù)據(jù)

2.數(shù)據(jù)節(jié)點(diǎn)shard
負(fù)責(zé)處理數(shù)據(jù)的節(jié)點(diǎn)狱意,每個shard都是分片集群的一部分

3.分片配置信息服務(wù)器config 
保存數(shù)據(jù)分配在哪個shard上
保存所有shard的配置信
提供給mongos查詢服務(wù)

4.片鍵
數(shù)據(jù)存放到哪個shard的區(qū)分規(guī)則
片鍵就是索引
選擇片鍵的依據(jù):
能夠被經(jīng)常訪問到的字段
索引字段基數(shù)夠大

第3章 分片的分類

1.區(qū)間片鍵

id  name   host  sex 

1   zhang  SH    boy
2   ya     BJ    boy 
3   yaya   SZ    girl

如果以id作為片鍵:

id
1-100   shard1
100-200 shard2
200-300 shard3 
300-+無窮 shard4

如果以host作為片鍵:

SH  shard1
BJ  shard2 
SZ  shard3 

2.hash片鍵:

特點(diǎn):足夠平均式散,足夠隨機(jī)

id  name   host  sex 
1     zhang  SH    boy
2   ya     BJ    boy 
3   yaya   SZ    girl

如果以id作為片鍵:
索引:id

1      hash 之后 shard2 
2    hash 之后 shard3 
3    hash 之后 shard1 

第4章 IP端口目錄規(guī)劃

0.分片架構(gòu)圖

1.IP端口規(guī)劃

db01    10.0.0.51   
            Shard1_Master   28100
            Shard3_Slave    28200
            Shard2_Arbiter  28300
            Config Server   40000
            mongos Server   60000
        
db02    10.0.0.52   
            Shard2_Master   28100
            Shard1_Slave    28200
            Shard3_Arbiter  28300
            Config Server   40000
            mongos Server   60000
        
db03    10.0.0.53   
            Shard3_Master   28100
            Shard2_Slave    28200
            Shard1_Arbiter  28300
            Config Server   40000
            mongos Server   60000

2.目錄規(guī)劃

服務(wù)目錄:

/opt/master/{conf,log,pid}
/opt/slave//{conf,log,pid}
/opt/arbiter/{conf,log,pid}
/data/config/{conf,log,pid}
/data/mongos/{conf,log,pid}

數(shù)據(jù)目錄:

/data/master/
/data/slave/
/data/arbiter/
/data/config/

第5章 分片集群搭建副本集步驟

0.整體步驟

1.先搭shard建副本集
2.搭建config副本集
3.搭建mongos副本集
4.數(shù)據(jù)庫啟用分片功能
5.集合設(shè)置片鍵
6.插入測試數(shù)據(jù)
7.檢查是否分片
8.安裝圖形化工具 

1.安裝軟件

注意:db01操作即可

pkill  mongo
rm -rf /opt/*
rm -rf /data
tar zxf mongodb-linux-x86_64-rhel70-4.0.14.tgz -C /opt/
cd /opt/
ln -s mongodb-linux-x86_64-rhel70-4.0.14 mongodb
rsync -avz /opt/mongodb* db02:/opt/
rsync -avz /opt/mongodb* db03:/opt/
echo 'export PATH=$PATH:/opt/mongodb/bin' >> /etc/profile
source /etc/profile

2.創(chuàng)建目錄

注意:三臺服務(wù)器都操作V才邸>迕摺!

mkdir -p /opt/master/{conf,log,pid}
mkdir -p /opt/slave/{conf,log,pid}
mkdir -p /opt/arbiter/{conf,log,pid}

mkdir -p /data/master/
mkdir -p /data/slave/
mkdir -p /data/arbiter/

3.db01創(chuàng)建配置文件

master節(jié)點(diǎn)配置文件

cat >/opt/master/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/master/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/master/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/master/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28100
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard1

sharding:
  clusterRole: shardsvr
EOF

slave節(jié)點(diǎn)配置文件

cat >/opt/slave/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/slave/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/slave/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/slave/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28200
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard3

sharding:
  clusterRole: shardsvr
EOF

aribiter節(jié)點(diǎn)配置文件

cat >/opt/arbiter/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/arbiter/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/arbiter/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/arbiter/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28300
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard2

sharding:
  clusterRole: shardsvr
EOF

4.db02創(chuàng)建配置文件

master節(jié)點(diǎn)配置文件

cat >/opt/master/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/master/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/master/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/master/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28100
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard2

sharding:
  clusterRole: shardsvr
EOF

slave節(jié)點(diǎn)配置文件

cat >/opt/slave/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/slave/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/slave/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/slave/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28200
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard1

sharding:
  clusterRole: shardsvr
EOF

aribiter節(jié)點(diǎn)配置文件

cat >/opt/arbiter/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/arbiter/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/arbiter/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/arbiter/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28300
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard3

sharding:
  clusterRole: shardsvr
EOF

5.db03創(chuàng)建配置文件

master節(jié)點(diǎn)配置文件

cat >/opt/master/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/master/log/mongod.log

storage:
  journal:
    enabled: true
  dbPath: /data/master/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/master/pid/mongodb.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28100
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard3

sharding:
  clusterRole: shardsvr
EOF

slave節(jié)點(diǎn)配置文件

cat >/opt/slave/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/slave/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/slave/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/slave/pid/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28200
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard2

sharding:
  clusterRole: shardsvr
EOF

aribiter節(jié)點(diǎn)配置文件

cat >/opt/arbiter/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/arbiter/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/arbiter/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/arbiter/pid/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 28300
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  oplogSizeMB: 1024 
  replSetName: shard1

sharding:
  clusterRole: shardsvr
EOF

6.優(yōu)化警告

注意于个!三臺服務(wù)器都操作7湛!厅篓!

echo "never"  > /sys/kernel/mm/transparent_hugepage/enabled
echo "never"  > /sys/kernel/mm/transparent_hugepage/defrag

7.啟動服務(wù)

mongod -f /opt/master/conf/mongod.conf 
mongod -f /opt/slave/conf/mongod.conf 
mongod -f /opt/arbiter/conf/mongod.conf
netstat -lntup|grep mongod

8.初始化副本集

db01 master節(jié)點(diǎn)初始化shard1的副本集

mongo --port 28100
rs.initiate()
rs.add("10.0.0.52:28200")
rs.addArb("10.0.0.53:28300")

db02 master節(jié)點(diǎn)初始化shard2的副本集

mongo --port 28100
rs.initiate()
rs.add("10.0.0.53:28200")
rs.addArb("10.0.0.51:28300")

db03 master節(jié)點(diǎn)初始化shard3的副本集

mongo --port 28100
rs.initiate()
rs.add("10.0.0.51:28200")
rs.addArb("10.0.0.52:28300")

9.檢查命令

mongo --port 28100
rs.status()

第6章 分片集群搭建config步驟

1.創(chuàng)建目錄

mkdir -p /opt/config/{conf,log,pid}
mkdir -p /data/config/

2.創(chuàng)建配置文件

cat >/opt/config/conf/mongod.conf<<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/config/log/mongodb.log

storage:
  journal:
    enabled: true
  dbPath: /data/config/
  directoryPerDB: true

  wiredTiger:
    engineConfig:
      cacheSizeGB: 0.5
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true

processManagement:
  fork: true
  pidFilePath: /opt/config/pid/mongod.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 40000
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

replication:
  replSetName: configset

sharding:
  clusterRole: configsvr
EOF

3.啟動

mongod -f /opt/config/conf/mongod.conf

4.初始化副本集

mongo --port 40000
rs.initiate()
rs.add("10.0.0.52:40000")
rs.add("10.0.0.53:40000")
rs.status()

第7章 分片集群搭建mongos配置

1.創(chuàng)建目錄

mkdir -p /opt/mongos/{conf,log,pid}

2.創(chuàng)建配置文件

cat >/opt/mongos/conf/mongos.conf  <<EOF   
systemLog:
  destination: file 
  logAppend: true 
  path: /opt/mongos/log/mongos.log

processManagement:
  fork: true
  pidFilePath: /opt/mongos/pid/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo

net:
  port: 60000
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')

sharding:
  configDB: 
    configset/10.0.0.51:40000,10.0.0.52:40000,10.0.0.53:40000
EOF

3.啟動

mongos -f /opt/mongos/conf/mongos.conf

4.登錄mongos

mongo --port 60000

5.添加分片成員

use admin
db.runCommand({addShard:'shard1/10.0.0.51:28100,10.0.0.52:28200,10.0.0.53:28300'})
db.runCommand({addShard:'shard2/10.0.0.52:28100,10.0.0.53:28200,10.0.0.51:28300'})
db.runCommand({addShard:'shard3/10.0.0.53:28100,10.0.0.51:28200,10.0.0.52:28300'})

6.查看分片信息

db.runCommand( { listshards : 1 } )

第8章 hash分片配置

1.數(shù)據(jù)庫開啟分片

mongo --port 60000
use admin
db.runCommand( { enablesharding : "oldboy" } )

2.創(chuàng)建索引

use oldboy
db.hash.ensureIndex( { id: "hashed" } )

3.集合開啟哈希分片

use admin
sh.shardCollection( "oldboy.hash", { id: "hashed" } )

4.生成測試數(shù)據(jù)

use oldboy
for(i=1;i<10000;i++){db.hash.insert({"id":i,"name":"shenzheng","age":18});}

5.分片驗(yàn)證

shard1:
mongo db01:28100
use oldboy
db.hash.count()
3349

shard2:
mongo db02:28100
use oldboy
db.hash.count()
3366

shard3:
mongo db03:28100
use oldboy
db.hash.count()
3284

第9章 分片集群常用管理命令

1.列出分片所有詳細(xì)信息

db.printShardingStatus()
sh.status()

2.列出所有分片成員信息

use admin
db.runCommand({ listshards : 1})

3.列出開啟分片的數(shù)據(jù)庫

use config
db.databases.find({"partitioned": true })

4.查看分片的片鍵

use config
db.collections.find().pretty()

5.查看集合的分片信息

db.getCollection('range').getShardDistribution()
db.getCollection('hash').getShardDistribution()

第11章 正確的啟動順序

mongos
所有的config
所有的master
所有的arbiter
所有的slave

第10章 示意圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秀存,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子羽氮,更是在濱河造成了極大的恐慌或链,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件档押,死亡現(xiàn)場離奇詭異澳盐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)令宿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門叼耙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粒没,你說我怎么就攤上這事筛婉。” “怎么了癞松?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵倾贰,是天一觀的道長。 經(jīng)常有香客問我拦惋,道長,這世上最難降的妖魔是什么安寺? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任厕妖,我火速辦了婚禮,結(jié)果婚禮上挑庶,老公的妹妹穿的比我還像新娘言秸。我一直安慰自己软能,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布举畸。 她就那樣靜靜地躺著查排,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抄沮。 梳的紋絲不亂的頭發(fā)上跋核,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音叛买,去河邊找鬼砂代。 笑死,一個胖子當(dāng)著我的面吹牛率挣,可吹牛的內(nèi)容都是我干的刻伊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椒功,長吁一口氣:“原來是場噩夢啊……” “哼捶箱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起动漾,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丁屎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谦炬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悦屏,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年键思,在試婚紗的時候發(fā)現(xiàn)自己被綠了础爬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吼鳞,死狀恐怖看蚜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赔桌,我是刑警寧澤供炎,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站疾党,受9級特大地震影響音诫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雪位,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一竭钝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦香罐、人聲如沸卧波。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽港粱。三九已至,卻和暖如春旦签,著一層夾襖步出監(jiān)牢的瞬間查坪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工顷霹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咪惠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓淋淀,卻偏偏與公主長得像遥昧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子朵纷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在這此前建議先了解一下mongo的片鍵概念,結(jié)合自己的業(yè)務(wù)關(guān)系確定一個合適的片鍵袍辞,才能更好的發(fā)揮集群的作用鞋仍。 進(jìn)入...
    繁繁繁閱讀 721評論 0 1
  • 目錄 概念 搭建分片服務(wù)配置服務(wù)路由服務(wù) 配置 測試 概念 分片動機(jī) = 分布式水平擴(kuò)展 最小分片 = 1路由服務(wù)...
    諾之林閱讀 852評論 0 0
  • 文章來源:https://www.cnblogs.com/jay54520/p/8444218.html僅做個人記...
    keetone閱讀 2,896評論 0 1
  • 本文是對上一篇文章(docker搭建mongo分片集群)的進(jìn)一步整理,簡化mongdb分片集群的配置docker-...
    keetone閱讀 3,855評論 1 4
  • feisky云計(jì)算搅吁、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,851評論 0 5