Replication

在我本地的三個類似的 mongo 數據庫之間創建副本集

  • May 8, 2021

我在本地伺服器上創建 MongoDB 複製,首先手動創建三個不同的數據庫文件夾,名稱如MongoDB,MongoDB1MongoDB2. 他們每個人都有data,binlog子文件夾和一個單獨的mongod.cfg文件。data子文件夾也有子文件夾,這db是我擁有所有數據庫文件的地方。

對我來說MongoDBMongoDB1都是MongoDB2數據庫實例,我將配置添加到文件中的第一個 Mongo 數據庫文件夾 (MongoDB) 中mongod.cfg

processManagement:
  fork: true
net:
  bindIp: 127.0.0.1
  port: 27017
storage:
  dbPath: C:\MongoDB\data\db
systemLog:
  destination: file
  path: "C:\MongoDB\log\mongo.log"
  logAppend: true
storage:
  journal:
     enabled: true
security:
  authorization: enabled
replication:
  replSetName: repl1   

然後,我更改了其他兩個 Mongo 數據庫文件夾(和)的每個配置文件中的參數replSetName、、路徑和。dbpath``systemlog``port number``MongoDB1``MongoDB2

我仍然無法在這三個數據庫文件夾之間創建副本集。

  • 哪一步錯了?
  • 我是否以錯誤的方式創建數據庫文件夾?
  • 我可以知道哪一步是錯誤的以及如何解決嗎?

在我啟動第一個實例的 Mongodb 服務並使用 Windows CMD 提示輸入如下所示的命令開始創建副本集後,它會繼續執行並且永不停止並在我的文件夾中創建一個鎖定文件。

輸入

mongod --port 27017 --dbpath "C:\Mongodb\data\db" --replSet repl1

輸出

Fri Jul 07 09:07:36.787 [initandlisten] MongoDB 開始:pid=15892 port=27017 dbpath=\data\db\ 64-bit host=LT-SRA-EB-27ZL
Fri Jul 07 09:07:36.789 [initandlisten] db 版本 v2.4.9
週五 7 月 7 日 09:07:36.791 [initandlisten] git 版本:52fe0d21959e32a5bdbecdc62057db386e4e029c
Fri Jul 07 09:07:36.792 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
Fri Jul 07 09:07:36.792 [initandlisten] 分配器:系統
Fri Jul 07 09:07:36.792 [initandlisten] options: { replSet: "rpl1" }
Fri Jul 07 09:07:36.798 [initandlisten] journal dir =\data\db\journal
Fri Jul 07 09:07:36.799 [initandlisten] 恢復:不存在日誌文件,不需要恢復
Fri Jul 07 09:07:36.854 [websvr] 管理 Web 控制台等待埠 28017 上的連接
Fri Jul 07 09:07:36.854 [initandlisten] 等待埠 27017 上的連接
Fri Jul 07 09:07:36.867 [rsStart] replSet 無法從自己或任何種子 (EMPTYCONFIG) 獲取 local.system.replset 配置
Fri Jul 07 09:07:36.867 [rsStart] replSet info 您可能需要在 shell 中執行 replSetInitiate -- rs.initiate() -- 如果尚未完成
Fri Jul 07 09:07:41.517 [initandlisten] 接受來自 127.0.0.1:56889 #1 的連接(現在打開 1 個連接)
週五 7 月 7 日 09:07:41.526 [conn1] 結束連接 127.0.0.1:56889(現在打開 0 個連接)
Fri Jul 07 09:07:44.513 [initandlisten] 接受來自 127.0.0.1:56890 #2 的連接(現在打開 1 個連接)
Fri Jul 07 09:07:44.525 [conn2] assertion 13435 not master and slaveOk=false ns:sc82rev161221_tracking_contact.ProcessingPool 查詢:{ $query: { Scheduled: { $lte: new Date(1499432864509) } }, $orderby: { Scheduled : 1 } }
週五 7 月 7 日 09:07:44.525 [conn2] ntoskip:0 ntoreturn:16
週五 7 月 7 日 09:07:44.525 [conn2] 結束連接 127.0.0.1:56890(現在打開 0 個連接)
Fri Jul 07 09:07:46.529 [initandlisten] 接受來自 127.0.0.1:56891 #3 的連接(現在打開 1 個連接)
Fri Jul 07 09:07:46.870 [rsStart] replSet 無法從自己或任何種子 (EMPTYCONFIG) 獲取 local.system.replset 配置
Fri Jul 07 09:07:56.505 [initandlisten] 接受來自 127.0.0.1:56892 #4 的連接(現在打開 2 個連接)
Fri Jul 07 09:07:56.515 [conn4] 斷言 13435 不是 master 和 slaveOk=false ns:sc82rev161221_tracking_live.ProcessingPool 查詢:{ $query: { Scheduled: { $lte: new D
  • 在創建 ReplicaSet 之前,如何創建三個包含數據庫的數據庫實例/伺服器?
  • 關於創建三個數據庫實例/伺服器,我的上述方法是否正確?
  • 我可以知道使用 windows cmd 命令在本地的這三個數據庫之間創建 ReplicaSet 的所有步驟嗎?

我知道我在某個地方犯了錯誤,但我不知道在哪裡。您的回饋會有所幫助。

錯誤是更改 replSetName!如果您有副本集,則屬於該副本集的每個成員都必須(當然)具有相同的 replSetName。

所以,在每個 mongod.conf 文件中必須有相同的

replSetName: repl1

啟動這三個副本集節點後,使用命令連接其中一個mongo並發出rs.initiate( { _id : "repl1", members: [ { _id : 0, host : "localhost:27017" } ] })命令。幾秒鐘後,按“Enter”,它應該說 PRIMARY。之後,您可以使用rs.add("localhost:27018")rs.add("localhost:27019")命令添加這兩個其他節點。 rs.status()並將rs.conf()顯示您有正常執行的副本集。

幾樣東西:

  • 您需要replset在所有 3 個配置文件中具有相同的名稱
  • 查看您的 dbpath 的值。為什麼你有兩個\\
  • 你 mongod 應該持續執行而不是停止。如果您不想同時打開太多視窗,您可以將它們作為服務執行,甚至使用批處理文件。
  • 啟動所有 3 個並讓它們執行。
  • 連接到mongoshell 並啟動您的副本集。

rs.initiate({_id:“rs0”,成員:

$$ { _id : 0, host : “mongodb0.example.net:27017” } $$ })

  • 文件的第 4 步開始。

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