CentOS 7.8 安裝MongoDB 7 副本集(Replica Set)

文章目錄

  • 1 環境假設
    • 步驟1:在兩臺服務器上安裝MongoDB
    • 步驟2:配置副本集
    • 步驟3:初始化副本集
    • 步驟4:驗證副本集配置
    • 步驟5:設置安全性(可選)
      • 擴展
      • 配置示例:
      • 最佳實踐:
      • 仲裁節點
      • 步驟1:在一臺服務器上安裝MongoDB(仲裁節點)
      • 步驟2:將仲裁節點加入副本集
      • 步驟3:驗證仲裁節點的功能
        • 總結

1 環境假設

  • 服務器1:server1(IP: 192.168.1.100
  • 服務器2:server2(IP: 192.168.1.101
  • MongoDB版本:4.x(可以根據需要選擇其他版本)

步驟1:在兩臺服務器上安裝MongoDB

  1. 配置YUM源

    在每臺服務器上添加MongoDB的YUM源。編輯/etc/yum.repos.d/mongodb.repo文件,內容如下:

     [mongodb-org-7.0]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/gpgcheck=1enabled=1gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
    

    如果是其他Linux發行版,請根據系統版本選擇合適的源。

  2. 安裝MongoDB

    安裝MongoDB的相關包:

    sudo yum install -y mongodb-org
    
  3. 啟動MongoDB服務

    啟動MongoDB服務并設置為開機啟動:

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
  4. 驗證安裝

    使用以下命令檢查MongoDB是否正常運行:

    sudo systemctl status mongod
    

    或使用mongo客戶端連接到MongoDB實例,確認是否可以連接。

步驟2:配置副本集

  1. 配置mongod.conf

    在每臺服務器上編輯MongoDB的配置文件/etc/mongod.conf,啟用副本集配置。修改如下:

    replication:replSetName: rs0
    

    rs0是副本集的名字,你可以根據需要修改。

  2. 開放端口

    確保MongoDB端口(默認是27017)在防火墻中開放。你可以使用以下命令來開放該端口:

    sudo firewall-cmd --zone=public --add-port=27017/tcp --permanent
    sudo firewall-cmd --reload
    
  3. 啟動MongoDB

    啟動或重新啟動MongoDB使配置生效:

    sudo systemctl restart mongod
    
  4. 檢查MongoDB日志

    檢查mongod日志(/var/log/mongodb/mongod.log)確認是否有錯誤。

步驟3:初始化副本集

  1. 連接到MongoDB實例

    server1上,使用mongo客戶端連接到MongoDB:

    mongo --host 192.168.1.100
    
  2. 初始化副本集

    在MongoDB shell中運行以下命令來初始化副本集:

    rs.initiate()
    

    你應該會看到類似以下輸出:

    {"info2" : "no configuration has been given yet","me" : "192.168.1.100:27017","ok" : 1
    }
    
  3. 添加副本集成員

    之后,向副本集中添加第二臺服務器server2

    rs.add("192.168.1.101:27017")
    

    運行以下命令檢查副本集狀態:

    rs.status()
    

    如果一切正常,你應該會看到兩個成員(server1server2)都已經加入副本集。

步驟4:驗證副本集配置

  1. 查看副本集狀態

    使用以下命令查看副本集的狀態,確保兩個節點都在運行:

    mongo --host 192.168.1.100
    

    在Mongo shell中運行:

    rs.status()
    
  2. 進行數據寫入測試

    在主節點上插入數據并檢查是否同步到從節點:

    use test
    db.testCollection.insert({name: "test"})
    

    你可以在從節點上驗證該數據是否已同步。

步驟5:設置安全性(可選)

為了確保MongoDB副本集的安全性,可以啟用身份驗證和加密。你可以在配置文件中啟用auth選項并創建管理員用戶。

編輯/etc/mongod.conf文件,添加:

security:authorization: "enabled"

然后在主節點上創建管理員用戶:

mongo --host 192.168.1.100
use admin
db.createUser({user: "admin",pwd: "adminpassword",roles: [{ role: "root", db: "admin" }]
})

這樣,其他成員在加入副本集時需要提供管理員的用戶名和密碼。

擴展

MongoDB副本集的最低配置需要 3臺服務器。雖然可以在2臺服務器上搭建副本集,但為了確保高可用性和避免“腦裂”(split-brain)問題,3臺服務器是推薦的配置。

具體原因如下:

  1. 選舉機制:MongoDB副本集需要一個“選舉”機制來決定哪個節點作為主節點。如果只有2個節點,出現網絡分區時,這兩個節點可能無法達成一致,從而導致副本集無法正常工作。

  2. 高可用性:3個節點可以確保即使1個節點出現故障,副本集依然可以正常工作。在3個節點的配置中,如果其中1個節點宕機,另一個節點可以通過選舉成為新的主節點,保證系統的高可用性。

  3. 仲裁節點:如果你有2個數據節點,可以增加一個仲裁節點(Arbiter),這個節點只參與選舉,不保存數據。這樣可以避免“腦裂”問題,同時仍然保持副本集的選舉功能。仲裁節點不需要存儲數據,只要保證選舉時可以參與投票。

配置示例:

  • 2個數據節點(primarysecondary
  • 1個仲裁節點(arbiter

這樣配置可以確保副本集有3個投票節點,但不需要額外的存儲負擔。

最佳實踐:

  • 3個數據節點 + 1個仲裁節點 是一個常見的高可用副本集配置。
  • 4個數據節點 可以提供更強的故障恢復能力,但通常會增加管理和維護的復雜性。

總之,雖然最少可以配置2個節點,但為了確保高可用性和防止“腦裂”,建議使用3個節點。

仲裁節點

是的,仲裁節點(Arbiter)在搭建過程中的配置與數據節點相似,但它有一些特別的配置,主要是為了參與副本集選舉而不存儲數據。以下是如何在MongoDB副本集中設置仲裁節點的步驟:

步驟1:在一臺服務器上安裝MongoDB(仲裁節點)

你可以選擇在已經有的服務器上安裝MongoDB,或者在另一臺新服務器上安裝。這里假設你已經安裝了MongoDB,并且副本集已經創建了2個數據節點。

  1. 安裝MongoDB(如果尚未安裝)

    在仲裁節點服務器上,按照之前的步驟使用YUM安裝MongoDB:

    sudo yum install -y mongodb-org
    
  2. 配置mongod.conf

    在仲裁節點的MongoDB配置文件/etc/mongod.conf中,進行如下配置:

    replication:replSetName: rs0   # 確保與副本集名稱一致
    security:authorization: "enabled"  # 可選:啟用認證
    
  3. 啟動MongoDB

    啟動MongoDB服務并設置為開機啟動:

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
  4. 檢查MongoDB狀態

    確保MongoDB服務正常運行:

    sudo systemctl status mongod
    

步驟2:將仲裁節點加入副本集

  1. 連接到一個數據節點

    使用mongo命令連接到你的主節點(假設主節點IP是192.168.1.100):

    mongo --host 192.168.1.100
    
  2. 添加仲裁節點

    在Mongo shell中運行以下命令,將仲裁節點加入副本集:

    rs.addArb("192.168.1.102:27017")  // 假設仲裁節點的IP是192.168.1.102
    

    這樣,MongoDB將會把192.168.1.102添加為仲裁節點。

  3. 驗證副本集狀態

    運行以下命令檢查副本集狀態,確保仲裁節點已加入并且狀態正常:

    rs.status()
    

    在輸出中,你應該會看到仲裁節點的狀態類似于以下:

    {"host" : "192.168.1.102:27017","arbiterOnly" : true,"stateStr" : "ARBITER","state" : 7,"uptime" : 100
    }
    

步驟3:驗證仲裁節點的功能

  1. 測試選舉功能

    你可以通過在主節點上停止mongod服務來模擬節點故障。然后檢查副本集是否能自動選舉新的主節點。如果有仲裁節點,副本集應該能夠正常進行選舉,保證系統的高可用性。

  2. 驗證數據同步

    仲裁節點不存儲數據,它只是參與選舉過程,因此你不需要驗證數據同步。你只需要驗證它是否正確參與選舉并保持副本集的健康狀態。

總結
  • 仲裁節點的搭建和數據節點類似,唯一的區別是仲裁節點配置不存儲數據,且配置文件中不需要啟用數據存儲的設置。
  • 使用rs.addArb()將仲裁節點添加到副本集中,不需要額外的數據同步過程。
  • 仲裁節點的作用是保證選舉過程的順利進行,確保即使在數據節點故障時,副本集仍然能夠正常選舉出新的主節點。

對于測試環境,如果你有2個數據節點,可以使用1個仲裁節點來模擬高可用性,而不需要額外的數據存儲。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70027.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AJAX 與 ASP 的深入探討

AJAX 與 ASP 的深入探討 引言 隨著互聯網技術的飛速發展,Web應用程序的交互性和性能要求越來越高。AJAX(Asynchronous JavaScript and XML)和ASP(Active Server Pages)作為兩種重要的Web開發技術,在提高Web應用程序性能和用戶體驗方面發揮著重要作用。本文將深入探討AJ…

內網下,Ubuntu (24.10) 離線安裝docker最新版教程

一般在數據比較敏感的情況下,是無法使用網絡的,而對于Ubuntu系統來說,怎么離線安裝docker呢? 下面我給大家來講一下: 采用二進制安裝: 1.下載docker離線包 官網下載: Index of linux/static…

Copilot Next Edit Suggestions(預覽版)

作者:Brigit Murtaugh,Burke Holland 排版:Alan Wang 我們很高興向你介紹在本次 Visual Studio Code 發布中,關于 GitHub Copilot 的三個預覽功能: Next Edit Suggestions(NES)Copilot Edits 的…

高性能內存對象緩存Memcached詳細實驗操作

目錄 前提準備: cache1,2: 客戶端cache-api(一定得是LAMP環境) memcache實現主主復制以及高可用(基于以上完成) cache1,2: memcachekeepalived(基于以上完成) cache1,2: 前提準備: 1. 準備三臺cent…

全單模矩陣及其在分支定價算法中的應用

全單模矩陣及其在分支定價算法中的應用 目錄 全單模矩陣的定義與特性全單模矩陣的判定方法全單模矩陣在優化中的核心價值分支定價算法與矩陣單模性的關系非全單模問題的挑戰與系統解決方案總結與工程實踐建議 1. 全單模矩陣的定義與特性 關鍵定義 單模矩陣(Unimo…

Spring AI發布!讓Java緊跟AI賽道!

1. 序言 在當今技術發展的背景下,人工智能(AI)已經成為各行各業中不可忽視的重要技術。無論是在互聯網公司,還是傳統行業,AI技術的應用都在大幅提升效率、降低成本、推動創新。從智能客服到個性化推薦,從語…

【kafka系列】Kafka如何保證消息不丟失?

目錄 1. 生產者端:確保消息成功發送到Broker 核心機制: 關鍵步驟: 2. Broker端:持久化與副本同步 核心機制: 關鍵源碼邏輯: 3. 消費者端:可靠消費與Offset提交 核心機制: 關…

利用二分法+布爾盲注、時間盲注進行sql注入

一、布爾盲注&#xff1a; import requestsdef binary_search_character(url, query, index, low32, high127):while low < high:mid (low high 1) // 2payload f"1 AND ASCII(SUBSTRING(({query}),{index},1)) > {mid} -- "res {"id": payloa…

UART(一)——UART基礎

一、定義 UART(Universal Asynchronous Receiver/Transmitter)是一種廣泛使用的串行通信協議,用于在設備間通過異步方式傳輸數據。它無需共享時鐘信號,而是依賴雙方預先約定的參數(如波特率)完成通信。 功能和特點 基本的 UART 系統只需三個信號即可提供穩健的中速全雙工…

【PHP】php+mysql 活動信息管理系統(源碼+論文+數據庫+數據庫文件)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;專__注&#x1f448;&#xff1a;專注主流機器人、人工智能等相關領域的開發、測試技術。 【PHP】php 活動信息管理系統&#xff08;源碼論文…

數據結構——單向循環鏈表、雙鏈表、雙向循環鏈表

目錄 一、單向循環鏈表 1.1 單向循環鏈表的概念 1.2 單向循環鏈表的操作 1.2.1 單向循環鏈表的創建 1.2.2 單向循環鏈表的頭插 1.2.3 單向循環鏈表的遍歷 1.2.4 單向循環鏈表的頭刪 1.2.5 單向循環鏈表的尾插 1.2.6 單向循環鏈表的尾刪 1.2.7 約瑟夫環 1.3 單向循環列表所有程…

Apache Iceberg 與 Apache Hudi:數據湖領域的雙雄對決

在數據存儲和處理不斷發展的領域中&#xff0c;數據湖倉的概念已經嶄露頭角&#xff0c;成為了一種變革性的力量。數據湖倉結合了數據倉庫和數據湖的最佳元素&#xff0c;提供了一個統一的平臺&#xff0c;支持數據科學、商業智能、人工智能/機器學習以及臨時報告等多種關鍵功能…

JavaScript數組-數組的概念

在JavaScript編程中&#xff0c;數組&#xff08;Array&#xff09;是一種非常重要的數據結構&#xff0c;它允許我們將多個值存儲在一個單獨的變量中。數組可以包含任意類型的元素&#xff0c;如數字、字符串、對象甚至是其他數組&#xff0c;并提供了豐富的內置方法來操作這些…

AcWing 800. 數組元素的目標和

題目來源&#xff1a; 登錄 - AcWing 題目內容&#xff1a; 給定兩個升序排序的有序數組 A 和 B&#xff0c;以及一個目標值 x。 數組下標從 0開始。 請你求出滿足 A[i]B[j]x的數對 (i,j)。 數據保證有唯一解。 輸入格式 第一行包含三個整數 n,m,x&#xff0c;分別表示 …

wordpress資訊類網站整站打包

wordpress程序&#xff0c;內置了價值499元的模板.但是有了模板沒有全自動采集相信大多數人都搞不懂&#xff0c;目錄那么多&#xff0c;全靠原創幾乎是不可能的事情&#xff0c;除非你是大公司&#xff0c;每人控制一個板塊&#xff0c; 這套源碼里面最有價值的應該是這個采集…

python中的with是做什么的,有什么作用,什么時候需要用到with

&#x1f4cc; Python 中的 with 語句&#xff1a;作用 & 什么時候用 1?? with 是干嘛的&#xff1f; with 主要用來 自動管理資源&#xff0c;確保資源&#xff08;文件、數據庫連接等&#xff09;在使用完后能自動釋放&#xff0c;避免資源泄露問題。 換句話說&…

瀏覽器的Cookie 過期時間存儲

Cookie 是服務器發送到瀏覽器的小型文本數據&#xff0c;用于跟蹤用戶狀態&#xff08;如登錄信息、偏好設置&#xff09;&#xff0c;存儲大小通常限制為 4KB&#xff0c;每個域名下最多允許約 20-50 個 Cookie&#xff08;不同瀏覽器不同&#xff09;。 屬性 屬性說明示例注…

hive全量遷移腳本

#!/bin/bash #場景&#xff1a;數據在同一庫下&#xff0c;并且hive是內部表&#xff08;前綴的hdfs地址是相同的&#xff09;#1.讀取一個文件&#xff0c;獲取表名#echo "時間$dt_jian_2-------------------------" >> /home/hadoop/qianyi_zengliang/rs.txt#…

進階——第十六屆藍橋杯嵌入式熟練度練習(開發板捕獲頻率和占空比)

單通道捕獲頻率 HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1); void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {if(htim->InstanceTIM2) {cap1HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);TIM2-&…

Python中如何進行數據庫連接?

在 Python 中進行數據庫連接&#xff0c;不同的數據庫需要使用不同的庫。下面分別介紹幾種常見數據庫&#xff08;SQLite、MySQL、PostgreSQL&#xff09;的連接方法。 1. 連接 SQLite 數據庫 SQLite 是一種輕量級的嵌入式數據庫&#xff0c;Python 標準庫中自帶了sqlite3模塊…