遠(yuǎn)程辦公”">國(guó)務(wù)院聯(lián)防聯(lián)控機(jī)制新聞發(fā)布會(huì),多次肯定“云辦公”、“遠(yuǎn)程辦公”
690
2025-03-31
云服務(wù)商Mongodb內(nèi)核版本升級(jí)的初步想法
前言:
Mongodb 3.6.0正式版本 于2017年12月 ?1日發(fā)布
Mongodb 3.4.0 正式版本 于2016年11月26日發(fā)布
Mongodb 3.2.0 正式版本 于2015年12月 ?4日發(fā)布
從上面可以看出Mongodb保持一年一個(gè)大版本,而每個(gè)大版本下面的小版本基本上就是一個(gè)月一個(gè)迭代版本用于解決各個(gè)bug. Mongodb公司2017年10月在納斯達(dá)克上市,作為上市公司相對(duì)其他的開源數(shù)據(jù)庫(kù)有更多的金錢和人力去發(fā)展Mongodb,估計(jì)后面Mongodb版本迭代的速度會(huì)更快,那作為Mongodb云服務(wù)商我們?cè)鯓尤ミm應(yīng)這種版本的快速迭代呢?我們先分析面對(duì)的問題,然后再提出相應(yīng)的解決方案,當(dāng)然方案不完美,只是一些初步的想法。
云服務(wù)商Mongodb已上線版本面對(duì)的問題:
1. 社區(qū)小版本重大bug的修復(fù)
對(duì)于社區(qū)某個(gè)版本的重大bug,Mongodb官方的建議一般是升級(jí)你的Mongodb到此大版本下的最新版本。由于都是相同的大版本不會(huì)存在版本兼容性問題,只需要按順序替換不同節(jié)點(diǎn)的Mongodb二進(jìn)制源碼就行,看起來so easy。但存在可能這個(gè)升級(jí)版本解決了一個(gè)重大bug但他本身卻引入或含有沒有修復(fù)的其他重大bug,那到時(shí)是不是又要升級(jí)更新版本?
2. 大版本之間的升級(jí)
當(dāng)用戶想使用新的大版本中某個(gè)新特性或者一些大版本由于過于久遠(yuǎn)不再維護(hù),就需要進(jìn)行大版本升級(jí),而大版本升級(jí)最大的問題在于非兼容特性的升級(jí),以及升級(jí)失敗后進(jìn)行降級(jí)的處理(大版本升級(jí)步驟可見文檔最后)
3.社區(qū)快速發(fā)布的大版本:
快速增長(zhǎng)的版本列表:
由于社區(qū)大版本發(fā)布速度越來越快,云服務(wù)商如果跟蹤社區(qū)大版本,那云服務(wù)商Mongodb的版本也會(huì)越來越多,用戶在選擇版本的時(shí)候也會(huì)疑惑,到底選擇哪個(gè)?維護(hù)版本需要的人手也會(huì)也來越多,有些版本可能只有極少用戶用但也需要人力進(jìn)行維護(hù)
問題總結(jié)就是:面對(duì)快速迭代的社區(qū)版本,云服務(wù)商采用什么樣的策略,在給定的人力下提供給用戶相對(duì)社區(qū)版更安全更滿足用戶需求的云服務(wù)Mongodb.
云服務(wù)商Mongodb內(nèi)核版本迭代方案
1. 確定社區(qū)大版本選擇的標(biāo)準(zhǔn)
各個(gè)大版本新增的特性在官網(wǎng)都有詳細(xì)的說明,有些大版本相對(duì)前版本可能增加了一些新的操作,完善了客戶端的可靠機(jī)制,這些雖然能提高用戶使用的易用性,但在特性或性能或安全性上沒有質(zhì)的飛越,例如3.6版本更多的是更新了客戶端的seesion機(jī)制提供因果一致性以及一些新的操作,這些新特性可能客戶使用的比較少。而在2018年夏天即將推出的4.0,一個(gè)最大的特性是支持多文檔事務(wù)機(jī)制,提供ACID,這個(gè)特性將顛覆Mongodb的弱一致性,可以看出Mongodb向金融業(yè)務(wù)這種對(duì)數(shù)據(jù)一致性要求極其嚴(yán)格領(lǐng)域提供服務(wù)的決心,這種大有質(zhì)的飛越的特性云服務(wù)商Mongodb就需要跟蹤和支持。當(dāng)然所謂質(zhì)的飛越的特性見仁見智,需要各自確定選擇標(biāo)準(zhǔn)。
2. 大版本下小版本的選擇
社區(qū)版本再發(fā)布一個(gè)大版本之后一段時(shí)間的的小版本都會(huì)存在很多的bug,有的bug會(huì)影響數(shù)據(jù)的可靠性。要達(dá)到能在現(xiàn)網(wǎng)環(huán)境使用最好要等待6個(gè)月以上,等待社區(qū)推出7-8個(gè)小版本。
3. 云服務(wù)商Mongodb小版本的快速升級(jí)
小版本出現(xiàn)嚴(yán)重bug升級(jí)最新的小版本,這種升級(jí)要解決的問題主要是快速移植以前版本修改的地方并進(jìn)行測(cè)試,而測(cè)試需要修改Mongodb本身的測(cè)試工具用以適配內(nèi)核的修改,如果有積累后面會(huì)快很多。
4. 云服務(wù)商Mongodb大版本的快速升級(jí)
對(duì)于兩個(gè)連續(xù)的版本或者可以跨版本升級(jí)的可以進(jìn)行升級(jí),這個(gè)和前面的小版本升級(jí)沒多大的區(qū)別。但面對(duì)的是嚴(yán)格要求前版本的版本號(hào)的呢?例如升級(jí)3.6版本,必須要求前一個(gè)版本是3.4,可能只能走mongoexport和mongoimport這類數(shù)據(jù)遷移工具進(jìn)行跨版本的升級(jí)。升級(jí)到新的版本后如果出現(xiàn)問題怎么進(jìn)行降級(jí)呢?降級(jí)后的版本里面含有新版本的特性怎么處理呢?這又是一塊大問題,后續(xù)再寫相關(guān)的文章來討論下。
注釋:
3.4版本副本集升級(jí)流程:
1. 當(dāng)前運(yùn)行的版本至少是3.2版本,如果不是請(qǐng)升級(jí)到3.2
2. 3.4在一些特性上有兼容性的改變,在升級(jí)3.4之前,檢查你的應(yīng)用程序是否有使用這些特性
3. 一旦升級(jí)到3.4版本,對(duì)于3.2.7以及之前的版本是無法再回退回去的
4. 首先停掉副本集中的secondary,然后將mongod二進(jìn)制替換成3.4,重啟secondary等待secondary狀態(tài)正常。
5. 連接到primary上執(zhí)行rs.stepDown(),強(qiáng)制降級(jí)選主。當(dāng)選出新的primary的時(shí)候,停掉舊primary并替換mongod二進(jìn)制為3.4.然后重啟
6. 到這一步的時(shí)候,就可以使用3.4版本(除了3.4不兼容3.2的特性),強(qiáng)烈建議運(yùn)行一段時(shí)間(不帶3.4非兼容特性),以確保不會(huì)發(fā)生降級(jí)版本的情況
7. 在admin數(shù)據(jù)庫(kù)上執(zhí)行
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } ),升級(jí)3.4完成。
華為云
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。