MongoDB 複製集

MongoDB 複製集概述

  • 複製集是額外的數據副本,是跨多個服務器同步數據的過程,複製集提供了沉餘添加了數據可用性,經過個複製集能夠對硬件故障中斷的服務進行恢復
    複製集的優點以下:
    1. 讓數據更安全。
    2. 高數據可用性(24*7)
    3. 災難恢復
    4. 無停機維護(如備份、索引重建、故障轉移)
    5. 讀縮放(額外的副本讀取)
    6. 副本集對應用程序是透明的。
      複製集工做原理
  • MongoDB 的複製集至少須要兩個節點,其中一個主節點(primary),負責處理客戶端的請求,其他的都是從節點(secondary),負責複製主節點上的數據。
  • MongoDB 各節點常見的搭配方式爲:一主一從或者一主多從。主節點記錄其全部操做到oplog中,從節點按期輪詢主節點獲取這些操做,而後對本身的數據副本執行這些操做,從而保證從節點的數據與主節點譯者。
    複製集特色以下:
    1. N個節點羣階
    2. 任何節點客做爲主節點
    3. 全部寫入操做都在主節點
    4. 自動故障轉移
    5. 自動恢復
      開始部署
建立多實例 //建立多實例
關閉防火牆 setenforce  //一些阻擋項目
mkdir -p /data/mongodb/mongodb{2,3,4}     //建立數據目錄
mkdir logs  //到/data/mongodb/建立日誌文件目錄
touch logs/mongodb{2,3,4}.log    //建立日誌文件
cd logs/到目錄下
chmod 777 *.log     //賦予權限
//建立多實例配置文件,並開啓服務
mongod -f /etc/mongod.conf --shutdown  //修改完主配置文件而且進行關閉在開啓
mongod -f /etc/mongod.conf  //挨個開啓全部服務
進入默認的端口 開啓複製集
cp -p /etc/mongod.conf /etc/mongod2.conf  //地二個實例配置文件
vim /etc/mongod2.conf
   path: /data/mongodb/logs/mongod2.log               //系統日誌存放路徑
   dbPath: /data/mongodb/mongo                   //數據存放日誌
   port: 27018                  //端端口

mkdir -p  /data/mongodb/            //爲其建立系統日誌和數據存放日誌沒有目錄
cd /data/mongodb/                         
mkdir mongo  
touch mongod2.log                              //爲其建立系統日誌文件
chmod 777 mongod2.log               //而且給與權限

mongod -f /etc/mongod2.conf         //開啓多實例服務
mongo --port 27018              //進入mongodb 27018
netstat -ntap                   //查看進程

cfg={"_id":"abc","members":[{"_id":0,"host":"192.168.10.5:27017","priority":100},{"_id":1,"host":"192.168.10.5:27018","priority":100},{"_id":2,"host":"192.168.10.5:27019","priority":0},{"_id":3,"host":"192.168.10.5:27020","arbiterOnly":true}]} //注意IP
優先級來判斷
priority":100  //高的作爲表準節點
priority":0 //低的就做爲被動節點
arbiterOnly":true  //仲裁節點
rs.initiate(cfg)  //初始化刷新 以後就能夠看到本身的身份了
rs.isMaster()  //查看節點狀態
基本的增刪改查
db.t1.insert({"id":1,"name":"tom"})  //建立集合
db.t1.find()   //查看當前數據
db.t1.update({"id":2},{$set:{"name":"jack"}})  //修改指定內容
db.t1.remove({"id":1})     //刪除指定數據

MongoDB 複製集
MongoDB 複製集
MongoDB 複製集
MongoDB 複製集
MongoDB 複製集
MongoDB 複製集

模擬故障節點實驗是否能自動搶佔

show dbs  //顯示全部數據庫
use local  //進入存放日誌文件的數據庫
show collections  //顯示數據中的全部的集合
db.oplog.rs.find()   #查看日誌記錄全部操做
模擬表準節點1故障
mongod -f /etc/mongod.conf --shutdown #關閉一主節點服務看看是否別的mongoDB有沒有搶佔
mongo --port 27018   #此時會選舉第二個標準節點爲主節點
模擬標註節點2故障
mongod -f /etc/mongod2.conf --shutdown  #關閉第二主節點
mongo --port 27019 #此時被動節點不能成爲主節點
  • 容許從節點讀取數據
    rs.slaveOk() #容許默認從節點讀取數據
  • 查看複製狀態信息
    仲裁節點是不會複製信息
    rs.help() #幫助信息
    rs.printReplicationInfo()  #查看日誌文件大小信息
    configured oplog size:   990MB  #這個日誌文件大小是能夠修改的
    rs.printSlaveReplicationInfo()  #產看是和那個節點繼進行同步
    #你會發現仲裁節點並不具有數據複製
  • 更改oplog大小 零時修改
    1. 要去調整日誌文件大小,從節點會去找主節點進行
    同步對方的文件從而本身也進行了擴容,對於主節點來
    說本身的日誌文件大小寬裕爲最佳,若不夠則能夠零時
    進行調整 默認狀況下990M,調整從節點
    1) 關閉節點服務,由於從節點是主節點複製集成員
    2)只能單獨的進行修改,先關閉服務在從複製集中退出來,推出來後就成了一個單實例 ,
    3)use admin #先關閉服務
    4)db.shutdownServer()  #退出複製集 離線升級
    5)修改從節點配置文件 
    6)mongod -f /etc/mongod2.conf  //啓動服務
    7)mongo --port 27028  //登錄
    8)mongodump --port 27028 --db local --collection 'oplog.rs' //oplog進行完整性備份
    9)mongo --port 27028  //進端口
    10)use local
    > db.oplog.rs.drop()  //刪掉原來的文件
    11)db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )  //進行原型建立 改成2048
    12)use admin
    > db.shutdownServer()  //再次關閉服務
    13)再次修改回來原先的數據 在replication:
    replSetName: abc
    oplogSizeMB: 2048  //添加
    14)mongod -f /etc/mongod2.conf //從新開啓服務   mongo --port 27018 進入端口 
    15)rs.printReplicationInfo()  //此時就成了2048 支對但對修改有效
    16)rs.stepDown()   #有效產生選舉 在主的裏面讓出主的身份

部署認證複製

1. 在主服務器上長建立用戶爲root
use admin  
db.createUser({"user":"root","pwd":"123","roles":["root"]}) #建立用戶密碼
vim /etc/mongod.conf  //修改主配置文件
同步而且中間有一個認證  修改全部配置文件
security:
   keyFile: /usr/bin/kgcrskey1  //驗證文件路徑
   clusterAuthMode: keyFile    //驗證密鑰
重啓服務
mongod -f /etc/mongod.conf --shutdown
mongod -f /etc/mongod.conf              /其餘幾臺的重啓方式都相同,重複操做便可
身份驗證登錄(先驗證主,再驗證從)
當你直接使用登錄命令登錄系統時,使用show dbs 是不可以查看數據的,此時就須要使用身份驗證

mongo --port 27018
use admin
db.auth("root","123123")

MongoDB 複製集

MongoDB 複製集
MongoDB 複製集
MongoDB 複製集
MongoDB 複製集
MongoDB 複製集

相關文章
相關標籤/搜索