1. 程式人生 > >MongoDB之主從復制和副本集(四)

MongoDB之主從復制和副本集(四)

dmi 數據庫 mongo alloc already urn tor 安全性 db2

簡單主從復制

  • 采用一主一從或一主多從的布署模式,可以將讀寫分離開來,提高數據庫的可用性,不過mongodb的主從模式並不能在主節點崩潰後,從節點替換主節點的工作,一般可以在開發階段使用。

實現步驟

  • 設置配置文件
# mongodb.conf1 # 主節點

dbpath=/var/lib/mongodb1 # 設置數據文件
#where to log
logpath=/var/log/mongodb/mongodb1.log # 設置日誌文件

logappend=true

bind_ip = 127.0.0.1,192.168.1.21 # 設置ip
port = 27018 # 設置port
journal=true

master = true # 設置主節點

# mongodb.conf2 # 從節點
dbpath=/var/lib/mongodb2 # 設置數據文件
#where to log
logpath=/var/log/mongodb/mongodb2.log # 設置日誌文件

logappend=true

bind_ip = 127.0.0.1,192.168.1.21 # 設置ip
port = 27019 # 設置port
journal=true

slave = true # 設置從節點
source = 192.168.1.21:27018 # 指定主節點
  • 使用配置文件啟動
# 啟動主節點
mongod -f /etc/mongodb.conf1 &
# 啟動從節點
mongod -f /etc/mongodb.conf2 &
  • 測試發現,從節點可讀不可寫,主節點殺死後,從節點不能代替主節點。

副本集

  • 定義:復制提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性,並可以保證數據的安全性。

  • 特點:

  1. 主備節點存儲數據,仲裁節點不存儲數據。客戶端同時連接主節點與備節點,不連接仲裁節點。

  2. 所有節點分成3類,主節點,從節點和仲裁節點。

  3. 默認設置下,主節點提供所有增刪查改服務,備節點不提供任何服務。但是可以通過設置使備節點提供查詢服務;

  4. 自動故障轉移

  5. 自動恢復

實現步驟

  • 設置三份配置文件,分別為主節點、從節點、仲裁節點配置
# mongodb.conf
dbpath=/var/lib/mongodb # 數據文件
logpath=/var/log/mongodb/mongodb.log  # 日誌文件
pidfilepath=/var/lib/mongodb/mongodb.pid  # 進程文件
logappend=true  # 添加方式
replSet=name # 設置副本集名稱
bind_ip=192.168.1.21  # 綁定ip
port=27017  # port
fork=true  # 後臺運行
noprealloc=true

# mongodb.conf1
dbpath=/var/lib/mongodb1 # 數據文件
logpath=/var/log/mongodb/mongodb1.log  # 日誌文件
pidfilepath=/var/lib/mongodb/mongodb1.pid  # 進程文件
logappend=true  # 添加方式
replSet=name # 設置副本集名稱
bind_ip=192.168.1.21  # 綁定ip
port=27018  # port
fork=true  # 後臺運行
noprealloc=true

# mongodb.conf2
dbpath=/var/lib/mongodb2 # 數據文件
logpath=/var/log/mongodb/mongodb2.log  # 日誌文件
pidfilepath=/var/lib/mongodb/mongodb2.pid  # 進程文件
logappend=true  # 添加方式
replSet=name # 設置副本集名稱
bind_ip=192.168.1.21  # 綁定ip
port=27019  # port
fork=true  # 後臺運行
noprealloc=true
  • 啟動節點
mongo -f /etc/mongodb.conf
mongo -f /etc/mongodb1.conf
mongo -f /etc/mongodb2.conf
  • 配置節點
mongo ip:port
use admin  
fuben={ _id:"name", members:[ {_id:0,host:‘192.168.1.21:27017‘,priority:2}, {_id:1,host:‘192.168.1.21:27018‘,priority:1},   
{_id:2,host:‘192.168.1.21:27019‘,arbiterOnly:true}] };  
rs.initiate(fuben)   

參數:
priority:優先級
arbiterOnly:仲裁節點

  • 有時報錯
"errmsg" : "couldn‘t initiate : member 192.168.1.21:27018 has data already, cannot initiate set.  All members except initiator must be empty."

# 需要清空數據庫,將數據庫文件都刪除
  • 生效後,從節點目前是不允許讀寫的,設置:
# 登錄從節點
rs.slaveOk();
  • 殺死主節點,可以看到從節點變為主節點,重新啟動主節點後,主節點還是主節點,不會變為從節點(老大永遠是老大);

參考:

  • https://www.cnblogs.com/hadoop-dev/p/6069780.html

  • https://docs.mongodb.com/manual/introduction/

MongoDB之主從復制和副本集(四)