mongodb副本集

       其實mongodb也可以做主從機制,mongodb一主一從類似mysql,但是slave在架構中爲只讀,並且主機宕機後從不能自動切換爲主。現在官方已經不推薦使用了,改用副本集。

  • 這種模式下有一個主(primary),和多個從(secondary),只讀。支持給它們設置權重,當主宕掉後,權重最高的從切換爲主

  • 在此架構中還可以建立一個仲裁(arbiter)的角色,它只負責裁決,而不存儲數據l再此架構中讀寫數據都是在主上,要想實現負載均衡的目的需要手動指定讀庫的目標server


1.MongoDB副本集搭建

三臺機器:192.168.1.100(primary)  192.168.1.101(secondary)   192.168.1.102(secondary) 

編輯三臺機器的配置文件/etc/mongod.conf,增加:

###########

replication:

##oplog大小

  oplogSizeMB: 20

##複製集名稱

  replSetName: monreplset     //名字可以隨意

##############

分別重啓三臺機器

在主上連接mongo

>use admin

>config={_id:"monreplset",members:[{_id:0,host:"192.168.1.100:27017"},{_id:1,host:"192.168.1.101:27017"},{_id:2,host:"192.168.1.102:27017"}]}

>rs.initiate(config)

>rs.add("192.168.1.101")

>rs.add("192.168.1.102")

rs.status()       //查看狀態

如果兩個從上的狀態爲"stateStr": "STARTUP", 則需要進行如下操作

>var  config={_id:"monreplset",members:[{_id:0,host:"192.168.1.100:27017"},{_id:1,host:"192.168.1.101:27017"},{_id:2,host:"192.168.1.102:27017"}]}

>rs.reconfig(config)

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


2.MongoDB副本集測試

主上建庫,建集合

>use mydb

>db.test.insert({ID:1,UserName:"123",password:"123456"})

>show dbs

從上查看

>show dbs   

若出現錯誤Error:listDatabasesfailed:{ "note" : "from execCommand","ok" : 0, "errmsg": "not master" },

執行>rs.slaveok()即可


3.MongoDB副本集更改權重

默認三臺機器權重都爲1,如果任何一個權重設置爲比其他的高,則該臺機器馬上切換爲primary角色,所以我們預設三臺機器的權重分別爲:100:3, 101:2, 102:1

在主上執行

cfg= rs.config()

cfg.members[0].priority= 3

cfg.members[1].priority= 2

cfg.members[2].priority= 1

rs.reconfig(cfg)

這樣的話,第二個節點將會成爲候選主節點。

主上執行iptables-I INPUT -p tcp--dport 27017 -j DROP禁掉27017端口的訪問

這時101將變成primary成爲主。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章