您好,登錄后才能下訂單哦!
日志原理:
WiredTiger使用檢查點(diǎn)在磁盤上提供一致性數(shù)據(jù)視圖,并允許MongoDB從上一個(gè)檢查點(diǎn)恢復(fù)。 但是,如果MongoDB在檢查點(diǎn)之間意外退出,則需要使用日志記錄來恢復(fù)上次檢查點(diǎn)之后發(fā)生的信息。
通過日志記錄,恢復(fù)過程如下:
查看數(shù)據(jù)文件以查找上一個(gè)檢查點(diǎn)的標(biāo)識(shí)符。
在日志文件中搜索與上一個(gè)檢查點(diǎn)的標(biāo)識(shí)符相匹配的記錄。
自上次檢查點(diǎn)以來,在日志文件中應(yīng)用這些操作。
MongoDB WiredTiger 首先使用內(nèi)存緩沖來存儲(chǔ)日志記錄,直到超過128 kB,才寫入磁盤。根據(jù)以下時(shí)間間隔或條件,WiredTiger將緩沖的日記記錄同步到磁盤:
3.2版新增功能:每50毫秒。
版本3.6中:MongoDB 設(shè)置檢查點(diǎn)以60秒的間隔執(zhí)行。
如果寫入操作包含 j:true 的寫入指令,則WiredTiger會(huì)強(qiáng)制WiredTiger日志文件同步。
由于MongoDB使用的日志文件大小限制為100 MB,WiredTiger大約每隔100 MB創(chuàng)建一個(gè)新的日志文件。當(dāng)WiredTiger創(chuàng)建新的日志文件時(shí),WiredTiger將同步前一個(gè)日志文件。
注意: 在寫操作之間,當(dāng)日志記錄保留在WiredTiger緩沖區(qū)中時(shí),在mongod強(qiáng)制關(guān)閉時(shí)更新可能會(huì)丟失。
日志方式:
MongoDB 里的 journal 行為 主要由2個(gè)參數(shù)控制, storage.journal.enabled 決定是否開啟journal, storage.journal.commitInternalMs 決定 journal 刷盤的間隔( journal操作的最大間隔時(shí)間。可以是2-300ms之間的值,低的值有助于持久化,但是會(huì)增加磁盤的額外負(fù)擔(dān)。
如果journal和數(shù)據(jù)文件在同一磁盤上,默認(rèn)為100ms。如果在不同的磁盤上為30ms。
如果強(qiáng)制mongod提交日志文件,可以指定j:true,指定后,時(shí)間變?yōu)樵瓉淼娜种? ),默認(rèn)為100ms,用戶也可以通過寫入時(shí)指定 writeConcern 為 {j: ture} 來每次寫入時(shí)都確保 journal 刷盤。
日志切換:
use admin
db.runCommand( { logRotate : 1 } )
后者:
1 3 * * * killall -SIGUSR1 mongod
3 3 * * * killall -SIGUSR1 mongos
15 3 * * * /usr/bin/find /data/mongodb/data/prod_shard2_1/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;
19 3 * * * /usr/bin/find /data/mongodb/data/prod_configdb2/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;
21 3 * * * /usr/bin/find /data/mongodb/data/prod_mongos/log/ -name "mongodb.log.*" -mtime +30 -exec rm -fr {} \;
日志級別在配置文件中的加入:
use admin
db.runCommand( {
setParameter: 1,
logComponentVerbosity: {
verbosity: 1,
query: {
verbosity: 2
},
storage: {
verbosity: 2,
journal: {
verbosity: 1
}
}
}
} )
或者:
verbose&&quiet
mongodb默認(rèn)情況下日志文件非常大,每秒都會(huì)記錄大量的connection等調(diào)試信息,這對于我們管理日志和定位 錯(cuò)誤有很大影響,需要修改它的默認(rèn)日志級別。
mongodb的日志級別在配置文件中的verbose和quiet參數(shù)決定。verbose表示會(huì)打印debug信息,范例配置如下
verbose=true
vv=true
注:這里的vv表示debug級別,有vv-vvvvv,v越多則記錄的日志信息越詳細(xì)。
而如果設(shè)置了quiet=true參數(shù),表示安靜地輸出,即不會(huì)再有debug信息,日志中只會(huì)打印一些關(guān)鍵的信息,比如 自動(dòng)故障切換,系統(tǒng)錯(cuò)誤等信息,相當(dāng)于error log。這時(shí)需要注釋掉verbose參數(shù)。范例配置如下:
#verbose=true
quiet=true
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。