MongoDB 搭建可複製群集

来源:https://www.cnblogs.com/chenmh/archive/2018/03/01/8484049.html
-Advertisement-
Play Games

一、概述 MongoDB複製群集支持節點故障自動切換,最小配置應包含3個節點,正常情況下應該至少包含兩個數據節點,第三個節點可以是數據節點也可以是仲裁節點。仲裁節點的作用是當出現偶數節點導致無法仲裁的時候參與進來進行投票使之變成奇數個投票點,仲裁節點可以看成是不包含任何數據集的副本節點。仲裁節點並不 ...


一、概述

MongoDB複製群集支持節點故障自動切換,最小配置應包含3個節點,正常情況下應該至少包含兩個數據節點,第三個節點可以是數據節點也可以是仲裁節點。仲裁節點的作用是當出現偶數節點導致無法仲裁的時候參與進來進行投票使之變成奇數個投票點,仲裁節點可以看成是不包含任何數據集的副本節點。仲裁節點並不需要太多系統資源,僅僅只是參與投票,可隨意部署在網路通的地方不會占用什麼系統資源;而數據節點保存了數據,需要占用比較大的磁碟空間、記憶體等硬體資源,成本比仲裁節點高很多,但是額外提供了一個數據副本,相當於更多一層保障。

 

 

版本:MongoDB3.6.2

OS:Centos6.7

節點1:192.168.137.10:27010 ;目錄/mongos27010

節點2:192.168.137.10:27011;目錄/mongos27011

節點3:192.168.137.10:27012;目錄/mongos27012

二、搭建

基本架構如下:

 

1.安裝Mongodb 

解壓

tar -xvf mongodb-linux-x86_64-rhel62-3.6.2.tgz

mv mongodb-linux-x86_64-rhel62-3.6.2 mongos27010

創建相關目錄

cd /mongos27010
mkdir -p data/db 
mkdir -p data/log

配置文件

vim mongosdb.conf

pidfilepath = /mongos27010/mongod.pid
logpath = /mongos27010/data/log/mongod.log
dbpath = /mongos27010/data/db
logappend = true
bind_ip = 192.168.137.10,127.0.0.1
port = 27010
fork = true
#auth = true
#replSet = myapp
#keyFile = /mongos27010/autokey

加入環境變數

vim /etc/profile
export PATH=/mongos27010/bin:$PATH

source /etc/profile

啟動服務

/mongos27010/bin/mongod  --maxConns 20000  --config  /mongos27010/mongodb.conf

生成keyfile文件

openssl rand -base64 756 > /mongodb27010/autokey

chmod 400 /mongodb27010/autokey

2.許可權配置

 登入

mongo --port 27010

創建admin的root角色用戶

db.createUser({
    user:"dba",
    pwd:"dba",
    roles:[{role:"root",db:"admin"}]});

創建用戶資料庫的讀寫許可權用戶,在用戶資料庫下創建

use test;

db.createUser(
{
    user:"test",
    pwd:"test",
    roles:[{role:"readWrite",db:"test"}
           ]
}
);

關閉資料庫服務

db.shutdownServer();

3.添加群集

修改節點27010配置文件

pidfilepath = /mongos27010/mongod.pid
logpath = /mongos27010/data/log/mongod.log
dbpath = /mongos27010/data/db
logappend = true
bind_ip = 192.168.137.10
port = 27010
fork = true
auth = true
replSet = myapp
keyFile = /mongos27010/autokey

將27010節點目錄文件複製兩份

cp -rp /mongos27010 /mongos27011
cp -rp /mongos27010 /mongos27012

註意:對應修改節點27011、27012配置文件。

啟動三個節點服務

/mongos27010/bin/mongod  --maxConns 20000  --config  /mongos27010/mongodb.conf
/mongos27011/bin/mongod  --maxConns 20000  --config  /mongos27011/mongodb.conf
/mongos27012/bin/mongod  --maxConns 20000  --config  /mongos27012/mongodb.conf

登入到主節點27010,添加其它兩個節點

mongo --port 27010
切換資料庫
use admin
驗證許可權
db.auth("dba","dba") 初始化複製集 rs.initiate() 添加數據節點27011,可以用機器名加埠也可以使用IP加埠 rs.add("192.168.137.10:27011") 添加數據節點27012,可以用機器名加埠也可以使用IP加埠 rs.add("192.168.137.10:27012")

註意:添加節點後基底重啟所有節點服務

註意:當前我已經把節點27010和27011的優先順序都設成了10,節點27012的優先順序設成了0,所以節點27012永遠不會成為主節點。

arbiterOnly:表示該成員是仲裁者,arbiter的唯一作用是就是參與選舉,其votes屬性是1,arbiter不保存數據,也不會為client提供服務。

buildIndexes:表示實在在成員上創建Index,該屬性不能修改,只能在增加成員時設置該屬性。如果一個成員僅僅作為備份,不接收Client的請求,將該成員設置為不創建index,能夠提高數據同步的效率。

priority:表示一個成員被選舉為Primary節點的優先順序,預設值是1,取值範圍是從0到100,將priority設置為0有特殊含義:Priority為0的成員永遠不能成為Primary 節點。Replica Set中,Priority最高的成員,會優先被選舉為Primary 節點,只要其滿足條件。

hidden:將成員配置為隱藏成員,要求Priority 為0。Client不會向隱藏成員發送請求,因此隱藏成員不會收到Client的Request。

slaveDelay:單位是秒,將Secondary 成員配置為延遲備份節點,要求Priority 為0,表示該成員比Primary 成員滯後指定的時間,才能將Primary上進行的寫操作同步到本地。為了數據讀取的一致性,應將延遲備份節點的hidden設置為true,避免用戶讀取到明顯滯後的數據。Delayed members maintain a copy of the data that reflects the state of the data at some time in the past.

votes:有效值是0或1,預設值是1,如果votes是1,表示該成員(voting member)有許可權選舉Primary 成員。在一個Replica Set中,最多有7個成員,其votes 屬性的值是1。

註意:當前我已經把節點27012的優先順序(priority)設成了0,所以節點27012在passives下麵去了。

4.故障測試

停止27010節點服務

登入節點27011查詢,rs.status()

 主節點已經切換到了27012節點

三、其它相關配置

1.配置節點優先順序

在主節點中配置

cfg = rs.conf();
cfg.members[0].priority = 10
cfg.members[1].priority = 10
cfg.members[2].priority = 5
rs.reconfig(cfg)
rs.conf();

註意:1.members[n]指的是rs.conf()查詢中"_id"節點標誌。如果將某個節點的priority設為0那麼它將永遠不會成為Primary節點。

2.這裡的cfg只是一個別名,可以隨意取。

3.主和背主的優先順序建議設置成一樣,避免主重啟之後又進行主切換。

2.關閉節點投票

cfg = rs.conf()
cfg.members[2].votes = 0;
rs.reconfig(cfg)
rs.conf();

註意:將節點votes設為0那麼該節點將不具有投票權。

3.添加仲裁節點

rs.addArb("localhost:27012")

註意:添加節點後需要重啟服務

4.刪除節點

刪除仲裁節點命令相同
rs.remove("localhost:27012")

註意:刪除節點後要重啟刪除節點的服務,同時將刪除節點的conf配置文件的replSet參數去掉。

5.查詢群集相關狀態

rs.status

"_id" :  #集群中節點編號  
"name" :  #成員伺服器名稱及埠  
"health" :  #表示成員中的健康狀態(0:down;1:up)  
"state" :  #為0~10,表示成員的當前狀態  
"stateStr" :  #描述該成員是主庫(PRIMARY)還是備庫(SECONDARY)  
"uptime" :  #該成員線上時間(秒)  
"optime" :  #成員最後一次應用日誌(oplog)的信息  
"optimeDate" :  #成員最後一次應用日誌(oplog)的時間  
"electionTime" :  #當前primary從操作日誌中選舉信息  
"electionDate" :  #當前primary被選定為primary的日期  
"configVersion" :  #mongodb版本  
"self" :  #為true 表示當前節點 

參考:https://docs.mongodb.com/manual/reference/command/replSetGetStatus/

rs.conf()

查詢群集相關配置,包括優先順序、投票等

參考:https://docs.mongodb.com/manual/reference/replica-configuration/

db.isMaster()

"passives" :priority=0的標誌
"setName":群集名稱
"ismaster":是否是主節點
"secondary":是否是從節點
 

參考:https://docs.mongodb.com/manual/reference/command/isMaster/

NameDescription
applyOps Internal command that applies oplog entries to the current data set.
isMaster Displays information about this member’s role in the replica set, including whether it is the master.
replSetAbortPrimaryCatchUp Forces the elected primary to abort sync (catch up) then complete the transition to primary.
replSetFreeze Prevents the current member from seeking election as primary for a period of time.
replSetGetConfig Returns the replica set’s configuration object.
replSetGetStatus Returns a document that reports on the status of the replica set.
replSetInitiate Initializes a new replica set.
replSetMaintenance Enables or disables a maintenance mode, which puts a secondary node in a RECOVERING state.
replSetReconfig Applies a new configuration to an existing replica set.
replSetResizeOplog Dynamically resizes the oplog for a replica set member. Available for WiredTiger storage engine only.
replSetStepDown Forces the current primary to step down and become a secondary, forcing an election.
replSetSyncFrom Explicitly override the default logic for selecting a member to replicate from.
resync Forces a mongod to re-synchronize from the master. For master-slave replication only.

參考:https://docs.mongodb.com/manual/reference/command/nav-replication/

6.關閉服務

db.shutdownServer()

7.配置啟動服務

vim /etc/init.d/mongos27010

ulimit -SHn 655350
#!/bin/sh
# chkconfig: - 64 36
# description:mongod
case $1 in
start)
/mongos27010/bin/mongod  --maxConns 20000  --config  /mongos27010/mongodb.conf
;;
stop)
/mongos27010/bin/mongo -u dba -p dba 192.168.137.10:27010/admin --eval "db.shutdownServer()"
;;
status)
/mongos27010/bin/mongo -u dba -p dba  192.168.137.10:27010/admin --eval "db.stats()"
;;
esac

加入開啟自動啟動

chkconfig --level 345 mongos27010 on

四、總結 

如果是首次搭建可能會遇到各種小問題,但是只要細心查找還是很容易解決;整體來說搭建一個MongoDB複製群集還是比較簡單。

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》

 


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

-Advertisement-
Play Games
更多相關文章
  • KeepAlived系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 本文目錄:1. 概述2. VRRP協議3. KeepAlived架構模型4. 安裝KeepAlived5. 配置keepalived的日誌6. keepalived配置文 ...
  • 和MySQL主從複製的原因一樣,Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支持主從複製,Redis的主從結構可以採用一主多從或者級聯結構,下圖為級聯結構。 Redis主從複製可以根據是否是全量分為全量同步和增量同步。 1 全量同步 Redis全量 ...
  • linux手冊中有詳細講解使用的介面的用法:http://man7.org/linux/man-pages/man2/semop.2.html 使用場景: master(W) shm1 >slave(R) master(R)< shm2 >slave(W) 使用2對信號量控制2個共用記憶體的讀寫 編譯 ...
  • Apache是世界使用排名第一的Web伺服器軟體。它可以運行在幾乎所有廣泛使用的電腦平臺上,由於其跨平臺和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。快速、可靠並且可通過簡單的API擴充,將Perl/Python等解釋器編譯到伺服器中。 特點: 功能強大、配置簡單、速度快、應用廣泛、性能穩 ...
  • 最近看自旋鎖的實現,自選鎖的迴圈查找鎖的主要實現類似如下,該實現使用到了內嵌的彙編(摘自sanos內核,源代碼有2處實現,一處使用intel彙編,是沒有問題的,另一處使用內嵌彙編語法,源代碼中為cmpxchgl %2, %0,是錯誤的,應該是cmpxchgl %0, %2) 內嵌彙編有個固定格式,如 ...
  • firewall-cmd:防火牆設置的命令行工具。 語法:firewall-cmd [OPTIONS...] 常見選項: -h:列印幫助信息; -V:列印版本信息; -q:退出,不用列印狀態信息。 狀態選項: --state:檢查防火牆進程是否激活有效。如果有效,返回0值;否則返回非0值。 --re ...
  • 如何在CentOS 7上部署Google BBR 本文章搬運自 https://www.vultr.com/docs/how-to-deploy-google-bbr-on-centos-7 【註:文章當時使用的內核版本是4.9.0 而目前是4.15.6(4.15版本高於4.9)】 步驟 1: 使用 ...
  • 錯誤1. ERROR: child process failed, exited with error number 100 可能原因: 1.沒有正確關閉服務 2.服務已經啟動 3.conf文件的參數配置錯誤。 錯誤2. "errmsg" : "not authorized on admin to ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...