1. 程式人生 > >MongoDB的主從複製與複製集

MongoDB的主從複製與複製集

MongoDB分為主從複製和複製集

一,主從複製
mongodb支援傳統的master-slave架構。沒有自動故障轉移功能,需要指定master和slave端。不推薦。
1,建立兩個配置檔案
vi /etc/mongodb11.cnf

dbpath=/usr/local/mongodb/data11
logpath=/usr/local/mongodb/log/mongodb11.log
port=27011
fork=true
master=true
引數
master:是否為主。

vi /etc/mongodb12.cnf
dbpath=/usr/local/mongodb/data12
logpath=/usr/local/mongodb/log/mongodb2.log
port=27012
fork=true
slave=true
source=10.1.2.198:27011
引數
salve:是否為從。
source:主的IP和埠。

2,分別啟動兩個mongod,在主上插入資料,在從上檢視時會提示錯誤
not master and slaveOk=false
      這是因為從庫預設是不可讀寫的,所以需要設定
rs.slaveOk()

二,複製集
複製集帶有自動故障轉移功能,複製集架構比複製架構更好維護,功能更強。推薦。
1,建立三個配置檔案
vi /etc/mongodb1.cnf

dbpath=/usr/local/mongodb/data1
logpath=/usr/local/mongodb/log/mongodb1.log
port=27071
fork=true
replSet=rs
vi /etc/mongodb2.cnf
bpath=/usr/local/mongodb/data2
logpath=/usr/local/mongodb/log/mongodb2.log
port=27072
fork=true
replSet=rs
vi /etc/mongodb3.cnf
dbpath=/usr/local/mongodb/data3
logpath=/usr/local/mongodb/log/mongodb3.log
port=27073
fork=true
replSet=rs
引數
replSet:複製集的名稱,只有含有相同的複製集名稱的節點才能加入複製集。


2,分別啟動三個mongod,進入需要設定為主的機器上執行初始化
>config = {
           "_id": "repl",
           members: [
                      { "_id": 0,
                       "host": "10.34.136.15:27071"
                      },

                      { "_id": 1,
                       "host": "10.34.136.15:27072"
                      },

                     { "_id": 2,
                       "host": "10.34.136.15:27073"
                      },
] }
>rs.initiate(config)
rs:複製集物件,複製集的命令都在rs物件內

初始化後,">"符號前就會顯示當前節點的【複製集:主/從】的狀態
> rs.initiate(config)
{ "ok" : 1 }
rs:OTHER>

3,檢視狀態
rs:PRIMARY> rs.status();

4,檢視是否主從(如果發生切換,使用rs.status()檢視更準確)
rs:PRIMARY> db.isMaster()

5,登入其他兩個從節點,雖然會顯示【複製集:主/從】的狀態,但是無法操作

原因是從節點預設無法讀寫,執行slaveOk