復制是一種在多個服務器上同步數(shù)據(jù)的過程。通過在不同的數(shù)據(jù)庫服務器上實現(xiàn)多個數(shù)據(jù)副本,復制能夠?qū)崿F(xiàn)數(shù)據(jù)冗余,提高數(shù)據(jù)的可用性,從而避免了僅僅因為一臺服務器故障后就會產(chǎn)生的數(shù)據(jù)庫災難??傊?,復制可以使你免受硬件故障與服務中斷的影響,及時恢復數(shù)據(jù)。由于數(shù)據(jù)有多個副本,所以可以將其中一個副本用于災難恢復、報告或備份。
MongoDB 使用副本集(replica set)來實現(xiàn)復制操作。副本集是一組托管同一數(shù)據(jù)集的 mongod 對象。在副本集中,主節(jié)點負責接收寫入操作。所有其他的實例(從節(jié)點)則通過執(zhí)行主節(jié)點的操作來擁有同樣的數(shù)據(jù)集。副本集中只有一個主節(jié)點。
下圖展示了一個典型的 MongoDB 復制圖。客戶端應用總是跟主節(jié)點交互,主節(jié)點將數(shù)據(jù)復制到從節(jié)點上。
http://wiki.jikexueyuan.com/project/mongodb/images/replication.png" alt="replication" />
在本教程中,我們將把單獨的一個 mongod 實例轉(zhuǎn)變?yōu)楦北炯襟E如下:
關(guān)閉正在運行的 MongoDB 服務器。
指定 --replSet 選項來開啟 MongoDB 服務器。--replSet 的基本格式如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
該命令會在端口 27017 處啟動一個名為 rs0 的 MongoDB 實例。在命令行提示符上輸入命令連接到該 MongoDB 對象上。在 MongoDB 客戶端使用 rs.initiate()
命令來初始化一個新的副本集。檢查該副本集設置,則需使用 rs.conf()
。檢查副本集狀態(tài)使用 rs.status()
。
為了向副本集添加成員,在多臺機器上開啟多個 MongoDB 實例。開啟一個 MongoDB 客戶端,然后使用 rs.add()
命令。
基本的 rs.add()
命令語法格式如下所示:
>rs.add(HOST_NAME:PORT)
假設 MongoDB 實例名稱為 mongodb1.net,且運行在 27017 端口處。為了將該實例添加到副本集中,請在 MongoDB 客戶端中使用 rs.add()
。
>rs.add("mongod1.net:27017")
>
只有當連接到主節(jié)點上時,才能向副本集中添加 MongoDB 實例。要想查看是否連接的是主節(jié)點,請在 MongoDB 客戶端上使用 db.isMaster()
命令。