亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1493 | 回復(fù): 0
打印 上一主題 下一主題

[MongoDB] 大量的集合為何導(dǎo)致Secondary無法同步? [復(fù)制鏈接]

求職 : Linux運(yùn)維
論壇徽章:
203
拜羊年徽章
日期:2015-03-03 16:15:432015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:182015年亞洲杯之約旦
日期:2015-04-05 20:08:292015年亞洲杯之澳大利亞
日期:2015-04-09 09:25:552015年亞洲杯之約旦
日期:2015-04-10 17:34:102015年亞洲杯之巴勒斯坦
日期:2015-04-10 17:35:342015年亞洲杯之日本
日期:2015-04-16 16:28:552015年亞洲杯紀(jì)念徽章
日期:2015-04-27 23:29:17操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-06-06 22:20:00操作系統(tǒng)版塊每日發(fā)帖之星
日期:2015-06-09 22:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-07-18 09:58 |只看該作者 |倒序?yàn)g覽
最近遇到一個(gè)user case,因?yàn)榧蠑?shù)量太多,導(dǎo)致Secondary節(jié)點(diǎn)無法進(jìn)行initial sync(主備同步的第一步,可理解為從Primary上全量拷貝數(shù)據(jù))。

副本集使用wiredtiger存儲(chǔ)引擎,一共60,000+集合,平均每個(gè)集合4個(gè)索引,wiredtiger的集合及每個(gè)索引都對應(yīng)一個(gè)單獨(dú)的文件來存儲(chǔ),數(shù)據(jù)目錄下總共300,000+文件,listDatabases命令執(zhí)行時(shí),會(huì)遍歷所有DB的每個(gè)集合,獲取集合及其索引文件占用的存儲(chǔ)空間信息,實(shí)現(xiàn)類似如下的偽代碼。

listDatabases() {
    dbNames = getAllDatabaseNames();
    for db in dbNames {
        sizeOnDisk = 0;
        for coll in db.getAllColletions() {
                size += coll.size();
                for index in coll.getAllIndexes() {
                    size += index.size();
                }   
        }
        addToOutput(db, size);
    }      
}
使用wiredtiger引擎時(shí),獲取集合及索引文件大小信息時(shí),需要打開一個(gè)特殊的cursor來讀取,整個(gè)listDatabases需要遍歷300,000+個(gè)文件來逐個(gè)獲取大小信息,導(dǎo)致整個(gè)命令的執(zhí)行開銷很大,總耗時(shí)在30s以上。

Secondary在執(zhí)行initial sync時(shí),其過程類似如下

刪除本地除local外的所有數(shù)據(jù)庫
執(zhí)行l(wèi)istDatabases命令,獲取同步源上所有DB的列表
針對每個(gè)DB,調(diào)用listCollections獲取所有集合信息,并遍歷所有集合,同步集合內(nèi)的文檔并建立索引。
……
initial sync執(zhí)行時(shí),設(shè)置了socket timeout為30s,而listDatabases的執(zhí)行時(shí)間是超過30s的,導(dǎo)致同步在listDatabases時(shí)就一直超時(shí)失敗,10次重試后仍然失敗,Secondary進(jìn)程就直接退出了。

2016-06-27T20:59:46.494+0800 I REPL     [rsSync] ******
2016-06-27T20:59:46.495+0800 I REPL     [rsSync] initial sync pending
2016-06-27T20:59:46.499+0800 I REPL     [rsSync] no valid sync sources found in current replset to do an initial sync
2016-06-27T20:59:47.499+0800 I REPL     [rsSync] initial sync pending
2016-06-27T20:59:47.517+0800 I REPL     [rsSync] initial sync drop all databases
2016-06-27T20:59:47.517+0800 I STORAGE  [rsSync] dropAllDatabasesExceptLocal 1
2016-06-27T20:59:47.517+0800 I REPL     [rsSync] initial sync clone all databases
2016-06-27T21:00:17.517+0800 I NETWORK  [rsSync] Socket recv() timeout  10.182.4.106:27017
2016-06-27T21:00:17.517+0800 I NETWORK  [rsSync] SocketException: remote: (NONE):0 error: 9001 socket exception [RECV_TIMEOUT] server [10.1.1.6:27017]
2016-06-27T21:00:17.519+0800 E REPL     [rsSync] 6 network error while attempting to run command 'listDatabases' on host '10.1.1.6:27017'
2016-06-27T21:00:17.519+0800 E REPL     [rsSync] initial sync attempt failed, 9 attempts remaining
問題已反饋給官方團(tuán)隊(duì),詳情見SERVER-24948,在3.4版本里會(huì)去掉socket timeout來解決這個(gè)問題。

實(shí)際上,同步過程中l(wèi)istDatabases只需要獲取所有DB的名稱即可,并不需要size信息,所以我們的想法是給listDatabases命令加一個(gè) {nameOnly: true}的選項(xiàng),讓命令只返回所有DB的名稱信息,這樣整個(gè)開銷會(huì)很小,SERVER-3181也遇到類似問題,提了相同的解決思路,我們會(huì)在MongoDB云數(shù)據(jù)庫里加上這個(gè)選項(xiàng)用于主備同步,github pull request。

使用MongoDB時(shí),建議用戶還是合理的控制下集合數(shù)量(集合數(shù)量太多,很可能存儲(chǔ)設(shè)計(jì)上也有問題,得好好review下),集合數(shù)量一旦大了,有可能面臨各種問題,就如同上述的場景l(fā)istDatabases耗時(shí)長,想監(jiān)控?cái)?shù)據(jù)庫的容量使用情況都難。

上述問題其他的解決方案

Primary(同步源)上使用mmapv1引擎,內(nèi)存足夠的情況下,listDatabases的開銷要更小些。
Secondary同步時(shí)不設(shè)置或設(shè)置更長的socket超時(shí)時(shí)間
加新節(jié)點(diǎn)上,將Primary的數(shù)據(jù)拷貝到新的節(jié)點(diǎn),跳過initial sync
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP