您好,登錄后才能下訂單哦!
其實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成為主。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。