MongoDB更改oplog大小-創(chuàng)新互聯(lián)

【問(wèn)題說(shuō)明】

       在生產(chǎn)環(huán)境新增secondary:10.9.197.6:27017 ,數(shù)據(jù)量140G,卻同步了一天還未追上數(shù)據(jù),通過(guò)如下方式查看同步情況:

成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,先為項(xiàng)城等服務(wù)建站,項(xiàng)城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為項(xiàng)城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

查看主從復(fù)制狀態(tài)命令,以下兩種方式結(jié)果是一致的:

  • 方式一:

use admin
db.runCommand( { replSetGetStatus : 1 } )

指定的值不會(huì)影響命令的輸出。此命令提供的數(shù)據(jù)源自于包含在由副本集的其他成員發(fā)送到當(dāng)前實(shí)例的心跳中的數(shù)據(jù)。由于心跳的頻率,這些數(shù)據(jù)可能是幾秒鐘過(guò)期。詳情請(qǐng)參考官檔:https://docs.mongodb.com/manual/reference/command/replSetGetStatus/

  • 方式二:

rs.status()


      查看復(fù)制狀態(tài),發(fā)現(xiàn)狀態(tài)是"stateStr" : "RECOVERING"。信息為"infoMessage" : "could not find member to sync from",使用 rs.syncFrom("10.9.161.130:27017")也無(wú)法讓其繼續(xù)正常同步。具體信息如下:

  • 方法一:停止應(yīng)用,這樣主庫(kù)不會(huì)有操作,就不會(huì)使得oplog window小于主庫(kù)的操作。
  • 方法二:調(diào)大oplog大小
  • 如果不能停庫(kù)的情況下,顯然方法一是不合適的,應(yīng)該選擇方法二:調(diào)大oplog大小


    修改oplog大小


    方法1:不停服務(wù)情況下

             參考官檔:https://docs.mongodb.com/v3.2/tutorial/change-oplog-size/

     

    1 Restart a Secondary in Standalone Mode on a Different Port

           1) db.shutdownServer()

           2) 用其他端口以單機(jī)模式重新啟動(dòng)該實(shí)例,不使用--replSet參數(shù)

              方法一:根據(jù)生產(chǎn)環(huán)境參數(shù)文件設(shè)置啟動(dòng)mongo,即將非默認(rèn)情況參數(shù)進(jìn)行指定

              如下參數(shù)根據(jù)生產(chǎn)參數(shù)文件來(lái)設(shè)置,情況不一:   

           /data/servers/app/mongodb-3.2.8/bin/mongod --port 37017 --dbpath /data/servers/data/mg27017/data/ --directoryperdb  --wiredTigerDirectoryForIndexes   --nojournal  &

             該方法較為麻煩,建議選擇下面的方法二:

            方法二:將參數(shù)文件進(jìn)行修改:注釋replSet部分,修改port為37017,然后以改完后的控制文件來(lái)啟動(dòng)mongo

             /data/servers/app/mongodb-3.2.8/bin/mongod -f /data/servers/data/mg27017/mongod.conf

              下面截圖顯示的是只要更改的部分,端口號(hào)改為任意的沒(méi)被占用的即可,此處改為37017
            MongoDB更改oplog大小


               netstat -anp | grep $port查看端口號(hào)是否已啟動(dòng)
            MongoDB更改oplog大小


     

    2 Create a Backup of the Oplog (Optional)

               在單機(jī)模式(非replSet方式)下備份該37017端口已存在的oplog,oplog對(duì)應(yīng)的集合為local數(shù)據(jù)庫(kù)下的oplog.rs。下面為具體命令:

            /data/servers/app/mongodb-3.2.8/bin/mongodump --db local --collection 'oplog.rs' --port 37017 --host=127.0.0.1 -uroot -p111111111 --authenticationDatabase=admin -o  /data/servers/data/mg27017/dump

    【命令說(shuō)明】

           -o(--out)是制定輸出目錄。該目錄需要執(zhí)行備份的用戶擁有相應(yīng)權(quán)限,不用提前創(chuàng)建

           --authenticationDatabase是用戶名和密碼對(duì)應(yīng)的認(rèn)證數(shù)據(jù)庫(kù),如果環(huán)境不需要密碼認(rèn)證,則-u、-p、--authenticationDatabase不需要指定


    3 Recreate the Oplog with a New Size and a Seed Entry

             保存oplog中的最后一個(gè)條目

             登陸local數(shù)據(jù)庫(kù)

                  use local

             定義對(duì)象:db

                  db = db.getSiblingDB('local')

             使用temp集合來(lái)保存最后一個(gè)條目,這個(gè)集合保證里面沒(méi)有數(shù)據(jù):db.temp.drop(),在刪除前確認(rèn)下該數(shù)據(jù)是否可以刪除,如果不可以刪除,使用另一個(gè)集合也是一樣的。此處temp沒(méi)有數(shù)據(jù)
           MongoDB更改oplog大小


             使用db.collection.save() 方法:找到自然順序的逆向排序后的最后一個(gè)條目,并將其保存到一個(gè)臨時(shí)的集合里面

                 db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )

             插入后結(jié)果為
            MongoDB更改oplog大小



    4 Remove the Existing Oplog Collection

            刪除local下的oplog.rs集合,結(jié)果返回為true

                     db = db.getSiblingDB('local')
                       db.oplog.rs.drop()
            MongoDB更改oplog大小



    5 Create a New Oplog

            創(chuàng)建oplog.rs固定集合,設(shè)置大小為4G,該大小根據(jù)實(shí)際情況來(lái)定

                 db.runCommand( { create: "oplog.rs", capped: true, size: (4* 1024 *1024*1024) } )


    6 Insert the Last Entry of the Old Oplog into the New Oplog

            將之前保存的oplog的最后一個(gè)條目插入到新的oplog里

                    db.oplog.rs.save( db.temp.findOne() )
           MongoDB更改oplog大小


           跟temp結(jié)果比對(duì)是一致的


    7 Restart the Member

           關(guān)閉單機(jī)實(shí)例,要用admin才能關(guān)閉

                  use admin

                db.shutdownServer()

          將之前更改的操作還原,啟動(dòng)mongo

                 /data/servers/app/mongodb-3.2.8/bin/mongod -f /data/servers/data/mg27017/mongod.conf

           查看主從復(fù)制狀態(tài),確保狀態(tài)正常

                db.runCommand( { replSetGetStatus : 1 } )或者rs.status()


    8 Repeat Process for all Members that may become Primary

           對(duì)要更改oplog大小的所有secondary成員重復(fù)此過(guò)程。

    9 Change the Size of the Oplog on the Primary

          對(duì)于主庫(kù),需要先將主庫(kù)切成從庫(kù),再重復(fù)上述oplog調(diào)整過(guò)程

    • 方法一:

                  rs.stepDown() 

    • 方法二:

                  config=rs.conf()

                  config.members[2].priority = 6

                  rs.reconfig(config)

                       此處數(shù)字2為rs.conf()里要變成主庫(kù)的secondary所在的次序,從0開(kāi)始算,與id無(wú)關(guān)。priority數(shù)字大即變成主庫(kù)。舊的主庫(kù)調(diào)整完后,記得要將priority變?yōu)?。


    方法2:停服務(wù)情況下     

        該方法操作最為簡(jiǎn)便,但是需要停服務(wù)。具體步驟為

    1 關(guān)閉mongod實(shí)例(所有節(jié)點(diǎn))

             use admin

           db.shutdownServer()

     

    2 刪除local數(shù)據(jù)庫(kù)下的所有文件(PRIMARY節(jié)點(diǎn))

           rm -rf /data/servers/data/mg27017/local/*


    3 刪除mongo數(shù)據(jù)目錄(secondary)

           如果不確定誰(shuí)是主庫(kù),就mv下數(shù)據(jù)目錄

           rm -rf /data/servers/data/mg27017/data/*


    4 修改所有節(jié)點(diǎn)配置文件(oplogsize)

            oplogSizeMB: 4096


    5 重啟所有節(jié)點(diǎn)mongod

            /data/servers/app/mongodb-3.2.8/bin/mongod -f /data/servers/data/mg27017/mongod.conf


          該方法會(huì)導(dǎo)致主庫(kù)如果異常,沒(méi)有從庫(kù)可切換,不建議使用該方式


    【小節(jié)】

           設(shè)置多大的oplog合適呢,可以根據(jù)現(xiàn)在數(shù)據(jù)大小,io和大致的oplog window時(shí)間預(yù)估一個(gè)合適的大小

    rs.printReplicationInfo()

      log length start to end: 當(dāng)oplog寫滿時(shí)可以理解為時(shí)間窗口

      oplog last event time: 最后一個(gè)操作發(fā)生的時(shí)間





    分享名稱:MongoDB更改oplog大小-創(chuàng)新互聯(lián)
    轉(zhuǎn)載來(lái)于:http://bm7419.com/article28/cdgojp.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)網(wǎng)站排名、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)、關(guān)鍵詞優(yōu)化、網(wǎng)站維護(hù)

    廣告

    聲明:本網(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)

    外貿(mào)網(wǎng)站制作