Mongodb sharding cluster with replica set

來源:互聯網
上載者:User

MongoDB在1.6版本中提供分區和複本集技術使得MongoDB真正具備了生產環境部署的能力。
分區--Sharding

1. MongoDB叢集的構成
MongoDB叢集主要有以下服務組成
A.分區服務(Shard Server),mongod 執行個體,2個以上,負責儲存實際的資料分區,生產環境中一個Shard Server可由幾台伺服器組成一個Replica Set代替,避免主機單點故障。
B.佈建服務(Config Server),mongod 執行個體,1個以上,負責儲存整個叢集的中繼資料。
C.路由服務(Routing Process),mongos執行個體,1個以上,用戶端由此前端路由接入,且讓整個叢集看起來像單一資料庫,用戶端應用可以透明使用,Routing Process不儲存資料,資料來自Config Server。
2. 分區機制
A.Shard Keys:MongoDB主要根據Shard Keys來劃分資料,Shard Keys可以由文檔的一個或者多個物理索引值組成。
B.Chunks:Chunk是一組資料集合,在MongoDB中,Chunk表示為collection,minKey,maxKey構成的三元組,一個Chunk包括了Shard Key取值在minKey和maxKey之間一組文檔集合,但Chunk並不存放實際資料。整個MongoDB的chunk元資訊存放在config資料庫的chunks Colecttion中。
C.AutoSplit和MoveChunk: 當Chunk的大小達到ChunkSize(預設為200MB,在mongos啟動時可以設定)時,MongoDB會根據minKey和maxKey的一個中間值將一個Chunk分裂(Split)為兩個Chunk,分裂完畢後,MongoDB會根據各個Shard的負載情況,決定是否將新Chunk移動到其他Shard(MoveChunk)。
3. 配置
以單機配置2個Shard,1個Config,1個Mongos為例
A. 啟動Shard Server
分區1
./bin/mongod --shardsvr --port 27017 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/shard1.log --logappend --fork
分區2
./bin/mongod --shardsvr --port 27018 --dbpath ./data/shard2 --oplogSize 10000 --logpath ./data/shard1.log --logappend --fork
其中 shardsvr選項表示以分區方式啟動mongod。
port指明mongod的服務連接埠。
dbpath指明mongod的資料存放位置。
oplogSize指明mongod的oplog collection大小,單位為MB,mongodb的每次操作都會先寫入oplog,再實際操作,且在replica set模式中,該日誌用於各個伺服器間的同步,網速較慢時應該適當放大。
logpath指明mongod輸出日誌的位置
logappend指明日誌以追加方式輸出
fork指明mongod以後台服務形式啟動
B. 啟動Config Server
./bin/mongod –configsvr –dbpath ./data/config –port 20000 --logpath ./data/config.log --logappend –fork
Config Server實際上也是個mongo資料庫,除了使用configsvr選項表示Config身份,其餘跟Shard Server雷同
C. 啟動Routing Process
./bin/mongos –configdb localhost:20000 --port 30000 --logpath ./data/mongos.log --logappend --fork
啟動mongos,最主要的是要指定Config Server的位置
D. 配置分區
./bin/mongo localhost:30000
用mongo用戶端串連mongos
> use admin;
切換到admin資料庫
> db.runCommand( { addshard :"[ip]:27017",name:"s1"} );
> db.runCommand( { addshard :"[ip]:27018",name:"s2"} );
添加shard,[ip]為Shard Server的ip地址.(建議使用ip地址配置,使用hostname在某些情況下會有錯誤導致mongod進程掛掉)。Name指明分區的名稱,可以隨意配置。
> db.runCommand({ enablesharding :"dbname"} );
設定資料庫允許分區
> db.runCommand( { shardcollection : "dbname.colname",key : {keyname:1} });
配置collection的shard key
E. 常用命令
>use admin;
>db.printSharingStatus();
可以查看整個叢集的分區情況
>use dbname;
>db.colname.stats();
可以查看某個具體Collection的分區情況

複本集--Replica Set

1. 複本集(Replica Set)介紹
Replica Set是伴隨著MongoDB分區技術產生的,Relpica Set是MongoDB在Shard環境中使用的複製技術。一組Replica Set支援1到7台伺服器,在一個複本集中各個伺服器資料保持完全一致。通過Relpica Set,MongoDB實現了自動錯誤處理和自動錯誤恢複。
在一個Replica Set中各個伺服器有以下幾種狀態
A. Primary 主節點,一個複本集有且僅有一台伺服器處於Primary狀態,只有主節點才對外提供讀寫服務。如果主節點掛掉,複本集將會投票選出一個備用節點成為新的主節點。
B. Secondary 備用節點,允許有多台Secondary,每個備用節點的資料與主節點的資料是完全同步的。
C. Recovering 恢複中,當複本集中某台伺服器掛掉或者掉線後資料無法同步,重新恢複服務後從其他成員複製資料,這時就處於恢複過程,資料同步後,該節點又回到備用狀態。
D. Arbiter 仲裁節點,該類節點可以不用單獨存在,如果配置為仲裁節點,就主要負責在複本集中監控其他節點狀態,投票選出主節點已經恢複資料。該節點將不會用於存放資料。如果沒有仲裁節點,那麼投票工作將由所有節點共同進行。
E. Down 無效節點,當伺服器掛掉或掉線時就會處於該狀態。

2. 配置
以單機配置2個節點的複本集為例
A. 啟動mongod
./bin/mongod --replSet setname --port 27017 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/set1.log --logappend –fork
./bin/mongod --replSet setname --port 27018 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/set2.log --logappend –fork
其中replSet指明複本集的名稱
B. 初始化複本集
./bin/mongo localhost:27017
用mongo串連複本集中任意一台機器
>use admin;
>config = {
_id: 'setname',
members: [
{_id: 0, host: '[ip]:27017'},
{_id: 1, host: '[ip]:27018'}
]
};
>rs.initiate(config);
主要用一個config對象初始化複本集。
其中_id: 'setname'表示複本集的名字,應與啟動時設定的名字一致。
Members指明了複本集中各個伺服器的ip和連接埠。
到此就配置完畢。
C. 常用命令
>use admin;
>rs.status();
查看複本集的狀態。
>rs.add("[ip]:27020");
運行中添加新成員。
D. 分區中的複本集配置
可以為一個分區配置一組複本集,配置方式為增加--replSet setname選項
例如:
./bin/mongod –shardsvr –replSet shard1 –port 27019 --dbpath ./data/shard3$HOSTID --oplogSize 10000 –logpath ./data/shard3$HOSTID.log --logappend –fork
一組複本集的機器都啟動後,用mongo登入到某台機器上初始化複本集,注意不是登入到mongos中。
添加分區時應使用如下命令
>db.runCommand( { addshard :"shard1/[ip1]:[port1], [ip2]:[port2]",name:"s1"} );
注意使用<replica setname>/<ip>:<port>,<ip>:<port>添加分區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.