標籤:mongodb ITSM ServiceHot
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 }
MongoDB分區詳細說明(ITSOM)