Replication

副本中的MongoDB使用者

  • January 20, 2022
  1. 我有 mongo 實例 A、B 和 C,每個實例都有一組具有不同角色的不同使用者。我使用 mongo shell 通過管理員使用者與 A 連接。現在,要創建副本並添加 B 和 C,我是否需要通過 B 和 C 上的身份驗證。您能幫我執行命令嗎?

2)我有 mongo 實例 A、B 和 C,每個實例都有一組具有不同角色的不同使用者。在我用 A、B 和 C 創建一個副本後,各個節點的使用者會發生什麼。每個節點的所有使用者都在副本中可用嗎?

因此,在您的情況下,目前所有節點(A、B 和 C)都作為具有不同數據集的獨立節點執行。

現在您正在嘗試使用現有節點建立副本。

根據您的問題,首先,您嘗試將節點 A 轉換為副本集成員,然後將 B 和 C 添加到副本集。所以大多數情況下,在這種情況下,節點 A 將成為主要節點,而 B 和 C 將被添加為次要節點。由於 B 和 C 作為次要添加了一次,它將複製 A 中的所有數據。這個一次性過程稱為Initial Sync

當 Initial Sync 發生時,mongod 會刪除 B 和 C 節點的 dbPath 目錄的內容。

請按照部署副本集中的步驟設置副本集。

回答您的第二個問題,此過程將刪除節點 B 和 C 中的所有使用者和數據。

我有 mongo 實例 A、B 和 C,每個實例都有一組具有不同角色的不同使用者。我使用 mongo shell 通過管理員使用者與 A 連接。現在,要創建副本並添加 B 和 C,我是否需要通過 B 和 C 上的身份驗證。您能幫我執行命令嗎?

正如**@AdamC**已經說過的,如果他們是同一個副本集的成員,那麼不是。使用者將被寫入主伺服器,然後復製到輔助伺服器 - 請記住,任何輔助伺服器都可以成為正常集合中的主伺服器,因此您必須擁有執行此操作所需的所有數據,包括使用者。如果添加時節點在集合中,則使用者將正常複製。如果您稍後添加它們,它們將在初始同步過程中複製使用者。

假設您有 3 個節點副本集,如 A、B、C

節點 A 的配置文件為(A.conf

例如我提到的節點A配置文件

storage:
 dbPath: /var/mongodb/db/A
net:
 bindIp: 192.168.xxx.xxx,localhost
 port: 27011                --- node A port no
security:
 authorization: enabled
 keyFile: /var/mongodb/pki/Example-keyfile
systemLog:
 destination: file
 path: /var/mongodb/db/A/mongod.log
 logAppend: true
processManagement:
 fork: true
replication:
 replSetName: StackExachange-example

節點B.conf文件

storage:
 dbPath: /var/mongodb/db/B
net:
 bindIp: 192.168.xxx.xxx,localhost
 port: 27012                --- node B port no
security:
 authorization: enabled
 keyFile: /var/mongodb/pki/Example-keyfile
systemLog:
 destination: file
 path: /var/mongodb/db/B/mongod.log
 logAppend: true
processManagement:
 fork: true
replication:
 replSetName: StackExachange-example

節點C.conf文件

storage:
 dbPath: /var/mongodb/db/C
net:
 bindIp: 192.168.xxx.xxx,localhost
 port: 27013                --- node C port no
security:
 authorization: enabled
 keyFile: /var/mongodb/pki/Example-keyfile
systemLog:
 destination: file
 path: /var/mongodb/db/C/mongod.log
 logAppend: true
processManagement:
 fork: true
replication:
 replSetName: StackExachange-example

注意:這裡每個節點的dbpath(即A,B,C會不同)

在使用不同路徑製作 A、B、C 的配置文件後,啟動 mongod 伺服器程序。

使用 A.conf、B.conf 和 C.conf 啟動 mongod 程序:

mongod -f A.conf
mongod -f B.conf
mongod -f C.conf

啟動所有節點的mongod程序後,假設我將使用mongo shell連接到節點A

mongo --port 27011  --- here port no 27011 is port no of A

啟動副本集:

rs.initiate()

創建使用者:

使用管理員 db.createUser({ 使用者:“StackExchange-admin”,密碼:“StackExchange-pass”,角色:

$$ {role: “root”, db: “admin”} $$ })

注意:這裡我正在創建節點 A 的 admin 數據庫的使用者和密碼。

退出 Mongo shell 並連接到整個副本集:

exit
mongo --host "StackExchange-example/192.168.xxx.xxx:27011" -u "StackExchange-admin"
-p "StackExchange-pass" --authenticationDatabase "admin"

獲取副本集狀態:

rs.status()

將其他成員添加到副本集:

rs.add("B:27012")
rs.add("C:27013")

獲取副本集拓撲的概述:

rs.isMaster()

降級目前的主要:

rs.stepDown()

選舉後檢查副本集概覽:

rs.isMaster()

我有 mongo 實例 A、B 和 C,每個實例都有一組具有不同角色的不同使用者。在我用 A、B 和 C 創建一個副本後,各個節點的使用者會發生什麼。每個節點的所有使用者都在副本中可用嗎?

據我了解,這裡的 mongo 實例 (A,B,C) 表示三個 mongod。假設在節點 A、B、C 的三個節點中,他們有一些具有不同角色的不同使用者。假設當節點 A 使用其管理數據庫和角色身份驗證作為主副本集進行複制時。

與複製之前的任何內容一樣,您擁有節點 B、C 的使用者和角色,它將保留在那裡,但在複製之後,如果您要為副本成員創建新使用者或角色,則需要重新同步副本集的成員

為了進一步參考這裡這里這裡

引用自:https://dba.stackexchange.com/questions/234451