mongo 主從,副本集,分片
阿新 • • 發佈:2018-11-09
副本集
配置
# 做一個叫做 rs0 的副本集,開啟三個終端分別執行
# 當然,規範的做法是向 參考blog 中使用的那種 用配置檔案配置,並且用fork模式啟動
# 不過這裡為了方便,就直接在終端跑了,而且方便看日誌
mongod --port 27017 --dbpath "/var/db/db1" --replSet rs0
mongod --port 27018 --dbpath "/var/db/db2" --replSet rs0
mongod --port 27019 --dbpath "/var/db/db3" --replSet rs0
我們需要用用mongo客戶端初始化rs,這裡有兩種選擇,
一種,是像下面這樣,先一個空引數的 rs.initiate(),讓後在掉兩次 rs.add(“xxx”)
另一種,像其他參考中的blog 那樣,rs.initiate(config), 後面就不用再add 了
# 假定 27017 這臺是 master
mongo 127.0.0.1:27017
> rs.initiate()
// 上句執行完, 除打印出正常的返回資訊外, 指示符會改變
rs0:PRIMARY>
// 檢視 rs 的狀態
rs0:PRIMARY> rs.conf() // 同 rs.config()
rs0:PRIMARY> rs.status()
rs0:PRIMARY> rs.add("127.0.0.1:27018")
rs0:PRIMARY> rs.add("127.0.0.1:27019")
驗證PRIMARY 寫的資料, SECONDARY可以讀到
此時 PRIMARY 可以寫資料
rs0:PRIMARY> use playground
rs0:PRIMARY> db.number.insert({n:1})
如果連到27018
mongo 127.0.0.1:27017
// 注意,提示符顯示 SECONDARY
rs0:SECONDARY> show dbs
admin (empty)
local 2.077GB
playground 0.078GB
// 可以看到新建的資料庫
rs0:SECONDARY> use playground
switched to db playground
// 但是沒有read 許可權
rs0:SECONDARY > db.number.find()
error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
// 需用使用setslaveOk()
rs0:SECONDARY> db.getMongo().setSlaveOk()
rs0:SECONDARY> db.number.find()
{ "_id" : ObjectId("5bbb768358d0430871e84098"), "n" : 1 }
驗證 PRIMARY 宕機後,SECONDARY之一會成為PRIMARY
ctrl+c 關掉 PRIMARY 的終端
mongo 連到 SECONDARY 之一中輸入 rs.status(),看到有一臺已經變到PRIMARY
連到這臺PRIMARY , 可以寫資料
此時,如果當掉的機器恢復,則恢復的機器為SECONDARY
參考:
mongodb系列之–mongodb 主從配置與說明
mongodb系列之—副本集配置與說明
Mongodb系列之–mongodb的啟動與關閉
mongodb系列之–分片的原理與配置
高可用mongodb叢集的學習記錄(一安裝配置MongoDB)
高可用mongodb叢集的學習記錄(二mongodb主從配置)
高可用mongodb叢集的學習記錄(三搭建mongodb副本集)
高可用mongodb叢集的學習記錄(四mongodb分片叢集搭建)