在我本地的三個類似的 mongo 數據庫之間創建副本集
我在本地伺服器上創建 MongoDB 複製,首先手動創建三個不同的數據庫文件夾,名稱如
MongoDB
,MongoDB1
和MongoDB2
. 他們每個人都有data
,bin
和log
子文件夾和一個單獨的mongod.cfg
文件。data
子文件夾也有子文件夾,這db
是我擁有所有數據庫文件的地方。對我來說
MongoDB
,MongoDB1
都是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 個並讓它們執行。
- 連接到
mongo
shell 並啟動您的副本集。rs.initiate({_id:“rs0”,成員:
$$ { _id : 0, host : “mongodb0.example.net:27017” } $$ })
- 從本文件的第 4 步開始。