MongoDB分片詳細說明(ITSOM)

MongoDB具有擴展能力,可在分佈式平臺集羣環境下運行,即分片。

數據的不同部分可利用索引分配給不同的服務器。例如,索引記錄中的客戶放在一組服務器上,供應商放在另一組服務器上。但是,若要完全隨機分佈,則需使用索引散列值。您也可以利用一系列值將數據分配給多個服務器。

分片集羣
MongoDB基礎架構如圖所示。您可與路由器進行通信,它們可以輪詢配置(config)服務器,以確定寫入和讀取數據的分片(shard)服務器,即數據存儲位置。配置服務器也可作爲複製集,即在此複製數據,以獲得額外副本。

生產環境下應至少有3個配置服務器。這裏,我們展示開發環境如何建立分片配置,其中至少使用1個路由器、1個配置服務器和1個分片服務器。

安裝軟件和設置虛擬機
我們需要三個虛擬機。如下所示,在/ etc / hosts中,我們設置了三個虛擬機。您可以設置任何想要的IP地址,但爲了本教程的目的,我們使用下面相同的名稱設置主機名。

我們採用:

mongomaster—這是路由器。
mongoshard—這是我們用來分片的數據庫服務器,即在集羣環境下運行。
mongoconfig—這是配置服務器和數據庫副本。
192.168.20.150 mongomaster
192.168.20.149 mongoshard
192.168.20.170 mongoconfig
安裝軟件
我們在Ubuntu 16.04上使用Mongo 3.4.10。我說過,因爲Mongo改變了軟件,服務器不再只是配置服務器。相反,配置服務器可用作副本。其他副本只能是副本。

Mongo軟件安裝在所有三個服務器上。
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 -- recv 0C49F3730359A14518585931BC711F9BA15703C6
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
創建配置服務器複製集
rs是我們給這個複製集的命名。–-configsvr 切換表示這個複製集可以用作副本服務器和配置服務器。
ssh mongoconfig
sudo mongod --configsvr --dbpath /data/configdb --replSet rs
現在,通過任何服務器運行mongo。我們連接到端口27019,因爲標準輸出(stdout)中,啓動mongod時,這是mongod顯示正在監聽的位置:

這個節點在配置中是mongoconfig:27019。

初始化。
mongo --host mongoconfig --port 27019
rs.initiate()
然後觀察狀態,確認是配置服務器:
rs.status()
{
"set" : "rs",
"date" : ISODate("2017-10-28T06:38:52.355Z"),
"myState" : 1,
"term" : NumberLong(1),
"configsvr" : true,

在分片服務器上啓動Mongod
ssh mongoshard
sudo mongod --shardsvr --replSet
現在,使用mongo客戶端連接並對其進行初始化:
mongo --host monogshard --port 2718
rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "mongoshard:27018",
"ok" : 1
}
在路由器上啓動Mongos
ssh mongomaster
mongos --configdb rs/mongoconfig:27019
注意標準輸出中的這個消息,它給我們提供下一步的端口號:

等待27017端口連接
在集羣中添加分片
mongo --host mongomaster --port 27017
sh.addShard( "rs/mongoshard:27018")
{ "shardAdded" : "rs", "ok" : 1 }
啓用數據庫分片
可以使用任何數據庫名。記住數據庫名,以便不存在時創建。我們使用菸草,因爲這是我們上一篇教程中使用的名稱,即使用NodeJS和MongoDB時的數據庫名。
sh.enableSharding("tobacco")
{ "ok" : 1 }
檢查狀態
看看數據庫是否存在並且分片。
sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("59f425f12fdbabb0db68b690")
}
shards:
{ "_id" : "rs", "host" : "rs/mongoshard:27018", "state" : 1 }
active mongoses:
"3.4.10" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
NaN
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "tobacco", "primary" : "rs", "partitioned" : true }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章