MongoDB副本集搭建及備份恢復


一、MongoDB副本集(repl set)介紹

早起版本使用master-slave,一主一從和MySQL類似,但slave在此架構中為只讀,當主庫宕機后,從庫不能自動切換為主;

目前已經淘汰了master-slave模式,改為副本集,這種模式下有一個主(primary),和多個從(secondary),只讀,支持給他們設置權重,當主宕掉后,權重最高的從切換為主;

在此架構中還可以建立一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據

在此架構中讀寫數據都是在主上,要想實現負載均衡的目的需要手動指定讀庫的目標server

二、MongoDB副本集搭建

服務器環境准備

三台服務器都是CentOS release 6.5 (Final)

192.168.1.203(primary)

192.168.1.201(secondary)

192.168.1.202(secondary)

編輯三台機器的配置文件,加入如下內容

replication:

  oplogSizeMB: 20 #oplog大小

  replSetName: fansik #名稱自定義

重啟三台MongoDB服務

連接主,在主上運行命令mongo,然后

> use admin

>config={_id:"fanjinbao",members:[{_id:0,host:"192.168.1.203:27017"},{_id:1,host:"192.168.1.201:27017"},{_id:2,host:"192.168.1.202:27017"}]}

> rs.initiate(config)

> rs.add("192.168.1.201")

> rs.add("192.168.1.202")

> rs.status() # 查看狀態

如果兩台從上的狀態為"stateStr" : "STARTUP",則需要進行如下操作> var config={_id:"fanjinbao",members:[{_id:0,host:"192.168.1.203:27017"},{_id:1,host:"192.168.1.201:27017"},{_id:2,host:"192.168.1.202:27017"}]}

> rs.initiate(config)

此時再次查看rs.status()會發現從的狀態變為SECONDARY

三、MongoDB副本集測試

主上建庫建集合

use mydb

db.acc.insert({AccountID:1,UserName:"123",passwd:"123456"})

show dbs

從上查看

show dbs如果出現系列錯誤

2016-05-13T00:03:36.719+0800 E QUERY    Error: listDatabases failed:{ "note" : "from execCommand", "ok" : 0, "errmsg" : "not master" }

執行

rs.slaveOk()

show dbs就可以看到創建的數據庫了

四、副本集更改權重模擬主宕機

默認三台機器權重都為1,如果任何一個權重設置為比其他的高,則該台機器馬上切換為primary角色,所以我們預設三台機器的權重為別為203:3,201:2,202:1

在主上執行:

cfg = rs.conf()

cfg.members[0].priority = 3

cfg.members[1].priority = 2

cfg.members[2].priority = 1

rs.reconfig(cfg)

這樣的話,第二個節點將會成為候選節點

主上丟棄掉從端口27017進入的數據包

iptables -I INPUT -p tcp --dport 27017 -j DROP

五、MongoDB備份和恢復

備份指定庫

# mongodump -h ip -d dbname -o dir #-h后面跟服務器ip,-d后面跟database名字,不加則備份所有庫,-o指定備份到哪里,他是一個目錄

備份所有庫

# mongodump -h 192.168.1.203 -o /tmp/

備份指定集合

# mongodump -d fansik -c zhangsan -o /tmp/fansik #-c指定集合的名字

導出集合為json文件

# mongoexport -d mydb -c fansik -o /tmp/test.json #-o后面跟的是一個文件的名字

恢復所有庫

# mongorestore --drop dir/ #其中dir是備份所有庫的目錄名字 其中--drop可選,意思恢復前先將數據刪除,不建議使用

恢復指定庫

# mongorestore -d mydb /mydb #-d恢復的庫名字,mydb是該庫備份目錄

恢復集合

# mongorestore -d mydb -c zhangsan /fansik/zhangsan.bson #-c后面是要恢復的集合的名字,然后指定恢復的集合文件,bson格式的文件

導入集合

# mongoimport -d mydb -c test --file /tmp/test.json


免責聲明!

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



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