分佈式文檔存儲數據庫(MongoDB)副本集配置

副本集特徵:

  • N 個節點的集羣
  • 任何節點可做爲主節點
  • 全部寫入操做都在主節點上
  • 自動故障轉移
  • 自動恢復

 

相關文章:javascript

                                http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.htmlhtml

菜鳥教程MongoDB配置: http://www.runoob.com/mongodb/mongodb-tutorial.htmljava

推薦官網的副本集配置:   https://docs.MongoDB.com/manual/tutorial/deploy-replica-set/mysql

引述大神一段總結:        http://blog.csdn.NET/huwei2003/article/details/40453223spring

{sql

MongoDB的複製至少須要兩個節點。其中一個是主節點,負責處理客戶端請求,其他的都是從節點,負責複製主節點上的數據。mongodb

從概念上說一下MongoDB副本集主從複製的區別。數據庫

其實副本集(Replica Set)是主從複製的高級形式。高級在哪裏呢?主動複製實現了數據備份+讀擴展,可是master一旦宕機,全部服務將中止,須要手動啓動slave。而副本集在此基礎上實現了備份自動重啓的功能,也就是某一臺slave會自告奮勇,擔當起master的職責。因此有三個角色,master(Primary),slave(Secondary),還有仲裁服務器。服務器

}測試

下面是我本身的測試過程

環境:win7,MongoDB3.2 

副本集優點:副本集實現了備份自動重啓的功能,也就是master一旦down掉,無需手動啓動slave ,某一臺會自動slave自告奮勇,擔當起master的職責,維持數據庫的讀寫操做

目標:

 

一臺master(primary):master 192.168.228.1:27017

三臺slave(secondary):mslave1 192.168.228.1:27018 ;   mslave2 192.168.228.1:27019 ;  mslave3 192.168.228.134:27017

其中192.168.228.1是本地win7地址,192.168.228.134是我虛擬機win7的地址,都是64位

(我機器和虛擬機用的nat方式互聯,全部個人地址192.168.228.1這麼噁心的地址    T_T)

 

第一步:基本配置

略過mongodb的安裝和基本操做,我之前的文章都寫的很清楚,不贅述

http://blog.csdn.Net/rainyspring4540/article/details/52584257

 

第二步:手動建立四個服務實例的文件目錄,,並配置好各自bin目錄的環境變量

192.168.228.1:27017      對應 本機D:/data/rs27017

192.168.228.1:27018      對應 本機D:/data/rs27018

192.168.228.1:27019      對應 本機D:/data/rs27019

192.168.228.134:27017  對應 虛擬機D:/data

 

第二步:首先啓動本地192.168.228.1:27017的服務器副本集實例,做爲master

cmd打開命令提示符,運行

 

mongod  --dbpath d:/data/rs27017 --replSet mySet  --port 27017  

啓動服務後,另打開一個命令提示符進行登錄

 

 

mongo --port 27017  

接着定義變量,運行:

 

conf = {_id:"mySet",members:[{_id:0,host:"192.168.228.1:27017"}]}  

回車

 

接着運行初始化:

 

rs.initiate(conf)  

回車顯示以下:

 

 

接着你輸入(設置主數據庫)

 

 

db.isMaster()  

會顯示出你的當前數據庫服務實例已經加到副本集中,而且是master,如圖:

 

 

第三步:啓動本地其餘的服務,加入到副本集中

即192.168.228.1:27018和192.168.228.1:27019

打開2個命令提示符,分別輸入並回車

 

 

mongod --dbpath d:/data/rs27018 --replSet mySet --port 27018  

mongod --dbpath d:/data/rs27019 --replSet mySet --port 27019  

 

另外在本地打開命令提示符,登錄master,

 

 

mongo --port 27017  


接着添加剛剛那2個服務實例到副本集中,分別輸入並回車

 

 

rs.add("192.168.228.1:27018")  

rs.add("192.168.228.1:27019")  


顯示以下:

 

添加成功了,

此時你能夠登錄任意機器輸入rs.status()查看集合,我登錄的是slave  192.168.228.1:27019

如圖:

 

第四步:添加虛擬機的數據庫服務器到副本集中

即192.168.228.134:27017

方法基本同上:到虛擬機中先啓動服務,一樣運行

 

mongod --dbpath d:/data --replSet mySet --port 27017  

接着回到本機,打開命令提示符,登錄master

 

mongo --port 27017  

同上接着添加虛擬機的服務到副本集中

 

rs.add("192.168.228.134:27017")  

一切ok了

 

測試:

1 登錄master 插入一些數據,再去slave裏看 一樣存在,複製成功,

      注意:新建的slave是不能讀和寫的,當在從服務器上讀時會出現errmsg:not master and slaveOk=flase code:13435 錯誤,須要執行:rs.slaveOk()來開啓讀功能

2 關閉master的窗口(即中止master服務)後,原來的master沒法訪問,另外的一個slave變成了master,依然能夠正常添加修改數據

3 我這裏配置讀寫的都是採用默認的,即master是讀寫,slave只讀

4 登陸任意服務實例,運行rs.isMaster()能夠查看當前服務是不是master,運行rs.status()查看副本羣內部狀況

相關文章
相關標籤/搜索