MongoDB複製集搭建(Window10系統下)
一、獲取mongodb安裝包
本示例mongo版本:mongodb-win32-x86_64-3.4.17.zip
二 、安裝mongo
(1)解壓 mongodb-win32-x86_64-3.4.17.zip,解壓之後檔名可自定義。Mongodb8881是我自定義的檔名。
(2)在解壓檔案的 bin 的同級目錄建立 data和log 目錄 , 在data目錄下建立db目錄。
(3)本次示例以配置檔案啟動,建立啟動檔案, mongo.config ,該檔案和 bin 目錄同級。
(4)編輯配置檔案mongo.config,檔案內容示例:
dbpath=C:\DEV\Mongodb8881\data\db 資料儲存目錄 logpath=C:\DEV\Mongodb8881\log\mongo.log 日誌儲存目錄 port=8881 mongodb 啟動埠 logappend=true 以追加的方式記錄日誌。不同方式可自行搜尋。
【說明*】C:\DEV\Mongodb8881 為mongodb安裝包解壓後所對應的磁碟目錄【*】
(5)啟動Mongo ,
進入命令列: win+R
進入到Mongo 安裝包目錄 : cd C:\DEV\Mongodb8881
執行命令: .\bin\mongod -config mongo.config
(6)重新開啟一個命令列視窗
進入到mongodb 安裝包的 bin 目錄下,執行命令:mongo
由於 mongo 預設連線的是本地的 27017 埠,所以為了連線到指定IP下的埠,需要補充IP地址和埠號
mongo 127.0.0.1:8881
至此,mongo 單例項安裝完畢。
三、基於單例項的複製集安裝
上邊已經介紹了mongodb 的單例項安裝,下邊開始安裝 mongo 複製集。
先將 mongodb 解壓出來的安裝包複製多份。
為了方便觀察,此處我均以 啟動埠號作為 mongo安裝包的目錄字尾
【注意點】
mongo 複製集初始化的時候,需要將從節點的資料庫全部刪除(包括預設的 local 和 admin)。主節點admin 庫不可刪除.
主節點的選用規則,一般已經有資料的一般都作為主節點。
為了下邊的敘述方便,均以埠號對應各個例項。
3-1)分別按照單例項的方式安裝四個例項,
8881 資料庫已經包含有資料,我們就在8881 上設定複製集資訊。
(3-2)連線 8882、8883、8884,刪除他們下邊的所有資料庫。
連線 8882
命令:mongo 127.0.0.1:8882
要刪除據庫A,則切換到庫A ,
命令:db.dropDatabase();
根據上述規則刪除所有資料庫。8883、8884 刪庫操作同8882一樣。
(3-3)關閉8881、8882、8883、8884
修改 8881、8882、8883、8884 的配置檔案,增加複製集配置,完整配置示例:
dbpath=C:\DEV\Mongodb8881\data\db
logpath=C:\DEV\Mongodb8881\log\mongo.log
port=8881
logappend=true
# oplog的大小(MB)
oplogSize=1024
# 副本集名稱(要確保同一個複製集名稱要一致)
replSet=groupone
# 啟用日誌選項,MongoDB的資料操作將會寫入到journal資料夾的檔案裡,該目錄位於 data\db 下
journal=true
(3-4)四個例項的配置檔案修改完成之後,啟動四個例項(必須四個示例都以複製集的方式啟動成功)
(3-4-1)連線 8881 例項,
(3-4-2)切換到 admin,命令列建立初始化物件 config
config={_id:"groupone",members:[{_id:0,host:"127.0.0.1:8881"},{_id:1,host:"127.0.0.1:8882"}, {_id:2,host:"127.0.0.1:8883"},{_id:3,host:"127.0.0.1:8884"}]}
(3-4-3)執行初始化命令: rs.initiate(config)
設定成功之後,分別連線到各個例項檢視:如下圖所示
(3-5)複製集設定成功之後,從節點如果需要在命令列執行命令,需要執行命令:
rs.slaveOk()
(3-6)複製集主節點 8882 宕機之後,重啟8882,此時舊的主節點8882 已經成為了從節點,而剩下的從節點之中會產生一個主節點。具體實際操作大家可以多嘗試幾次,這裡不再做演示。
四、 異常處理:
(4-1)複製級例項均需新增相關配置,否則報錯如下:
(4-2)如果在設定複製機的時候報錯,部分節點已經包含有資料,就需要停止該例項,修改該例項的配置檔案,恢復到單例項狀態,再執行刪除資料庫操作。錯誤提示如下:
解決方法:
(1)先停止 8882,直接在8882上操作,不會刪除成功,原因是8882此時啟動模式是複製集模式,不是主節點是無法操作資料庫的,刪除失敗的提示如下:
(2)刪除8882 對應的mongo.config 中複製集相關配置,恢復單例項模式,以單例項模式啟動
連線8882例項,執行(3-2)操作。
(3)8882資料全部刪除成功之後,停止8882例項 ,再把 8882 複製集相關配置加上,啟動 8882。