国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【mongoDB運(yùn)維篇④】Shard 分片集群

yy736044583 / 432人閱讀

摘要:簡(jiǎn)述為何要分片減少單機(jī)請(qǐng)求數(shù),降低單機(jī)負(fù)載,提高總負(fù)載減少單機(jī)的存儲(chǔ)空間,提高總存空間。就是用來存儲(chǔ)所有節(jié)點(diǎn)的配置信息每個(gè)的范圍在各的分布情況該集群中所有和的配置信息。

簡(jiǎn)述 為何要分片

減少單機(jī)請(qǐng)求數(shù),降低單機(jī)負(fù)載,提高總負(fù)載

減少單機(jī)的存儲(chǔ)空間,提高總存空間。

常見的mongodb sharding 服務(wù)器架構(gòu)


要構(gòu)建一個(gè) MongoDB Sharding Cluster,需要三種角色:

Shard Server
即存儲(chǔ)實(shí)際數(shù)據(jù)的分片,每個(gè)Shard可以是一個(gè)mongod實(shí)例,也可以是一組mongod實(shí)例構(gòu)成的Replication Set。為了實(shí)現(xiàn)每個(gè)Shard內(nèi)部的auto-failover(自動(dòng)故障切換),MongoDB官方建議每個(gè)Shard為一組Replica Set。

Config Server
為了將一個(gè)特定的collection存儲(chǔ)在多個(gè)shard中,需要為該collection指定一個(gè)shard key(片鍵),例如{age: 1} ,shard key可以決定該條記錄屬于哪個(gè)chunk(分片是以chunk為單位,后續(xù)會(huì)介紹)。Config Servers就是用來存儲(chǔ):所有shard節(jié)點(diǎn)的配置信息、每個(gè)chunk的shard key范圍、chunk在各shard的分布情況、該集群中所有DB和collection的sharding配置信息。

Route Process
這是一個(gè)前端路由,客戶端由此接入,然后詢問Config Servers需要到哪個(gè)Shard上查詢或保存記錄,再連接相應(yīng)的Shard進(jìn)行操作,最后將結(jié)果返回給客戶端。客戶端只需要將原本發(fā)給mongod的查詢或更新請(qǐng)求原封不動(dòng)地發(fā)給Routing Process,而不必關(guān)心所操作的記錄存儲(chǔ)在哪個(gè)Shard上。(所有操作在mongos上操作即可)

配置分片服務(wù)器

下面我們?cè)谕慌_(tái)物理機(jī)器上構(gòu)建一個(gè)簡(jiǎn)單的 Sharding Cluster:

Shard Server 1:27017
Shard Server 2:27018
Config Server :27027
Route Process:40000
步驟一: 啟動(dòng)Shard Server
mkdir -p ./data/shard/s0 ./data/shard/s1  #創(chuàng)建數(shù)據(jù)目錄
mkdir -p ./data/shard/log # 創(chuàng)建日志目錄

./bin/mongod --port 27017 --dbpath /usr/local/mongodb/data/shard/s0 --fork --logpath /usr/local/mongodb/data/shard/log/s0.log # 啟動(dòng)Shard Server實(shí)例1

./bin/mongod --port 27018 --dbpath /usr/local/mongodb/data/shard/s1 --fork --logpath /usr/local/mongodb/data/shard/log/s1.log # 啟動(dòng)Shard Server實(shí)例2
步驟二: 啟動(dòng)Config Server
mkdir -p ./data/shard/config #創(chuàng)建數(shù)據(jù)目錄

./bin/mongod --port 27027 --dbpath /usr/local/mongodb/data/shard/config --fork --logpath /usr/local/mongodb/data/shard/log/config.log #啟動(dòng)Config Server實(shí)例

注意,這里我們完全可以像啟動(dòng)普通mongodb服務(wù)一樣啟動(dòng),不需要添加—shardsvr和configsvr參數(shù)。因?yàn)檫@兩個(gè)參數(shù)的作用就是改變啟動(dòng)端口的,所以我們自行指定了端口就可以

步驟三: 啟動(dòng)Route Process
./bin/mongos --port 4000 --configdb localhost:27027 --fork --logpath /usr/local/mongodb/data/shard/log/route.log --chunkSize=1 # 啟動(dòng)Route Server實(shí)例

mongos啟動(dòng)參數(shù)中,chunkSize這一項(xiàng)是用來指定chunk的大小的,單位是MB,默認(rèn)大小為200MB,為了方便測(cè)試Sharding效果,我們把chunkSize指定為 1MB。意思是當(dāng)這個(gè)分片中插入的數(shù)據(jù)大于1M時(shí)開始進(jìn)行數(shù)據(jù)轉(zhuǎn)移

步驟四: 配置Sharding
# 我們使用MongoDB Shell登錄到mongos,添加Shard節(jié)點(diǎn)
./bin/mongo admin --port 40000 #此操作需要連接admin庫(kù)
> db.runCommand({ addshard:"localhost:27017" }) #添加 Shard Server 或者用 sh.addshard()命令來添加,下同;
{ "shardAdded" : "shard0000", "ok" : 1 }
> db.runCommand({ addshard:"localhost:27018" })
{ "shardAdded" : "shard0001", "ok" : 1 }

> db.runCommand({ enablesharding:"test" }) #設(shè)置分片存儲(chǔ)的數(shù)據(jù)庫(kù)
{ "ok" : 1 }

> db.runCommand({ shardcollection: "test.users", key: { id:1 }}) # 設(shè)置分片的集合名稱。且必須指定Shard Key,系統(tǒng)會(huì)自動(dòng)創(chuàng)建索引,然后根據(jù)這個(gè)shard Key來計(jì)算
{ "collectionsharded" : "test.users", "ok" : 1 }

 > sh.status(); #查看片的狀態(tài)
 > printShardingStatus(db.getSisterDB("config"),1); # 查看片狀態(tài)(完整版);
 > db.stats(); # 查看所有的分片服務(wù)器狀態(tài)
 

注意這里我們要注意片鍵的選擇,選擇片鍵時(shí)需要根據(jù)具體業(yè)務(wù)的數(shù)據(jù)形態(tài)來選擇,切不可隨意選擇,實(shí)際中尤其不要輕易選擇自增_id作為片鍵,除非你很清楚你這么做的目的,具體原因我不在此分析,根據(jù)經(jīng)驗(yàn)推薦一種較合理的片鍵方式,“自增字段+查詢字段”,沒錯(cuò),片鍵可以是多個(gè)字段的組合。

另外這里說明一點(diǎn),分片的機(jī)制:mongodb不是從單篇文檔的級(jí)別,絕對(duì)平均的散落在各個(gè)片上, 而是N篇文檔,形成一個(gè)塊"chunk",優(yōu)先放在某個(gè)片上, 當(dāng)這片上的chunk,比另一個(gè)片的chunk區(qū)別比較大時(shí)(>=3) ,會(huì)把本片上的chunk,移到另一個(gè)片上, 以chunk為單位,維護(hù)片之間的數(shù)據(jù)均衡。

也就是說,一開始插入數(shù)據(jù)時(shí),數(shù)據(jù)是只插入到其中一塊分片上的,插入完畢后,mongodb內(nèi)部開始在各片之間進(jìn)行數(shù)據(jù)的移動(dòng),這個(gè)過程可能不是立即的,mongodb足夠智能會(huì)根據(jù)當(dāng)前負(fù)載決定是立即進(jìn)行移動(dòng)還是稍后移動(dòng)。
在插入數(shù)據(jù)后,立馬執(zhí)行db.users.stats();兩次可以驗(yàn)證如上所說。

這種分片機(jī)制,節(jié)省了人工維護(hù)成本,但是由于其是優(yōu)先往某個(gè)片上插入,等到chunk失衡時(shí),再移動(dòng)chunk,并且隨著數(shù)據(jù)的增多,shard的實(shí)例之間,有chunk來回移動(dòng)的現(xiàn)象,這將會(huì)為服務(wù)器帶來很大的IO開銷,解決這種開銷的方法,就是手動(dòng)預(yù)先分片;

手動(dòng)預(yù)先分片

以shop.user表為例

sh.shardCollection(‘shop.user’,{userid:1}); # user表用userid做shard key

for(var i=1;i<=40;i++) { sh.splitAt("shop.user",{userid:i*1000}) } # 預(yù)先在1K 2K...40K這樣的界限切好chunk(雖然chunk是空的), 這些chunk將會(huì)均勻移動(dòng)到各片上.

通過mongos添加user數(shù)據(jù). 數(shù)據(jù)會(huì)添加到預(yù)先分配好的chunk上, chunk就不會(huì)來回移動(dòng)了.

repliction set and shard

一般mongoDB如果真的到了分片的級(jí)別后,那片服務(wù)器避無可免的要用到復(fù)制集,部署的基本思路同上,只需要注意兩點(diǎn):

sh.addShard( host ) server:port OR setname/server:port # 如果是復(fù)制集的片服務(wù)器,我們應(yīng)該復(fù)制集的名稱寫在前面比如
sh.addShard("ras/192.168.42.168:27017"); # 27017也就是復(fù)制集中的primary

另外在啟動(dòng)本機(jī)的mongod服務(wù)的時(shí)候,最好把ip也給寫進(jìn)去,否則有可能會(huì)有不可預(yù)知的錯(cuò)誤;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/18805.html

相關(guān)文章

  • 搭建 MongoDB分片sharding) / 分區(qū) / 集群環(huán)境

    摘要:搭建分片分區(qū)集群環(huán)境安裝三臺(tái)機(jī)器關(guān)閉防火墻主節(jié)點(diǎn)副節(jié)點(diǎn)仲裁仲裁主節(jié)點(diǎn)副節(jié)點(diǎn)副節(jié)點(diǎn)仲裁主節(jié)點(diǎn)端口分配下載并且安裝所有版本二進(jìn)制文件自行下載改名分別在每臺(tái)機(jī)器建立六個(gè)目錄,因?yàn)椴淮鎯?chǔ)數(shù)據(jù),只需要建立日志文件目錄即可。 搭建 MongoDB分片(sharding) / 分區(qū) / 集群環(huán)境 1. 安裝 MongoDB 三臺(tái)機(jī)器 關(guān)閉防火墻 systemctl stop firewalld.se...

    KunMinX 評(píng)論0 收藏0
  • 初識(shí)MongoDB分片

    摘要:復(fù)制一份,命名為,修改文件內(nèi)容如下注意改為我們第一步創(chuàng)建的目錄,端口號(hào)改為這個(gè)隨意,只要該端口沒被占用即可,表示這是一個(gè)配置服務(wù)器,另外由于我們的配置服務(wù)器要做成備份集,所以要設(shè)置。 分片是指將數(shù)據(jù)拆分,拆分后存放在不同的機(jī)器上的過程,以此來降低單個(gè)服務(wù)器的壓力,同時(shí)也解決單個(gè)服務(wù)器硬盤空間不足的問題,讓我們可以用廉價(jià)的機(jī)器實(shí)現(xiàn)高性能的數(shù)據(jù)架構(gòu)。有的小伙伴不理解分片和副本集的差異,一言...

    Nino 評(píng)論0 收藏0
  • TiDB和MongoDB分片集群架構(gòu)比較

    摘要:此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。分片集群通過就可以實(shí)現(xiàn)負(fù)載均衡,不需要單獨(dú)部署負(fù)載均衡組件。是一個(gè)集群,通過協(xié)議保持?jǐn)?shù)據(jù)的一致性副本數(shù)量可配置,默認(rèn)保存三副本,并通過做負(fù)載均衡調(diào)度。 此文已由作者溫正湖授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)。 最近閱讀了TiDB源碼的說明文檔,跟MongoDB的分片集群做了下簡(jiǎn)單對(duì)比。 首先展示TiDB的整體架構(gòu) ...

    KaltZK 評(píng)論0 收藏0
  • UCloud MongoDB 如何應(yīng)對(duì)高考填志愿的上億流量高峰

    摘要:優(yōu)志愿張海鵬宋體背景宋體每年月下旬到月下旬期間是高考填志愿的高峰期,也是優(yōu)志愿后端面臨大流量高并發(fā)請(qǐng)求的業(yè)務(wù)高峰期。對(duì)于優(yōu)志愿讀多寫少的場(chǎng)景及其業(yè)務(wù)高峰期,用戶可以按需增刪節(jié)點(diǎn),更好地實(shí)現(xiàn)讀取性能的擴(kuò)展。 隨著用戶規(guī)模的增長(zhǎng),數(shù)據(jù)庫(kù)的壓力也在成倍增加。面對(duì)大流量、高并發(fā),UCloud MongoDB 做到了高效,并展現(xiàn)出了更好的性能體驗(yàn)。 —— 優(yōu)志愿 CTO 張海鵬 背景...

    cppprimer 評(píng)論0 收藏0
  • MongoDB分片部署實(shí)踐

    摘要:本篇記錄高可用模式部署步驟,其他部署方式見上一篇。首先準(zhǔn)備機(jī)器,我這里是在公司云平臺(tái)創(chuàng)建了三臺(tái),分別是,,。分片的選擇策略可以參考官方文檔。 本篇記錄MongoDB高可用模式部署步驟,其他部署方式見上一篇。 首先準(zhǔn)備機(jī)器,我這里是在公司云平臺(tái)創(chuàng)建了三臺(tái)DB server,ip分別是10.199.144.84,10.199.144.89,10.199.144.90。 分別安裝mong...

    孫淑建 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<