MongoDB之副本集

副本集

簡介

  • 就是一組維護相同數據集的mongod服務,類似主從集群
  • 作用
    • 冗餘和數據可用性:提供了多個數據副本,複製可提供容錯功能
    • 實現副本服務器做只讀服務器,實現讀寫分離,提高負載
    • 提高了系統可用性,有選舉策略,就算主節點掛掉了,也還有從節點
  • MongoDB的複製
    • 在副本集中有多個數據承載節點(從節點)和可選的一個仲裁節點,有且僅有一個是主節點
    • 主節點接受所有寫操作,副本集只能有一個主要能夠確認具有寫入關注的寫入
    • 主要記錄操作日誌中的數據集的所有更改就是oplog
    • 從節點複製主節點的oplog並應用到數據集,以同步數據

副本集的三個角色

  • 兩種類型
    • 主節點:可讀寫,數據操作的主要連接點
    • 從節點:數據冗餘備份節點,可以讀或選舉
  • 三種角色
    • 主成員:主節點
    • 副本成員:從節點
    • 仲裁者:不存數據,但是有投票選舉作用,副本成員可以同時是仲裁者,也可以是從節點

架構

第一步創建各個節點

  • 建立存儲數據和日誌的目錄
     #日志存储目录
     mkdir -p /mongodb/replica_sets/myrs_27017/log \&
     #数据存储目录
     mkdir -p /mongodb/replica_sets/myrs_27017/data/db
     
  • 配置文件
 vi mongodb/replica_sets/myrs_27017/mongod.conf
  • 修改配置
 systemLog
       # MongoDB发送所有日志输出的目标指定为文件
       destination: file
       # 日志文件的存储路径
       path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"
       #mongodb实例启动的时候,将新条目加到现有日志的末尾
       logAppend: true
     storage:
       #mongodb实例存储数据的目录,
       dbPath: "/mongodb/replica_sets/myrs_27017/data/db"
       journal:
         # 启动或禁用持久化日志以确保数据文件保持有效和可恢复
         enable: true
     processManagement:
       #启用在后台运行mongos或mongod进程的守护进程模式
       fork: true
     net: 
       #事务实例绑定的ip,默认是localhost
       bindIp: localhost,192.168.0.2
       #绑定的端口,默认是27017
       port: 27017
 replication:
   # 副本集的名稱
   replSetName: myrs
  • 啟動節點服務
 /usr/local/mongodb/bin/mongod -f /mongodb/replica_sets/myrs_27017/mongod.conf
  • 再另外兩個服務器上配置副本和仲裁節點,除了port其他都一樣

第二步連接各個節點

  • 使用客戶端命令連接任意一個節點,這裡連接主節點
      /usr/local/mongodb/bin/mongo --host=180.76.159.126 --port=27017
  • 初始化副本集
 rs.initiate()
  • ok的值為1,說明創建成功
  • 命令行提示符發生變化,變成一個從節點,此時默認不能讀寫,在等一會,回車,變成主節點

添加副本從節點

  • 在主節點添加從節點,將其他成員加入副本集
    • host為字符串或者配置文檔
      • 字符串需要指定新成員的主機名和端口號
      • 文檔需要指明在members數組中找到的副本集成員配置文檔,在文檔中需要指定主鍵字段
    • arbiterOnly可選,僅在host為字符串的時候使用,如果為true,添加的主機的仲裁者
 rs.add(host,arbiterOnly)

添加仲裁節點

  • rs.add(host)

配置讀權限

  • 現在從節點只是一個備份,不能發揮讀的作用,需要到從節點設置
      rs.slaveOK()
      或
      rs.slaveOK(true)

主節點的選舉原則

  • 觸發條件
    • 主節點故障
    • 主節點網絡不可達(默認心跳機制10s)
    • 人工干預(rs.stepDown(600))
  • 選擇規則由票數來確定
    • 票數最高:假設複製集中投票成員數量為N,大多為N/2+1
    • 票數相同,數據新的節點獲勝(根據操作日誌oplog對比)
    • 在獲取票數時,優先級參數影響重大
      • 設置優先級(0~1000),越大票數就越高
        默認優先級為1

springboot修改

  • 在配置文件中修改
    • slaveOK=true開啟副本節點讀功能,實現讀寫分離
    • connect=replicaSet:自動到副本集中選擇讀寫的主機
   spring:
        data:
          mongodb:
            # 主機地址
            #host: localhost
            # 數據庫
            #database: airClub
            # 端口
            #port: 27017
            # 也可以使用uri連接
            uri: mongodb://主節點ip:主節點port,從節點ip:從節點port,仲裁者ip:仲裁者port/airClub?
            connect=replicaSet&slaveOK=true$replicaSet=myrs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值