小編給大家分享一下MONGO集群修改linux主機(jī)時(shí)間后的影響有哪些,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元興文做網(wǎng)站,已為上家服務(wù),為興文各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575生產(chǎn)環(huán)境是 一主一從一仲裁3分片的集群,現(xiàn)在發(fā)現(xiàn)其中一個(gè)節(jié)點(diǎn)比當(dāng)前時(shí)間大了好幾天,后使用NTP將時(shí)間往回調(diào)整副本集上。
原來(lái)時(shí)間是5月3日,當(dāng)前是 4月26日,對(duì)此進(jìn)行了調(diào)整。
[root@cwdtest1 bin]# date
Fri May 3 13:20:31 CST 2019
[root@cwdtest1 bin]# ntpdate -u 10.205.34.171
26 Apr 12:39:23 ntpdate[14568]: step time server 10.205.34.171 offset -607507.747595 sec
[root@cwdtest1 bin]# hwclock --systohc
調(diào)整后當(dāng)前的時(shí)間:
[root@cwdtest1 bin]# date
Fri Apr 26 12:39:31 CST 2019
當(dāng)完成調(diào)整時(shí)間之后,發(fā)現(xiàn)兩個(gè)問(wèn)題:
1.副本集無(wú)法同步新的oplog,由此出現(xiàn)了延遲
shard2:PRIMARY> db.printSlaveReplicationInfo();
source: 10.3.252.231:27002
syncedTo: Fri May 03 2019 13:24:23 GMT+0800 (CST)
8 secs (0 hrs) behind the primary
2. 查看oplog的 tLast 時(shí)間比當(dāng)前的大
shard2:PRIMARY> db.getReplicationInfo()
{
"logSizeMB" : 1383.3396482467651,
"usedMB" : 154.49,
"timeDiff" : 17015711,
"timeDiffHours" : 4726.59,
"tFirst" : "Thu Oct 18 2018 14:49:20 GMT+0800 (CST)",
"tLast" : "Fri May 03 2019 13:24:31 GMT+0800 (CST)",
"now" : "Fri Apr 26 2019 13:57:01 GMT+0800 (CST)"
}
shard2:PRIMARY> db.printReplicationInfo()
configured oplog size: 1383.3396482467651MB
log length start to end: 17015711secs (4726.59hrs)
oplog first event time: Thu Oct 18 2018 14:49:20 GMT+0800 (CST)
oplog last event time: Fri May 03 2019 13:24:31 GMT+0800 (CST)
now: Fri Apr 26 2019 15:46:27 GMT+0800 (CST)
查看db.getReplicationInfo中,我們找出tLast 和now兩個(gè)時(shí)間是從哪里得到的?
shard2:PRIMARY> db.getReplicationInfo function () { var localdb = this.getSiblingDB("local"); var result = {}; var oplog; var localCollections = localdb.getCollectionNames(); if (localCollections.indexOf('oplog.rs') >= 0) { oplog = 'oplog.rs'; } else if (localCollections.indexOf('oplog.$main') >= 0) { oplog = 'oplog.$main'; } else { result.errmsg = "neither master/slave nor replica set replication detected"; return result; } var ol = localdb.getCollection(oplog); var ol_stats = ol.stats(); if (ol_stats && ol_stats.maxSize) { result.logSizeMB = ol_stats.maxSize / (1024 * 1024); } else { result.errmsg = "Could not get stats for local." + oplog + " collection. " + "collstats returned: " + tojson(ol_stats); return result; } result.usedMB = ol_stats.size / (1024 * 1024); result.usedMB = Math.ceil(result.usedMB * 100) / 100; var firstc = ol.find().sort({$natural: 1}).limit(1); var lastc = ol.find().sort({$natural: -1}).limit(1); if (!firstc.hasNext() || !lastc.hasNext()) { result.errmsg = "objects not found in local.oplog.$main -- is this a new and empty db instance?"; result.oplogMainRowCount = ol.count(); return result; } var first = firstc.next(); var last = lastc.next(); var tfirst = first.ts; var tlast = last.ts; if (tfirst && tlast) { tfirst = DB.tsToSeconds(tfirst); tlast = DB.tsToSeconds(tlast); result.timeDiff = tlast - tfirst; result.timeDiffHours = Math.round(result.timeDiff / 36) / 100; result.tFirst = (new Date(tfirst * 1000)).toString(); result.tLast = (new Date(tlast * 1000)).toString(); result.now = Date(); } else { result.errmsg = "ts element not found in oplog objects"; } return result; }
從以上可以看出:
var ol = localdb.getCollection(oplog);
var lastc = ol.find().sort({$natural: -1}).limit(1);
var last = lastc.next();
var tlast = last.ts;
result.tLast = (new Date(tlast * 1000)).toString();
result.now = Date();
tLast 的時(shí)間是獲取oplog.rs 集合中最后一條數(shù)據(jù)的ts時(shí)間。
Now 的時(shí)間是調(diào)用 Date()函數(shù)獲取當(dāng)前時(shí)間。
于是,此時(shí)我懷疑副本集 無(wú)法同步,是因?yàn)閛plog中存放比當(dāng)前時(shí)間大的日志,而當(dāng)調(diào)整時(shí)間后新生成的oplog日志記錄并不是最新的,因此副本集在對(duì)比時(shí)發(fā)現(xiàn)最新的日志一直不變,便無(wú)法同步。
大概說(shuō)下mongodb同步的機(jī)制(借鑒網(wǎng)絡(luò)):
1.執(zhí)行寫(xiě)語(yǔ)句時(shí),在primary上完成寫(xiě)操作
2.在primary上記錄一條oplog日志,日志中包含一個(gè)ts字段,值為寫(xiě)操作執(zhí)行的時(shí)間,比如本例中記為t
3.secondary從primary拉取oplog,獲取到剛才那一次寫(xiě)操作的日志
4.secondary按獲取到的日志執(zhí)行相應(yīng)的寫(xiě)操作
5.執(zhí)行完成后,secondary再獲取新的日志,其向primary上拉取oplog的條件為{ts:{$gt:t}}
6.primary此時(shí)收到secondary的請(qǐng)求,了解到secondary在請(qǐng)求時(shí)間大于t的寫(xiě)操作日志,所以他知道操作在t之前的日志都已經(jīng)成功執(zhí)行了
于是,我在primary 執(zhí)行一次插入測(cè)試,來(lái)驗(yàn)證懷疑。
shard2:PRIMARY> use shtest
switched to db shtest
shard2:PRIMARY> db.coll.insert( {x:3339876})
WriteResult({ "nInserted" : 1 })
查詢主節(jié)點(diǎn)最后一條操作記錄:
rs.debug.getLastOpWritten()
從以上可以看出:
var ol = localdb.getCollection(oplog);
var lastc = ol.find().sort({$natural: -1}).limit(1);
var last = lastc.next();
var tlast = last.ts;
result.tLast = (new Date(tlast * 1000)).toString();
result.now = Date();
tLast 的時(shí)間是獲取oplog.rs 集合中最后一條數(shù)據(jù)的ts時(shí)間。
Now 的時(shí)間是調(diào)用 Date()函數(shù)獲取當(dāng)前時(shí)間。
于是,此時(shí)我懷疑副本集 無(wú)法同步,是因?yàn)閛plog中存放比當(dāng)前時(shí)間大的日志,而當(dāng)調(diào)整時(shí)間后新生成的oplog日志記錄并不是最新的,因此副本集在對(duì)比時(shí)發(fā)現(xiàn)最新的日志一直不變,便無(wú)法同步。
大概說(shuō)下mongodb同步的機(jī)制(借鑒網(wǎng)絡(luò)):
1.執(zhí)行寫(xiě)語(yǔ)句時(shí),在primary上完成寫(xiě)操作
2.在primary上記錄一條oplog日志,日志中包含一個(gè)ts字段,值為寫(xiě)操作執(zhí)行的時(shí)間,比如本例中記為t
3.secondary從primary拉取oplog,獲取到剛才那一次寫(xiě)操作的日志
4.secondary按獲取到的日志執(zhí)行相應(yīng)的寫(xiě)操作
5.執(zhí)行完成后,secondary再獲取新的日志,其向primary上拉取oplog的條件為{ts:{$gt:t}}
6.primary此時(shí)收到secondary的請(qǐng)求,了解到secondary在請(qǐng)求時(shí)間大于t的寫(xiě)操作日志,所以他知道操作在t之前的日志都已經(jīng)成功執(zhí)行了
于是,我在primary 執(zhí)行一次插入測(cè)試,來(lái)驗(yàn)證懷疑。
shard2:PRIMARY> use shtest
switched to db shtest
shard2:PRIMARY> db.coll.insert( {x:3339876})
WriteResult({ "nInserted" : 1 })
查詢主節(jié)點(diǎn)最后一條操作記錄:
rs.debug.getLastOpWritten()
查詢副本節(jié)點(diǎn)上的最后條操作記錄:
發(fā)現(xiàn)此時(shí)數(shù)據(jù)可以同步到副本集上,即說(shuō)明oplog日志不存在不同步的問(wèn)題,也就是實(shí)際上集群的同步是正常的。
當(dāng)時(shí)發(fā)現(xiàn),每條oplog記錄的ts 一直保持著調(diào)整主機(jī)時(shí)間前的時(shí)間,5月3日的時(shí)間,且一直不變。關(guān)于原因,就需要進(jìn)一步分析了。
看完了這篇文章,相信你對(duì)“MONGO集群修改linux主機(jī)時(shí)間后的影響有哪些”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!
文章題目:MONGO集群修改linux主機(jī)時(shí)間后的影響有哪些-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://aaarwkj.com/article28/hcsjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容