- 求職 : Linux運(yùn)維
- 論壇徽章:
- 203
|
數(shù)據(jù)庫(kù)擴(kuò)容要趁早再趁早
背景
公司有部門(mén)春節(jié)期間做活動(dòng), 產(chǎn)品中使用了 MonogDB 做彈幕消息的收發(fā)和一些元信息的存儲(chǔ), 由于預(yù)計(jì)活動(dòng)進(jìn)行時(shí)會(huì)有流量上漲的情況, 需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行擴(kuò)容
在擴(kuò)容前, 數(shù)據(jù)庫(kù)有4個(gè)分片, 每個(gè)分片有幾百 G 數(shù)據(jù), 每個(gè)分片大概有5000個(gè)數(shù)據(jù)塊, 總共有2w 個(gè)數(shù)據(jù)塊
擴(kuò)容為4分片擴(kuò)8分片, 活動(dòng)上線時(shí)間在兩天后
當(dāng)時(shí)使用的 MongoDB 版本為3.0
問(wèn)題
在3.0的版本下, 數(shù)據(jù)塊的遷移是全局串行的, 即同一時(shí)刻只能有一個(gè)數(shù)據(jù)塊在遷移, 在線上開(kāi)啟了遷移, 進(jìn)行了速度測(cè)試, 平均每個(gè)數(shù)據(jù)塊的遷移時(shí)間為5分鐘左右, 4分片擴(kuò)8分片需要移動(dòng)大約1w 個(gè)分片, 耗費(fèi)的時(shí)間為10000 * 5 = 1個(gè)月
分析
MongoDB 在3.2以及之前的版本對(duì)數(shù)據(jù)的自動(dòng)均衡做了全局串行處理, 在片數(shù)較多時(shí)不能發(fā)揮均衡的完整作用
為在指定時(shí)間內(nèi)完成數(shù)據(jù)庫(kù)擴(kuò)容, 需要升級(jí)到增加了并行均衡的3.4版本
升級(jí)過(guò)程
按照官網(wǎng)要求, 3.0到3.4的升級(jí)不能直接進(jìn)行, 需要先升級(jí)到3.2, 再升級(jí)到3.4
升級(jí)順序?yàn)?mongod, config, mongos, 需要注意的有兩點(diǎn):
1. config 升級(jí)為復(fù)制集的過(guò)程較為繁瑣, 參考config 升級(jí)復(fù)制集文檔
2. 新版本 mongos 可能不能正確連接舊版本 mongod, 所以升級(jí)過(guò)程中, mongos 應(yīng)該最后升級(jí)
效果
升級(jí)完成后, 首先看了一下單個(gè)數(shù)據(jù)塊的遷移速度, 速度提升非常明顯, 單個(gè)數(shù)據(jù)塊的遷移時(shí)間從5分鐘縮短到30s 左右, 有10倍的提升
再考慮到分片之間的并行遷移, 實(shí)際均衡時(shí)間由1個(gè)月降低到10000 * 0.5 / 4 = 18小時(shí)
在升級(jí)完成的一天內(nèi), 雖然遇到了一點(diǎn)別的問(wèn)題, 數(shù)據(jù)庫(kù)依舊完成了擴(kuò)容
監(jiān)控
mongodb 提供的 ops manager 監(jiān)控, 比較方便可以搭建起來(lái)
在均衡過(guò)程中, 請(qǐng)求耗時(shí)增長(zhǎng)可以接受
bd1fa2051919ba358243591f0
升級(jí)后的問(wèn)題
有幾個(gè)小問(wèn)題
在遷移過(guò)程中, 出現(xiàn)了遇到 jumbo chunk 之后剩余的 chunk 不再繼續(xù)遷移的問(wèn)題, 具體表現(xiàn)是: set1中存在較多的 jumbo chunk( 較大的數(shù)據(jù)塊), balancer 不斷嘗試遷移, 但是總是在連續(xù)兩個(gè) jumbo chunk 之間嘗試, 在日志中不停打印類(lèi)似的日志:
2017-01-20T11:38:21.030+0800 W SHARDING [conn4192015] possible low cardinality key detected in * - key is { uk: 247332434 }
2017-01-20T11:38:43.070+0800 W SHARDING [conn4192015] possible low cardinality key detected in * - key is { uk: 247332439 }
2017-01-20T11:39:07.806+0800 W SHARDING [conn4192015] possible low cardinality key detected in * - key is { uk: 247332434 }
線下復(fù)現(xiàn)未能成功, 線上一直存在問(wèn)題
后使用腳本運(yùn)行 movechunk 命令完成均衡
ops manager 的 ip 識(shí)別問(wèn)題, 在進(jìn)行監(jiān)控時(shí), ops manager 會(huì)將 ip 轉(zhuǎn)化為域名進(jìn)行記錄處理, 但是存在的問(wèn)題是, ip 與域名的映射并不總是完全準(zhǔn)確的, 在映射錯(cuò)誤的機(jī)器上使用 host 命令可以得到正確的結(jié)果, 導(dǎo)致的問(wèn)題是, ops manager 對(duì)于映射錯(cuò)誤的機(jī)器不能得到最新的數(shù)據(jù)
總體來(lái)說(shuō), 升級(jí)3.4版本對(duì)于均衡的收益是數(shù)量級(jí)的差異, 帶來(lái)的效果十分明顯, 對(duì)于均衡有需求的場(chǎng)景推薦升級(jí)
|
|