欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MongoDB副本集部署完整教程(最新推薦)

 更新時(shí)間:2025年03月13日 11:14:09   作者:Five.(考研上岸版)  
副本集包括一個(gè)主節(jié)點(diǎn)和兩個(gè)副本節(jié)點(diǎn),配置副本集成員,包括將仲裁節(jié)點(diǎn)更改為副本節(jié)點(diǎn),并添加延遲節(jié)點(diǎn),下面通過本文給大家介紹MongoDB副本集部署完整教程,感興趣的朋友一起看看吧

一般而言,副本集主要成員有三個(gè):主節(jié)點(diǎn),副本節(jié)點(diǎn),仲裁節(jié)點(diǎn)

        按照官方推薦方案,我們搭建一個(gè)三成員的副本集,這個(gè)副本集由一個(gè)主結(jié)點(diǎn)和兩個(gè)副本結(jié)點(diǎn)組成。

這里采用三臺虛擬機(jī)進(jìn)行部署:node1(主節(jié)點(diǎn)),node2(副本節(jié)點(diǎn)),node3(副本節(jié)點(diǎn))

一、環(huán)境準(zhǔn)備

按照跳轉(zhuǎn)文章介紹的方式,分別在三臺服務(wù)器上創(chuàng)建user-mongo用戶,并將目錄/opt/module/,mongodb_dcmo/更改為用戶user_mongo的權(quán)限,使用該用戶進(jìn)行MongoDB副本集安裝與啟動(dòng)
        在三臺服務(wù)器目錄/opt/module/mongodb_demo/下創(chuàng)建目錄/replicaset/data/和目錄/replicaset/logs/,用于存放MongoDB副本集的數(shù)據(jù)和MongoDB副本集的日志文件,具體操作命令如下:

mkdir replicaset
cd replicaset/
mkdir data
mkdir logs
cd logs
touch mongodb.log

二、副本集的安裝與啟動(dòng)

1.安裝副本集

        首先在node1上安裝好mongodb,通過解壓MongoDB安裝包的方式安裝MongoDB,將MongoDB安裝包解壓目錄/opt/module/mongo_demo/replicaset/下,重命名為mongodb后

        replicaset目錄下包含data(數(shù)據(jù))、logs(日志)和mongodb(MongoDB安裝目錄)文件夾,并且這些文件夾的用戶權(quán)限都是user_mongo.
        再將服務(wù)器node1中/opt/module/mongodb_demo/replicaset/目錄下的所有內(nèi)容通過scp命令分發(fā)到服務(wù)器node2和服務(wù)器node3上

2.啟動(dòng)副本集

分別在三臺服務(wù)器node1、node2和node3的/opt/module/mongodb_demo/replicaset/mongodb/bin目錄下以副本集模式啟動(dòng)MongoDB,這里以服務(wù)器node1為例進(jìn)行操作

node1:

cd /opt/module/mongodb_demo/replicaset/mongodb/bin

副本集模式啟動(dòng)mongodb: 

./mongod --replSet xxx --dbpath=/opt/module/mongodb_demo/replicaset/data/ --logpath=/opt/module/mongodb_demo/replicaset/logs/mongodb.log --port 27017 --bind_ip node1 --logappend --fork

        上述啟動(dòng)MongoDB命令中,參數(shù)replSet指定MongoDB副本集名稱【xxx-自己命名】,同一副本集須指定相同名稱;

參數(shù)dbpath指定MongoDB副本集數(shù)據(jù)存放目錄(不能與其他MongoDB服務(wù)沖突);

參數(shù)logpath指定MongoDB服務(wù)副本集日志目錄;

參數(shù)port指定MongoDB副本集啟動(dòng)占用的端口號(不能與其他MongoDB沖突);

參數(shù)bind_ip開啟遠(yuǎn)程連接,使用當(dāng)前服務(wù)器主機(jī)名;

參數(shù)logappend指定以追加的方式寫入日志;

參數(shù)fork指定MongoDB后臺啟動(dòng)。 

node2:

cd /opt/module/mongodb_demo/replicaset/mongodb/bin
./mongod --replSet itcast --dbpath=/opt/module/mongodb_demo/replicaset/data/ --logpath=/opt/module/mongodb_demo/replicaset/logs/mongodb.log --port 27018 --bind_ip node2 --logappend --fork

node3:

cd /opt/module/mongodb_demo/replicaset/mongodb/bin
./mongod --replSet itcast --dbpath=/opt/module/mongodb_demo/replicaset/data/ --logpath=/opt/module/mongodb_demo/replicaset/logs/mongodb.log --port 27018 --bind_ip node3 --logappend --fork

3.副本集的初始化

 登錄mongodb客戶端:

./mongosh --host node1 --port 27017

這里新版本用的mongosh 老版本用mongo即可

當(dāng)出現(xiàn)命令輸入提示符>,證明在服務(wù)器node1中成功登錄MongoDB客戶端!
接著在MongoDB客戶端中執(zhí)行副本集初始化操作:

rs.initiate()

接著查看副本集成員狀態(tài):

rs.status()

當(dāng)前副本集只有一個(gè)成員角色,即主結(jié)點(diǎn)。接下來,我們將其他兩臺服務(wù)器node2和node3中的MongoDB以副本結(jié)點(diǎn)的角色添加到副本集中(添加結(jié)點(diǎn)的操作必須在主結(jié)點(diǎn)
進(jìn)行),具體命令如下:

rs.add("node2:27017")
rs.add("node3:27017")

         執(zhí)行完添加副本結(jié)點(diǎn)命令后,客戶端會(huì)返回添加的副本結(jié)點(diǎn)的相關(guān)信息,如信息中字段“OK”的值為1,則證明副本結(jié)點(diǎn)添加成功!

        此時(shí),在服務(wù)器node2和node3上登錄MongoDB客戶端,查看當(dāng)前服務(wù)器在副本集中的角色分配情況:

./mongosh --host node2 --port 27017

./mongosh --host node3 --port 27017

4.同步副本文檔

通過向MongoDB副本集主結(jié)點(diǎn)寫入文檔,驗(yàn)證其他副本結(jié)點(diǎn)是否成功同步主結(jié)點(diǎn)寫入的文檔內(nèi)容,具體操作步驟如下。
(1)在服務(wù)器node1(副本集主結(jié)點(diǎn))的MongoDB客戶端寫入一條文檔,具體命令如下: 

  通過上述操作,成功在副本集主結(jié)點(diǎn)的數(shù)據(jù)庫test中創(chuàng)建集合user并插入一條文檔。
(2)在服務(wù)器node2(副本結(jié)點(diǎn))中登錄MongoDB客戶端,查看數(shù)據(jù)庫test下的集合user中是否存在與主結(jié)點(diǎn)一致的文檔內(nèi)容,具體命令如下:

        執(zhí)行查看集合中的文檔命令時(shí),客戶端會(huì)返回Error的錯(cuò)誤信息,這是因?yàn)槟J(rèn)情況下
副本結(jié)點(diǎn)不能讀取副本集中的內(nèi)容,因此我們需要設(shè)置開啟副本結(jié)點(diǎn)的讀取權(quán)限,然后才可
以查看副本集中的內(nèi)容,具體命令如下:       

        注:MongoDB 舊版本中,rs.secondaryOk() 用于允許從 secondary 副本集成員讀取數(shù)據(jù)。但在較新版本(MongoDB 4.2 及以上),官方改進(jìn)了 讀偏好(Read Preference) 機(jī)制,推薦使用 setReadPref() 來設(shè)置讀取策略。

db.getMongo().setReadPref("primaryPreferred")

或在 MongoDB shell 連接時(shí)直接指定:

mongo --host xxx --readPreference=primaryPreferred

  • "primary":默認(rèn)值,只從 primary 讀取。
  • "secondary":只從 secondary 讀?。ㄟm用于查詢壓力大的情況)。
  • "primaryPreferred":優(yōu)先從 primary 讀取,但如果 primary 不可用,則從 secondary 讀?。ㄍ扑])。
  • "secondaryPreferred":優(yōu)先從 secondary 讀取,primary 不可用時(shí)才會(huì)使用 primary。
  • "nearest":從最近的節(jié)點(diǎn)讀取(不考慮 primary/secondary

5.配置副本集成員

1.查看當(dāng)前副本集配置

首先,您已經(jīng)使用了 rs.conf() 命令查看了當(dāng)前的副本集配置,以下是您已經(jīng)提供的配置內(nèi)容:cfg = rs.conf();

2.將服務(wù)器nosql02由仲裁結(jié)點(diǎn)更改為副本結(jié)點(diǎn)

修改配置

將 node2 修改為 仲裁節(jié)點(diǎn)arbiterOnly: true,并且將 priority 設(shè)置為 0)。

將 node3 修改為 延遲節(jié)點(diǎn)secondaryDelaySecs: Long("0"),并且將 priority 設(shè)置為 0,hidden 設(shè)置為 true)。

cfg.members[1].arbiterOnly = true;               // 將 node2 改為仲裁節(jié)點(diǎn)
cfg.members[1].priority = 0;                     // 設(shè)置優(yōu)先級為 0,避免 node2 成為主節(jié)點(diǎn)

提交配置更改

rs.reconfig(cfg);

 但由于不允許直接修改節(jié)點(diǎn)的 arbiterOnly 字段,需要先刪除該節(jié)點(diǎn),然后再重新添加它作為仲裁節(jié)點(diǎn)。

1.從副本集中刪除 node2: 使用 rs.remove() 命令從副本集配置中刪除 node2。

rs.remove("node2:27017");

2.重新添加 node2 作為仲裁節(jié)點(diǎn): 通過 rs.add() 命令將 node2 以仲裁節(jié)點(diǎn)的身份重新添加到副本集中。這里將 arbiterOnly 設(shè)置為 true,并將其優(yōu)先級設(shè)置為 0。 

rs.add({ _id: 1, host: "node2:27017", arbiterOnly: true, priority: 0 });

成功成為仲裁節(jié)點(diǎn)!

也有別的方法,我沒試過,應(yīng)該莫問題,自己嘗試

3.將服務(wù)器nosql03中延遲結(jié)點(diǎn)修改為正常的副本結(jié)點(diǎn)

修改配置:

cfg.members[2].priority = 0;                     // 設(shè)置優(yōu)先級為 0,避免 node3 成為主節(jié)點(diǎn)
cfg.members[2].hidden = true;                    // 將 node3 設(shè)置為隱藏節(jié)點(diǎn),確保不會(huì)被選為主節(jié)點(diǎn)

【注】出現(xiàn)問題解決方法【新版】 

        錯(cuò)誤提示 BSON field 'MemberConfig.slaveDelay' is an unknown field 表示 slaveDelay 這個(gè)字段在 MongoDB 配置中是不被識別的,導(dǎo)致 rs.reconfig(cfg) 執(zhí)行失敗。事實(shí)上,MongoDB 中并沒有 slaveDelay 字段用于副本集成員的配置。

正確的字段名:

在 MongoDB 中,應(yīng)該使用 secondaryDelaySecs 來設(shè)置副本集成員的延遲時(shí)間,而不是 slaveDelaysecondaryDelaySecs 字段用于設(shè)置副本節(jié)點(diǎn)相對于主節(jié)點(diǎn)的延遲時(shí)間,單位是秒。

解決方法:

將 slaveDelay 更改為 secondaryDelaySecs,并重新配置副本集:

cfg.members[2].secondaryDelaySecs = 3600;  // 設(shè)置延遲時(shí)間為3600秒

cfg.members[3].priority = 1;  // 設(shè)置優(yōu)先級為 1
cfg.members[3].hidden = false;  // 取消隱藏節(jié)點(diǎn)
cfg.members[3].secondaryDelaySecs = 0;  // 設(shè)置延遲為 0 秒

成功了,將服務(wù)器nosql03中延遲結(jié)點(diǎn)修改為正常的副本結(jié)點(diǎn),即優(yōu)先級為1,非隱藏和延遲為0秒。

6.安全認(rèn)證

1.在服務(wù)器node3創(chuàng)建新的數(shù)據(jù)目錄和日志文件,以副本集模式啟動(dòng)新的 MongoDB ,此 MongoDB 使用27016端口,并指定 keyFile 文件。

(1)創(chuàng)建存放keyfile文件的目錄,文件寫入密鑰并修改權(quán)限

mkdir -p /opt/module/mongodb_demo/replicaset/key
touch /opt/module/mongodb_demo/replicaset/key/keyfile
openssl rand -base64 756 -out /opt/module/mongodb_demo/replicaset/key/keyfile
chmod 600 /opt/module/mongodb_demo/replicaset/key/keyfile

 (2)同步文件

scp -r /opt/module/mongodb_demo/replicaset/key user_mongo@node1:/opt/module/mongodb_demo/replicaset/
scp -r /opt/module/mongodb_demo/replicaset/key user_mongo@node2:/opt/module/mongodb_demo/replicaset/

(3)創(chuàng)建全局管理用戶

登錄客戶端后,切換到數(shù)據(jù)庫admin,添加全局用戶

use admin;
db.createUser({user:"wurui",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]});

驗(yàn)證用戶是否創(chuàng)建成功:

 執(zhí)行完上述命令后客戶端返回信息“1”,則證明用戶創(chuàng)建成功。

創(chuàng)建新data和新log --我這里命名data103文件和log103文件,log3文件中添加空文件mongo.log

賦予權(quán)限:

sudo chown -R user_mongo:user_mongo /opt/module/mongodb_demo/replicaset/data103/
sudo chown -R user_mongo:user_mongob /opt/module/mongodb_demo/replicaset/logs103/

啟動(dòng)安全認(rèn)證:

./mongod --replSet wurui --keyFile /opt/module/mongodb_demo/replicaset/key/keyfile --dbpath=/opt/module/mongodb_demo/replicaset/data103/ --logpath=/opt/module/mongodb_demo/replicaset/logs103/mongo.log --port 27016 --bind_ip node3 --logappend -fork

node1查看狀態(tài):

2. 在副本集主結(jié)點(diǎn)將服務(wù)器node3上新啟動(dòng)的 MongoDB 以副本結(jié)點(diǎn)的形式添加到副本集

主節(jié)點(diǎn)中:

rs.add("node3:27016")

出現(xiàn)ok1-->成功成功! 

到此這篇關(guān)于MongoDB副本集部署完整教程的文章就介紹到這了,更多相關(guān)MongoDB副本集部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MongoDB高可用與分片

    MongoDB高可用與分片

    最近項(xiàng)目在使用MongoDB作為圖片和文檔的存儲數(shù)據(jù)庫,為啥不直接存MySQL里,還要搭個(gè)MongoDB集群,麻不麻煩?讓我們一起,一探究竟,繼續(xù)學(xué)習(xí)MongoDB高可用和片鍵策略,實(shí)現(xiàn)快速入門,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • 關(guān)于NoSQL之MongoDB的一些總結(jié)

    關(guān)于NoSQL之MongoDB的一些總結(jié)

    這篇文章主要介紹了關(guān)于NoSQL之MongoDB的一些總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • MongoDB的創(chuàng)建、更新和刪除

    MongoDB的創(chuàng)建、更新和刪除

    下面開始學(xué)習(xí)MongoDB最重要也是最基礎(chǔ)的部分:C(創(chuàng)建)R(查詢)U(更新)D(刪除);由于R(查詢)操作相對來說內(nèi)容比較多,也比較繁瑣,同時(shí)使用頻率也比較高,所以下一篇會(huì)拿出來單獨(dú)介紹。廢話不多說,連上服務(wù)器,我們直接進(jìn)入正題
    2017-05-05
  • 詳解MongoDB范圍片鍵和哈希片鍵

    詳解MongoDB范圍片鍵和哈希片鍵

    這篇文章主要介紹了MongoDB范圍片鍵和哈希片鍵的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MongoDB,感興趣的朋友可以了解下
    2021-03-03
  • MongoDB可視化工具mongodb-compass

    MongoDB可視化工具mongodb-compass

    這篇文章介紹了MongoDB的可視化工具mongodb-compass,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MongoDB中如何使用JOIN操作詳解

    MongoDB中如何使用JOIN操作詳解

    相信大家都知道m(xù)ongodb是不支持join操作的,因此我們只能自己來實(shí)現(xiàn)這個(gè)功能。所以下面這篇文章主要給大家介紹了關(guān)于在MongoDB中如何使用JOIN操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面來一起看看吧。
    2017-07-07
  • Spring Boot中使用MongoDB數(shù)據(jù)庫的方法

    Spring Boot中使用MongoDB數(shù)據(jù)庫的方法

    MongoDB是一個(gè)高性能,開源,無模式的,基于分布式文件存儲的文檔型數(shù)據(jù)庫,由C++語言編寫,其名稱來源取自“humongous”,是一種開源的文檔數(shù)據(jù)庫──NoSql數(shù)據(jù)庫的一種。這篇文章主要介紹了Spring Boot中使用MongoDB數(shù)據(jù)庫的方法,需要的朋友可以參考下
    2017-12-12
  • MongoDB分頁查詢緩慢怎么辦

    MongoDB分頁查詢緩慢怎么辦

    在大數(shù)據(jù)應(yīng)用中,MongoDB的分頁查詢存在性能問題,特別是數(shù)據(jù)量大時(shí),本文探討了性能下降的原因,并提出了多種優(yōu)化策略,如有效使用索引、基于索引的游標(biāo)分頁、使用聚合框架、減少返回?cái)?shù)據(jù)量、使用緩存機(jī)制等,旨在改善大規(guī)模數(shù)據(jù)場景下的查詢效率
    2024-09-09
  • 一次因mongo查詢不存在字段引發(fā)的事故記錄

    一次因mongo查詢不存在字段引發(fā)的事故記錄

    這篇文章主要給大家介紹了關(guān)于一次因mongo查詢不存在字段引發(fā)的事故記錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • MongoDB數(shù)據(jù)庫用戶角色和權(quán)限管理詳解

    MongoDB數(shù)據(jù)庫用戶角色和權(quán)限管理詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫用戶角色和權(quán)限管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論