MongoDB可複製集架構介紹以及安裝

架構概述

在這裏插入圖片描述
MongoDB部署架構分爲單機、可複製集、分片集羣,單機適合學習使用;分片集羣比較複雜、運維難度高,在數據量達到一定瓶頸的時候才考慮使用,要慎重選擇;可複製集是非常適合用於生產環境的一種架構

本文講解的是可複製集架構的原理和搭建

可複製集原理

可複製集是跨多個MongDB服務器(節點)分佈和維護數據的方法。

mongoDB可以把數據從一個節點複製到其他節點並在修改時進行同步,集羣中的節點配置爲自動同步數據

舊方法叫做主從複製,mongoDB 3.0以後推薦使用可複製集

可複製集優點:

  • 避免數據丟失,保障數據安全,提高系統安全性(最少3節點,最大50節點)
  • 自動化災備機制,主節點宕機後通過選舉產生新主機,提高系統健壯性(7個選舉節點上限)
  • 讀寫分離,負載均衡,提高系統性能
  • 生產環境推薦的部署模式

架構圖:
在這裏插入圖片描述

  • oplog(操作日誌):保存操作記錄、時間戳,該日誌極其重要!!!
  • 數據同步:從節點與主節點保持長輪詢
    • 首先從節點查詢本機oplog最新時間戳
    • 然後從節點查詢主節點oplog晚於此時間戳的所有文檔
    • 最後從節點加載這些文檔,並根據log執行寫操作
  • 阻塞複製:與writeconcern相關
    • 情況一:不需要同步到從節點的策略(如: acknowledged、Unacknowledged 、w1),數據同步都是異步的
    • 情況二:其他writeconcern情況都是同步的,因爲都需要等待從節點確認完畢後才結束整個寫流程
  • 心跳機制:成員之間會每2s 進行一次心跳檢測(ping操作),發現故障後進行選舉和故障轉移
  • 選舉制度:主節點故障後,其餘節點根據優先級和bully算法選舉出新的主節點,在選出主節點之前,集羣服務是隻讀的,不對外提供寫服務

備註:oplog是蓋子集合,大小是可以調整的,64爲系統中默認是所在硬盤可用空間的5%,具體說明參考:官方文檔說明

可複製集環境搭建

  1. 環境準備

    這裏只在一臺機器上搭建三個節點,生產上一定要用3臺

    IP:192.168.31.41

    MongoDB版本:mongodb-linux-x86_64-rhel70-3.4.20.tgz

  2. 安裝好3個MongoDB節點,安裝教程參考我的另一篇博客:MongoDB在CentOS7下的yum方式和壓縮包方式安裝

    master 192.168.31.41 27030

    slave1 192.168.31.41 27031

    slave2 192.168.31.41 27032

  3. 3個MongoDB的配置文件mongodb.conf加入如下相同的配置

    replication:
      replSetName: configRS #集羣名稱
      oplogSizeMB: 500 #oplog集合大小,單位MB,一定不能設置太小,根據具體機器磁盤進行設置
    

    這裏列出master節點的配置文件全部內容,和slave1、slave2配置文件的不同之處在於端口和相關路徑的配置,其他都一致:

    storage:
       dbPath: "/usr/local/mongodb/replica/master/data"
       journal:
          enabled: true
       directoryPerDB: true
       engine: wiredTiger
       wiredTiger:
            engineConfig:
                cacheSizeGB: 1
                journalCompressor: snappy
                directoryForIndexes: false    
            collectionConfig:
                blockCompressor: snappy
            indexConfig:
                prefixCompression: true
    systemLog:
       destination: file
       path: "/usr/local/mongodb/replica/master/log/mongodb.logs"
    net:
       port: 27030
       http:
          RESTInterfaceEnabled: true
    processManagement:
       fork: false
    replication:
       replSetName: configRS
       oplogSizeMB: 500
    
  4. 創建啓動腳本

    cd /usr/local/mongodb/replica
    
    mkdir logs
    
    vim start-replica-mongo.sh
    
    #輸入如下內容
    nohup ./master/bin/mongod -f ./master/bin/mongodb.conf > ./logs/master.log 2>&1 &
    nohup ./slave1/bin/mongod -f ./slave1/bin/mongodb.conf > ./logs/slave1.log 2>&1 &
    nohup ./slave2/bin/mongod -f ./slave2/bin/mongodb.conf > ./logs/slave2.log 2>&1 &
    
    #保存後授權執行權限
    chmod u+x start-replica-mongo.sh 
    
  5. 啓動

    ./start-replica-mongo.sh
    
  6. 在master節點上運行初始化命令

    cd /usr/local/mongodb/replica/master/bin
    
    mongo 127.0.0.1:27030
    
    # _id表示集羣名稱,members表示master主機
    rs.initiate({
    	_id: "configRS",
    	version: 1,
    	members: [{ _id: 0, host : "192.168.31.41:27030" }]});
    
    # 有多少個slave就執行多少次add	
    rs.add("192.168.31.41:27031");
    rs.add("192.168.31.41:27032");
    
  7. 從節點上執行rs.slaveOk()【注意:這裏有個小坑】

    目前只能在主節點上查詢出數據,但如果想在副節點上查詢到數據需運行rs.slaveOk()

    注意:每次使用命令行的方式登錄從機的時候都要在從機執行rs.slaveOk()命令,否則是無法查詢的!!!

    cd /usr/local/mongodb/replica/master/bin
    mongo 127.0.0.1:27031
    rs.slaveOk();
    exit
    
    mongo 127.0.0.1:27032
    rs.slaveOk();
    exit
    
  8. 主節點負責寫入,從節點負責同步數據和負載均衡查詢,現在測試一下吧,從主節點新增數據

    cd /usr/local/mongodb/replica/master/bin
    mongo 127.0.0.1:27030
    use dalomao
    db.users.insertOne({"username":"張三"})
    

    然後登陸slave1和slave2查看是否有數據

  9. 可以在每個節點運行rs.status()或isMaster()命令查看複製集狀態,如:

    mongo 127.0.0.1:27031
    rs.isMaster()
    

    在這裏插入圖片描述

  10. 停止命令如下

    cd /usr/local/mongodb/replica
    
    vim stop-replica-mongo.sh
    
    #輸入如下內容
    nohup ./master/bin/mongod --shutdown -f ./master/bin/mongodb.conf > ./logs/master.log 2>&1 &
    nohup ./slave1/bin/mongod --shutdown -f ./slave1/bin/mongodb.conf > ./logs/slave1.log 2>&1 &
    nohup ./slave2/bin/mongod --shutdown -f ./slave2/bin/mongodb.conf > ./logs/slave2.log 2>&1 &
    
    #保存後授權執行權限
    chmod u+x stop-replica-mongo.sh 
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章