MongoDB教學
MongoDB快速入門
MongoDB歷史
MongoDB特點
MongoDB數據庫的優點
MongoDB安裝配置(Windows)
MongoDB安裝配置(Ubuntu)
MongoDB安裝配置(RedHat/CentOS)
MongoDB數據建模
MongoDB創建數據庫
MongoDB刪除數據庫
MongoDB創建集合
MongoDB刪除集合
MongoDB數據類型
MongoDB插入文檔
MongoDB查詢文檔
MongoDB更新文檔
MongoDB刪除文檔
MongoDB投影(選擇字段)
MongoDB限制記錄數
MongoDB排序記錄
MongoDB索引
MongoDB聚合
MongoDB複製
MongoDB分片
MongoDB備份與恢復
MongoDB部署
Java連接MongoDB操作
Python連接MongoDB操作
PHP連接MongoDB操作
Ruby連接MongoDB操作
MongoDB複製
複製是跨多個服務器同步數據的過程。複製提供冗餘,並通過不同數據庫服務器上的多個數據副本增加數據可用性。 複製保護數據庫免受單個服務器的丟失。 複製還允許從硬件故障和服務中斷中恢復。 使用其他數據副本,可以將其專用於災難恢復,報告或備份。
爲什麼複製?
- 保持數據安全
- 數據的高可用性(24 * 7)
- 災難恢復
- 維護無停機(如備份,索引重建,壓縮)
- 讀取縮放(額外的副本可讀)
- 副本集對應用程序是透明的
MongoDB複製的工作原理
MongoDB通過使用副本集來實現複製。副本集是託管相同數據集的一組 mongod 實例。 在一個副本中,一個節點是接收所有寫操作的主節點。所有其他實例(例如輔助節點)都應用主節點的操作,以便它們具有相同的數據集。 副本集可以只有一個主節點。
- 副本集是一組兩個或多個節點(通常最少需要
3
個節點)。 - 在副本集中,一個節點是主節點,其餘節點是次要節點。
- 所有數據從主節點複製到輔助節點。
- 在自動故障切換或維護時,選擇爲主節點建立,並選擇新的主節點。
- 恢復故障節點後,它再次加入副本集,並作爲輔助節點。
顯示了MongoDB複製的典型圖,客戶端應用程序始終與主節點進行交互,然後主節點將數據複製到輔助節點。
副本集功能
-
N
個節點的集羣 - 任何一個節點都可以是主節點
- 所有寫入操作都轉到主節點操作
- 自動故障切換
- 自動恢復
- 共識一般選舉
設置副本集
在本教程中,我們將獨立的 MongoDB 實例轉換爲副本集。要轉換爲副本集,以下是步驟 -
- 關機正在運行 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
的 mongod 實例。 - 現在啓動命令提示符並連接到這個 mongod 實例。
- 在Mongo客戶端中,發出命令
rs.initiate()
以啓動新的副本集。 - 要檢查副本集配置,可使用命令
rs.conf()
。 要檢查複製集的狀態,請使用命令rs.status()
。
將會員添加到副本集
要將成員添加到副本集,請在多臺計算機上啓動 mongod 實例。 現在啓動一個 mongo 客戶端併發出一個命令rs.add()
。
語法
rs.add()
命令的基本語法如下:
>rs.add(HOST_NAME:PORT)
示例
假設您的 mongod 實例名稱是 mongod1.net
,它在端口 27017
上運行。要將此實例添加到副本集,請在 Mongo 客戶端中發出命令 rs.add()
。
>rs.add("mongod1.net:27017")
>
只能在連接到主節點時,將 mongod 實例添加到副本集。要檢查是否連接到主服務器,請在 mongo 客戶端中發出命令db.isMaster()
。
rs0:PRIMARY> db.isMaster()
{
"hosts" : [
"ubuntu:27017"
],
"setName" : "rs0",
"setVersion" : 1,
"ismaster" : true,
"secondary" : false,
"primary" : "ubuntu:27017",
"me" : "ubuntu:27017",
"electionId" : ObjectId("7fffffff0000000000000001"),
"lastWrite" : {
"opTime" : {
"ts" : Timestamp(1498896581, 1),
"t" : NumberLong(1)
},
"lastWriteDate" : ISODate("2017-07-01T08:09:41Z")
},
"maxBsonObjectSize" : 16777216,
"maxMessageSizeBytes" : 48000000,
"maxWriteBatchSize" : 1000,
"localTime" : ISODate("2017-07-01T08:09:50.365Z"),
"maxWireVersion" : 5,
"minWireVersion" : 0,
"readOnly" : false,
"ok" : 1
}
rs0:PRIMARY>