亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB更改oplog大小

發布時間:2020-08-07 19:05:50 來源:ITPUB博客 閱讀:156 作者:小亮520cl 欄目:關系型數據庫

【問題說明】

       在生產環境新增secondary10.9.197.6:27017 ,數據量140G,卻同步了一天還未追上數據,通過如下方式查看同步情況:

查看主從復制狀態命令,以下兩種方式結果是一致的:

  • 方式一:

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

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

  • 方式二:

rs.status()


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

  • 方法一:停止應用,這樣主庫不會有操作,就不會使得oplog window小于主庫的操作。
  • 方法二:調大oplog大小
  • 如果不能停庫的情況下,顯然方法一是不合適的,應該選擇方法二:調大oplog大小


    修改oplog大小


    方法1:不停服務情況下

             參考官檔: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) 用其他端口以單機模式重新啟動該實例,不使用--replSet參數

              方法一:根據生產環境參數文件設置啟動mongo,即將非默認情況參數進行指定

              如下參數根據生產參數文件來設置,情況不一:   

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

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

            方法二:將參數文件進行修改:注釋replSet部分,修改port為37017,然后以改完后的控制文件來啟動mongo

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

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


               netstat -anp | grep $port查看端口號是否已啟動
            MongoDB更改oplog大小


     

    2 Create a Backup of the Oplog (Optional)

               在單機模式(非replSet方式)下備份該37017端口已存在的oplog,oplog對應的集合為local數據庫下的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

    【命令說明】

           -o(--out)是制定輸出目錄。該目錄需要執行備份的用戶擁有相應權限,不用提前創建

           --authenticationDatabase是用戶名和密碼對應的認證數據庫,如果環境不需要密碼認證,則-u-p--authenticationDatabase不需要指定


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

             保存oplog中的最后一個條目

             登陸local數據庫

                  use local

             定義對象:db

                  db = db.getSiblingDB('local')

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


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

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

             插入后結果為
            MongoDB更改oplog大小



    4 Remove the Existing Oplog Collection

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

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



    5 Create a New Oplog

            創建oplog.rs固定集合,設置大小為4G,該大小根據實際情況來定

                 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的最后一個條目插入到新的oplog里

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


           跟temp結果比對是一致的


    7 Restart the Member

           關閉單機實例,要用admin才能關閉

                  use admin

                db.shutdownServer()

          將之前更改的操作還原,啟動mongo

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

           查看主從復制狀態,確保狀態正常

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


    8 Repeat Process for all Members that may become Primary

           對要更改oplog大小的所有secondary成員重復此過程。


    9 Change the Size of the Oplog on the Primary

          對于主庫,需要先將主庫切成從庫,再重復上述oplog調整過程

    • 方法一:

                  rs.stepDown() 

    • 方法二:

                  config=rs.conf()

                  config.members[2].priority = 6

                  rs.reconfig(config)

                       此處數字2為rs.conf()里要變成主庫的secondary所在的次序,從0開始算,與id無關。priority數字最大即變成主庫。舊的主庫調整完后,記得要將priority變為1。


    方法2:停服務情況下     

        該方法操作最為簡便,但是需要停服務。具體步驟為

    1 關閉mongod實例(所有節點)

             use admin

           db.shutdownServer()

     

    2 刪除local數據庫下的所有文件(PRIMARY節點)

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


    3 刪除mongo數據目錄(secondary)

           如果不確定誰是主庫,就mv下數據目錄

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


    4 修改所有節點配置文件(oplogsize)

            oplogSizeMB: 4096


    5 重啟所有節點mongod

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


          該方法會導致主庫如果異常,沒有從庫可切換,不建議使用該方式


    【小節】

           設置多大的oplog合適呢,可以根據現在數據大小,io和大致的oplog window時間預估一個合適的大小

    rs.printReplicationInfo()

      log length start to end: 當oplog寫滿時可以理解為時間窗口

      oplog last event time: 最后一個操作發生的時間





    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    阿鲁科尔沁旗| 崇明县| 阳高县| 盈江县| 横山县| 丰宁| 庆阳市| 峨眉山市| 旺苍县| 凤庆县| 崇左市| 灌云县| 洛南县| 顺昌县| 左贡县| 福州市| 双流县| 巴林右旗| 岳普湖县| 玉山县| 合阳县| 确山县| 鹤峰县| 蒙阴县| 项城市| 曲阜市| 紫金县| 咸宁市| 溧阳市| 抚宁县| 平昌县| 翁牛特旗| 伽师县| 嘉鱼县| 明光市| 灵丘县| 盐源县| 朝阳市| 凌云县| 江阴市| 涡阳县|