mongodb3.2副本集配置


網上的資料太亂了,等弄好了再看官網才發現官網寫的最清晰和簡潔
 
從概念上說一下MongoDB副本集和主從復制的區別。其實副本集(Replica Set)是主從復制的高級形式。高級在哪里呢?主動復制實現了數據備份+讀擴展,但是master一旦down掉,需要手動啟動slave。副本集在此基礎上實現了備份自動重啟的功能,也就是某一台slave會挺身而出,擔當起master的職責。所以有三個角色,master(Primary),slave(Secondary),還有仲裁服務器。
 
環境:win7,MongoDB3.2 
副本集優勢:副本集實現了備份自動重啟的功能,也就是master一旦down掉,無需手動啟動slave ,某一台會自動slave挺身而出,擔當起master的職責,維持數據庫的讀寫操作
目標:
一台master(primary):master 127.0.0.1:5555
三台slave(secondary):mslave1 127.0.0.1:6666 ;   mslave2 127.0.0.1:7777 ;  mslave3 192.168.228.134:27017
其中192.168.228.134是我虛擬機win7的地址,都是64位
 
第一步:基本配置
略過mongodb的安裝和基本操作,見我另一篇博文: http://www.cnblogs.com/leskang/p/6000852.html
 
第二步:設置master服務器
1、手動創建四個服務實例的文件目錄,,並配置好各自bin目錄的環境變量,我本地的話只要配置一次
127.0.0.1:5555  對應 本機D:\mongodata\5555
127.0.0.1:6666 對應 本機D:\mongodata\6666
127.0.0.1:7777  對應 本機E:\mongodata\7777
192.168.228.134:27017  對應 虛擬機D:/data
 
2、啟動本地127.0.0.1:5555的服務器副本集實例,作為master
cmd打開命令提示符,運行
mongod --dbpath D:\mongodata\5555 --replSet mySet --port 5555 
啟動服務后,另打開一個命令提示符進行登陸
mongo --port 5555
接着定義變量,運行:
conf = {_id:"mySet",members:[{_id:0,host:"127.0.0.1:5555"}]}  
回車
接着運行:
rs.initiate(conf) 
回車顯示如下:
 
接着你輸入:
db.isMaster() 
會顯示出你的當前數據庫服務實例已經加到副本集中,並且是master,如圖:
 
 
第三步:啟動本地其他的服務,加入到副本集中,即127.0.0.1:5555和127.0.0.1:6666
打開2個命令提示符,分別輸入並回車
mongod --dbpath D:\mongodata\6666 --replSet mySet --port 6666  
mongod --dbpath E:\mongodata\7777 --replSet mySet --port 7777  
另外在本地打開命令提示符,登陸master:
mongo --port 27017  
接着添加剛剛那2個服務實例到副本集中,分別輸入並回車:
rs.add("127.0.0.1:6666")
rs.add("127.0.0.1:7777")
顯示如下:
添加成功了,此時你可以登陸任意機器輸入rs.status()查看集合,我登陸的是slave  127.0.0.1:7777
如圖:
 
 
第四步:添加虛擬機的數據庫服務器到副本集中
即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 登錄任意服務實例,運行rs.isMaster()可以查看當前服務是否是master,運行rs.status()查看副本群內部情況
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM