MongoDb的副本集搭建教程(個人操作筆記)


很多公司都在用MongoDb ,一直沒有時間研究,最近好好的整了一下,做下筆記,直接上操作步驟,關於Mongodb的理論知識可以搜索其他資料,也可以聯系我索取

mongoDB官方已經不建議使用主從模式,替代方案是采用副本集的模式,主從模式其實就是一個單副本的應用,沒有很好的擴展性和容錯性。而副本集具有多個副本保證了容錯性,就算一個副本掛掉了還有很多副本存在,並且解決了上面 第一個問題“主節點掛掉了,整個集群內會自動切換”。難怪mongoDB官方推薦使用這種模式。我們來看看mongoDB副本集的架構圖:

 

由圖可以看到客戶端連接到整個副本集,不關心具體哪一台機器是否掛掉。主服務器負責整個副本集的讀寫,副本集定期同步數據備份,一但主節點掛掉,副本節點就會選舉一個新的主服務器,這一切對於應用服務器不需要關心。我們看一下主服務器掛掉后的架構:

副本集中的副本節點在主節點掛掉后通過心跳機制檢測到后,就會在集群內發起主節點的選舉機制,自動選舉一位新的主服務器。看起來很牛X的樣子,我們趕緊操作部署一下!
官方推薦的副本集機器數量為至少3個,那我們也按照這個數量配置測試。

1、准備兩台機器 192.168.176.129、192.168.176.130、192.168.176.131。 192.168.176.129 當作副本集主節點,192.168.176.130、192.168.176.131作為副本集副本節點

2、分別在每台機器上建立mongodb副本集測試文件夾及Data目錄

  

3、分別啟動三台機器的MongoDB服務:

#cd /opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin
#啟動時指定數據文件路徑 和副本集名稱
#./mongod --dbpath /opt/soft/mongodb/data/ --replSet repset

4、初始化副本集  登錄三台機器中的任意一台,比如:129這台

#/opt/soft/mongodb/mongodb-linux-x86_64-3.2.1/bin/mongo
........日志信息省略
#>>config = { _id:"repset", members:[ {_id:0,host:"192.168.176.129:27017"}, {_id:1,host:"192.168.176.130:27017"}, {_id:2,host:"192.168.176.131:27017"}] }

  打印信息:

    {  
            "_id" : "repset",  
            "members" : [  
                    {  
                            "_id" : 0,  
                            "host" : "192.168.176.129:27017"  
                    },  
                    {  
                            "_id" : 1,  
                            "host" : "192.168.176.130:27017"  
                    },  
                    {  
                            "_id" : 2,  
                            "host" : "192.168.176.131:27017"  
                    }  
            ]  
    }  
#初始化副本集配置
rs.initiate(config);

#如果成功了返回
{ "ok" : 1 }

#如果出現一下信息,查看一下服務器的防火牆
{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: 192.168.176.129:27017 failed with No route to host, 192.168.176.131:27017 failed with No route to host",
        "code" : 74
}

5、查看集群狀態

 

  

  到此整個副本集已經搭建完成。下面趕快測試一下吧

主節點負責寫操作,所以我們在130這台機器上執行寫操作

repset:PRIMARY> db.benxq.insert({"name":"zhangsan"})

在131機器上執行讀操作讀一下

repset:SECONDARY> db.benxq.find()
#mongodb默認是從主節點讀寫數據的,副本節點上不允許讀,需要設置副本節點可以讀。 Error:
error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }

repset:SECONDARY> db.getMongo().setSlaveOk(); 

#可以看到數據已經復制到了副本集。
repset:SECONDARY> db.benxq.find();

6、故障轉移測試

 我們將130這台主節點停掉模仿服務器故障,在129上執行rs.status()

  

 

我們可以看到已經將131這台服務器選舉為了新的主節點,這是我們重新啟動130,就會自動的成為了副節點。

 

 

  

 


免責聲明!

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



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