鍍金池/ 教程/ 數(shù)據(jù)庫/ 復制
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級索引
索引
優(yōu)勢
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫
固定集合
關(guān)系
聚合
自動增長
復制
限制記錄
部署
分片
正則表達式
原子操作

復制

復制是一種在多個服務器上同步數(shù)據(jù)的過程。通過在不同的數(shù)據(jù)庫服務器上實現(xiàn)多個數(shù)據(jù)副本,復制能夠?qū)崿F(xiàn)數(shù)據(jù)冗余,提高數(shù)據(jù)的可用性,從而避免了僅僅因為一臺服務器故障后就會產(chǎn)生的數(shù)據(jù)庫災難??傊?,復制可以使你免受硬件故障與服務中斷的影響,及時恢復數(shù)據(jù)。由于數(shù)據(jù)有多個副本,所以可以將其中一個副本用于災難恢復、報告或備份。

為什么需要復制

  • 保持數(shù)據(jù)安全
  • 保證數(shù)據(jù)的高可用性(24 小時 × 7 天,全年無休)
  • 災難恢復
  • 無需停機維護(比如進行備份、索引重建,壓縮等任務)
  • 讀取的可擴展性(可讀取其他副本)
  • 副本集對應用的公開性

復制在 MongoDB 中的運作方式

MongoDB 使用副本集(replica set)來實現(xiàn)復制操作。副本集是一組托管同一數(shù)據(jù)集的 mongod 對象。在副本集中,主節(jié)點負責接收寫入操作。所有其他的實例(從節(jié)點)則通過執(zhí)行主節(jié)點的操作來擁有同樣的數(shù)據(jù)集。副本集中只有一個主節(jié)點。

  1. 副本集具有 2 個或多個節(jié)點(但一般最少需要 3 個節(jié)點)。
  2. 副本集只有一個主節(jié)點,其他全是從節(jié)點。
  3. 所有數(shù)據(jù)都是從主節(jié)點復制到從節(jié)點上的。
  4. 當發(fā)生自動故障轉(zhuǎn)移或維護時,會重新推舉一個新的主節(jié)點。
  5. 當失敗節(jié)點恢復后,該節(jié)點重新又連接到副本集中,重新作為從節(jié)點。

下圖展示了一個典型的 MongoDB 復制圖。客戶端應用總是跟主節(jié)點交互,主節(jié)點將數(shù)據(jù)復制到從節(jié)點上。

http://wiki.jikexueyuan.com/project/mongodb/images/replication.png" alt="replication" />

副本集特點

  • 具有 N 個節(jié)點的集群
  • 任何節(jié)點都可能成為主節(jié)點
  • 所有寫入操作必須由主節(jié)點來完成
  • 自動故障轉(zhuǎn)移
  • 自動故障恢復
  • 重新推舉主節(jié)點

建立副本集

在本教程中,我們將把單獨的一個 mongod 實例轉(zhuǎn)變?yōu)楦北炯襟E如下:

  1. 關(guān)閉正在運行的 MongoDB 服務器。

  2. 指定 --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() 命令。

上一篇:索引下一篇:全文檢索