MongoDB的分片集羣的安裝

簡介
所謂分片,指的就是把數據拆分,將其分散到不一樣機器上的過程。MongoDB支持自動
分片,對應用而言,好像始終和一個單機的服務器交互同樣。
分片和複製
複製是讓多臺服務器擁有相同的數據副本,而分片是每一個分片都擁有整個數據集的
一個子集,且相互是不一樣的數據,多個分片的數據合起來構成整個數據集。
Mongos
用來執行客戶端訪問集羣數據的路由,它維護着一個內容列表,記錄了每一個分片包
含的數據,應用程序只要鏈接上它,就跟操做單臺服務器同樣。
配置服務器
配置服務器就是普通的mongod服務器,保存整個集羣和分片的元數據:集羣中有哪
些分片,分片的是哪些集合,以及數據塊的分佈。它極其重要,必須啓用日誌功能。
在大型的集羣中,建議配置3臺配置服務器,就足夠用了。啓動配置服務器的方式:
    1:先建立幾個存放數據的文件夾,好比在前面的dbs下面建立confdb文件夾,而後在confdb下
面建立confdb1,confdb2,confdb3文件夾;
同理在前面的logs下面建立conflogs文件夾數據庫

  2:而後分別啓動這三個配置服務器,使用—configsvr指明是配置服務器,以下:服務器

./mongod --configsvr --dbpath ../dbs/confdb/confdb1 --logpath ../logs/conflog/conflog1 --fork --port 30001
./mongod --configsvr --dbpath ../dbs/confdb/confdb2 --logpath ../logs/conflog/conflog2 --fork --port 30002
./mongod --configsvr --dbpath ../dbs/confdb/confdb3 --logpath ../logs/conflog/conflog3 --fork --port 30003

 3:--configsvr默認的端口爲27019,默認的數據目錄爲/data/configdb,能夠使用--dbpath
和--port本身定義。
  4:注意不要使用--replSet選項,配置服務器不是副本集成員。Mongos會向全部的3臺配置服
務器發送寫請求,並確保3臺服務器擁有相同的數據。日誌

啓動mongos進程
1:code

./mongos --configdb localhost:30001,localhost:30002,localhost:30003 --logpath ../logs/conflog/mongoslog --fork

2:能夠啓動任意多個mongos,一般是一個應用服務器使用一個mongos,也就是說mongos一般
與應用服務器運行在一個機器上
3:mongos的默認端口是27017,能夠用chunkSize來指定塊的大小,默認是200M索引

將副本集轉換成爲分片
1:若是沒有副本集,按照前面講的建立並初始化一個;若是有一個副本集,就打開相應的服
務器,把副本集運行起來進程

2:先鏈接到mongos use admin 也就是切換到使用admin的數據庫路由

./mongo localhost:27017
use admin


3:而後鏈接到mongos,把副本集轉換成爲分片,示例以下:io

sh.addShard("myrepl/127.0.0.1:20001,127.0.0.1:20002");

不用把全部副本集的成員都寫出來,mongos會自動檢查整個副本集。副本集的名稱
myrepl就用做了分片的名稱。
4:使用sh.status();察看狀態,會發現整個副本集裏面的服務都加入進來了。
5:注意:添加分片事後,客戶端應該鏈接mongos進行操做,而不是鏈接副本集了。
6:也能夠建立單mongod服務器的分片,但不建議在生產環境中使用
7:至此一個分片就建立好了,而後能夠重複步驟,建立一個新的副本集,加入到分片中來集羣

數據分片
須要明確指定分片的數據庫和集合,MongoDB纔會對數據進行自動分片。
1:對數據庫啓用分片配置

sh.enableSharding(「數據庫名」);

2:而後指定分片的集合,還有分片的鍵,若是對已經存在的集合進行分片,那麼指定的這個
分片鍵上必須有索引;若是集合不存在,mongos會自動在分片鍵上建立索引。例如:

sh.shardCollection("rep1.users",{"userId":1});
相關文章
相關標籤/搜索