副本中的MongoDB使用者
- 我有 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 的使用者和角色,它將保留在那裡,但在複製之後,如果您要為副本成員創建新使用者或角色,則需要重新同步副本集的成員