目錄:
6. [Database][MongoDB] 製作複本 ( Replica Sets )
6. [Database][MongoDB] 製作複本 ( Replica Sets )
前言:
Replicat Sets是由多個MongoDB所組合而成的群組,保存著相同的資料,藉此讓資料庫保持不中斷的運作,具有高可用性。在製作Replicat Sets前,必須先了解一些專有名詞。
在Replicat Sets可以分成三個角色:Primary, Secondary, 與Arbiter
- Primary
- Secondary
- Arbiter
Replicat Sets每一個資料庫均會維持彼此的連線,確認每個資料庫是否正常運作。群組內
對外讀寫資料、主要的資料庫,我們稱為Primary。當資料庫內容有異動時,會同步更新
其他的資料庫(我們稱之為Secondary,可以擁有多個),如下圖所示:
當Primary毀損、停止或發生無法運作的情況,其中一個Secondary會被剩餘的資料庫表決
成為Primary,繼續進行運作。無法運作的資料庫恢復後,將會成為Secondary,與Primary
同步資料。
當然,Replicat Sets的架構可能如下圖。Arbiter,當Primary資料庫停止的時候,Secondary
若為偶數個,可能發生無法決定誰為Primary情況發生,Arbiter就會擁有投票的功能,排
除無法決定Primary的問題發生。Arbiter不儲存副本資料。
Replicat Sets實作上需要啟動數個Mongodb,建議大家在可以複製設置指令在記事本上
或建立服務,在實作過程中可以減少指令的登打。
執行步驟:
注意1:MongoDB設置指令格式(configuration file format)會因為資料庫版本不同還有所差異,
操作前請先確認您的版本。
2.6後 : YAML-based configuration file format
2.4(含以前)的格式可於2.6後使用(保留向後兼容性)
注意2:
首先你必須要有三個Mongodb,無論是在同一台主機,或者在不同主機皆可。本範例
環境使用同一台主機,建立三個mongodb(不同port)來進行。
若您的MongoDB(請依情況調整您的步驟):
1.已經建置設定好,可以略過Step 1、
2.在不同的主機,您可以個別建立MongoDB,不需要建立三個資料夾
Step 1.建立三個資料夾,用於存放資料庫資料,本範例建立:C:\data、C:\data1與C:\data2
Step 2.每個資料夾中建立db與log資料夾(db1、db2、db3....)
Step 3.啟動三個command, 分別啟動各自的MongoDB
mongod --port 27017 --dbpath C:\data\db --replSet rs0 --smallfiles --oplogSize 128 mongod --port 27020 --dbpath C:\data1\db1 --replSet rs0 --smallfiles --oplogSize 128 mongod --port 27021 --dbpath C:\data2\db2 --replSet rs0 --smallfiles --oplogSize 128
或
你可以將每個資料庫設定configuration file並註冊服務(請參考第二章),啟動服務。
configuration file參考如下
systemLog: destination: file path: c:\data\log\mongod.log storage: dbPath: c:\data\db journal: enabled: true net: port: 27017 replication: oplogSizeMB: 128 replSetName: rs0
Step 4.我們先連線到我們想設定為Primary的主機
mongo -port 27017
連線之後,我們輸入下列指令:
rs.initiate()
Step 5.分別輸入下列指令進行設定
rsconf = { _id: "rs0", members: [ { _id: 0, host: "AFTadmin:27017" } ] }
rs.initiate( rsconf )
Step 6.輸入以下指令進行設定
rs.conf()
Step 7.設定完成後,接下來我們需要加入其他MongoDB,輸入格式(建議使用domain):
rs.add("domain or ip:port")
若您的主機為不同台,可以輸入您MongoDB主機所在domoin(or IP)與port
rs.add("AFTadmin-PC:27020") rs.add("AFTadmin-PC:27021")
Step 8. 使用rs.status() 指令檢查Replica Sets,即完成。
(若狀態在startup,稍等後就會變成primary or secondary)
rs.status()
心得:
終於寫到Replicat Sets了!! (7篇文章寫了三個月~ lol)雖然實作上早在第一篇MongoDB介紹與安裝就已經完成,也已經做好文章截圖,
但是要寫出一篇讓未來的自己與其他人容易懂的文章真的不容易,
而我也還不斷學習如何將文章寫好。
另外筆者還想實做的還有Aggregations、Sharding與C# with mongodb,等有工作上有機會
接觸或較空閒的時候再進行實作,再陸續補上紀錄。
參考資料:
MongoDB 3.0 Manual - http://docs.mongodb.org/manual/--
謝謝!
0 留言