MongoDB主從複製和副本集

来源:https://www.cnblogs.com/wy123/archive/2018/11/30/10026381.html
-Advertisement-
Play Games

MongoDB有主從複製和副本集兩種主從複製模式,主從複製最大的問題就是無法自動故障轉移,MongoDB副本集解決了主從模式無法自動故障轉義的特點,因此是複製的首選。對於簡單的主從複製無法自動故障轉移的缺陷,各個資料庫都在改進,MySQL推出的MGR,Redis的哨兵,Mongodb的複製集。 對於 ...


 


MongoDB有主從複製和副本集兩種主從複製模式,主從複製最大的問題就是無法自動故障轉移,MongoDB副本集解決了主從模式無法自動故障轉義的特點,因此是複製的首選。
對於簡單的主從複製無法自動故障轉移的缺陷,各個資料庫都在改進,MySQL推出的MGR,Redis的哨兵,Mongodb的複製集。

 

對於主從複製模式:
mongodb的主從配置異常簡單,
如果是非安全認證模式,只需要在主節點增加master = true,
從節點增加slave = true和source = ip:port兩個節點,分別啟動即可,不管主節點是否存在數據以及存在多少數據,從節點以slave的方式啟動,就會自動同步主節點的數據。
相比MySQL的主從模式(各種原因導致的主從事務不一致),簡單的不是一點半點。

port=12345 #埠 
dbpath= /usr/local/mongodb/db #資料庫存文件存放目錄 
logpath= /usr/local/mongodb/db/mongodb.log #日誌文件存放路徑 
logappend=true #使用追加的方式寫日誌 
fork=true #守護程式的方式啟用,false即不在後臺運行 
maxConns=100 #最大同時連接數 
journal=true #每次寫入會記錄一條操作日誌(通過journal可以重新構造出寫入的數據)。
storageEngine=wiredTiger #存儲引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.104.174.247 #這樣就可外部訪問了,例如從win10中去連虛擬機中的MongoDB
#複製只需要增加master = true
master = true
#如果開啟了安全認證,需要增加如下兩個節點。
auth=true #啟用驗證 
keyFile= /usr/local/mongodb/db/keyfile #添加keyfile 
oplogSize=2048 #oplog大小

安全認證模式:

關於安全認證模式,糾結了好久,mongodb是這樣的:
1,對於單實例的mongodb,(創建用戶之後)開啟安全認證需要增加auth = true配置即可,
2,主從或者副本集模式下,(創建用戶之後)如果要開啟安全認證,必須要加上keyFile(設置可以file之後auth參數才有效),二者必須同時配置,否則(主從or副本集)就不成功。

需要註意的是,如果在主節點創建了用戶,主從節點以開啟安全認證方式啟動,主節點的用戶信息同樣可以同步到從節點,因此從節點並不需要再重新創建用戶信息。

 

副本的初始化:

mongodb的副本在啟動的時候會自動從主節點的oplog中讀取數據,從而完成初始化,這一點非常省心。
當然,可能存在主節點數據超過oplog大小或者說主節點oplog發生了重用(覆蓋),那麼就無法通過oplog自動做到主從的同步,此時可以可以:
1,以autoresync = true的方式重啟副本。
2,刪除從節點的數據文件然後重新啟動從節點。
3,刪除從節點的數據文件,直接copy主節點的數據文件到從節點(個人認為這種方式更加簡單高效),啟動從節點即可。
三種方式都可以達到完整同步主節點數據的目的。

 

如下是mongodb slave節點同步數據的模式,來自於:https://www.cnblogs.com/daizhj/archive/2011/06/20/2050916.html

 

副本集搭建

由於MongoDB副本會自動從主節點(或者相鄰的最近節點)同步數據,不會出現事務衝突之類錯誤,因此副本集的配置也很簡單,這一點要比MySQL的各種配置簡單太多。

主節點生成keyfile:
openssl rand -base64 100 > /usr/local/mongodb/db/keyfile --文件內容採base64編碼,一共100個字元
修改文件許可權:
chmod 600 /usr/local/mongodb/db/keyfile
複製改keyfile至各個節點,然後啟動各個節點。

搭建副本集需要移除掉主從複製的一些配置項(主節點的master = true,從節點的slave,source等配置項),如下是一個最簡單的配置項。

port=8000 #埠  
dbpath= /usr/local/mongodb/db #資料庫存文件存放目錄  
logpath= /usr/local/mongodb/db/mongodb.log #日誌文件存放路徑  
logappend=true #使用追加的方式寫日誌  
fork=true #守護程式的方式啟用,false即不在後臺運行  
maxConns=100 #最大同時連接數    
auth=true #啟用驗證  
journal=true #每次寫入會記錄一條操作日誌(通過journal可以重新構造出寫入的數據)。
#即使宕機,啟動時wiredtiger會先將數據恢復到最近一次的checkpoint點,然後重放後續的journal日誌來恢復。
storageEngine=wiredTiger  #存儲引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.104.174.247  

keyFile= /usr/local/mongodb/db/keyfile #添加keyfile 
#master = true
oplogSize=2048  #oplog
replSet = rstest #副本集名稱
  主節點副本集初始化 rs.initiate() (數秒之後)同時發現rstest:SECONDARY>變為rstest:PRIMARY> 加入新節點 rs.add("10.104.174.247:9000") rs.add("10.104.174.247:10000") rs.status() 查看副本集主從節點的狀態

"health" : 1, //1 表明正常; 0 表明異常
"state" : 1, // 1 表明是Primary; 2 表明是Secondary;
"stateStr" : "PRIMARY", //表明此機器是主庫

rs.isMaster()查看主節點信息  

副本集也可以通過定義主機集合的方式
config_rs1={_id:'rs1',members:[
{_id:1,host:'10.104.174.247:8000',priority:1},
{_id:2,host:'10.104.174.247:9000'},
{_id:3,host:'10.104.174.247:1000'}]}
rs.initiate(config_rs1) //初始化配置

 

參考:
https://www.cnblogs.com/xsi640/p/3765911.html
https://www.cnblogs.com/oubo/archive/2012/03/01/2394669.html
https://www.cnblogs.com/daizhj/archive/2011/06/20/2050916.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 基於linux 4.20 rc3源碼分析 1 .掃描所有PCI設備並檢測,填充設備結構體 其中pci_setup_device(dev)函數對掛載在該匯流排上所有的設備進行檢測並獲取相關數據,並設備信息進行填充。對於有些需特殊處理的設備也進行了特殊處理,達到儘量相容新老設備的目的。 1.1查詢設備廠商 ...
  • 目錄相關: 文件屬性: stat命令: vim 查看文件內容 more命令 echo命令 特殊符號 移動命令 刪除命令 查找命令 管道命令 head,tail命令 sed sed sed是一種流編輯器,它是文本處理中非常中的工具,能夠完美的配合正則表達式使用,功能不同凡響。處理時,把當前處理的行存儲 ...
  • 微服務架構中我們使用了必須的四個組件, `config gateway auth` 其中 依賴 ,`auth gateway auth` 這樣就確定了四個組件的啟動順序為 , 既然有依賴,那就肯定會使用 參數,但是這個參數只會判斷容器啟動沒有,並不會去判斷容器是否能用,就像你創建了一個nginx鏡像 ...
  • 1 linux的分頁機制 1.1 四級分頁機制 前面我們提到Linux內核僅使用了較少的分段機制,但是卻對分頁機制的依賴性很強,其使用一種適合32位和64位結構的通用分頁模型,該模型使用四級分頁機制,即 頁全局目錄(Page Global Directory) 頁上級目錄(Page Upper Di ...
  • linux 安裝 powershell Intro powershell 已經推出了一個 Powershell Core, 版本號對應 Powershell 6.x,可以跨平臺,支持 Linux 和 mac. 這使得對於熟練使用 Powershell 進行開發運維的一些開發者來說無疑是個福音。 今天 ...
  • 一. 用戶、用戶組概念及其文件結構詳解 Linux用戶只有兩個等級:root及非root。Linux中還有一部分用戶,如:apache、mysql、nobody、ftp等,這些也都是非root用戶,即普通用戶。Linux的許可權實際是上不同用戶所能訪問的文件的不同產生的假象。而這些假象的造成,還要涉及 ...
  • 查看git版本,卸載舊版本(如果沒有安裝git請直接到下一步) 安裝依賴軟體 編譯安裝最新的git版本 添加到環境變數 好了最新的git就裝好了。 歡迎關註公眾號 ...
  • DMZ是網路的一個區域,介於外網與內網之間的一個特殊區域,既然說他特殊,就有他的特殊性,也成隔離區。在傳統意義上,安裝了防火牆後,外部網路是不能訪問內部網路的,要不還要防火牆幹啥,假如說外部網路想要訪問內部網路,比如內部網路有台WEB主機,對外提供服務,就得解決安裝防火牆之後的矛盾了, DMZ防火牆 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...