MongoDB主從複製(master-->slave)環境搭建

導讀:html

MongoDB一直都不推薦使用主從複製方式進行數據同步,而是推薦複製集(replicate set),相對於主從同步,複製集有更多優秀的功能,如自動故障轉移等,可是,既然MongoDB到4.2版本還保留着該功能,咱們不妨探索一下。mongodb


基礎信息
IP地址 操做系統版本 數據庫版本 做用
192.168.10.71 centos7.4 mongo 2.7.1 主節點(Master)
192.168.10.72 centos7.4 mongo 2.7.1 從節點(Slave)


(一)MongoDB安裝數據庫

MongoDB每一個版本的安裝方法都差很少,安裝見:Linux下安裝MongoDB 4.2數據庫--使用tar包方式centos


(二)MongoDB主從環境配置服務器

對於主從配置,相對於其它數據庫而言,MongoDB的配置很是簡單,只須要配置參數文件便可。app

主節點:192.168.10.71 從節點:192.168.10.72
logpath=/mongo/log/mongod.log
logappend=true

# fork and run in background
fork=true

port=27017
dbpath=/mongo/data

# location of pidfile
pidfilepath=/mongo/mongod.pid

# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip=0.0.0.0
master=true
keyFile=/mongo/mongodb-keyfile
auth=true
logpath=/mongo/log/mongod.log
logappend=true

# fork and run in background
fork=true

port=27017
dbpath=/mongo/data

# location of pidfile
pidfilepath=/mongo/mongod.pid

# Listen to local interface only. Comment out to listen on all interfaces.
bind_ip=0.0.0.0
autoresync=true
slave=true
source=192.168.10.71:27017
keyFile=/mongo/mongodb-keyfile
auth=true

特別注意:centos7

  • 主節點須要配置:master=true參數;
  • 從節點須要配置:slave=true參數和source參數,source參數指定master數據庫的IP及端口;
  • 若是啓用了用戶登陸驗證auth=true,那麼還須要配置KeyFile參數,主從才能正常同步;
  • 從節點的autoresync=true是一個可選參數。主從同步的本質是主節點將重作日誌(存放在local數據庫下的oplog.$main集合中)傳輸到從節點,從節點再次根據日誌執行一遍。可是oplog.$main是一個上限集合,若是主節點的日誌還未拷貝到從節點就發生了日誌覆蓋,此時管理員必須手動從新搭建複製環境,假如使用了autoresync=true參數,當主從不一樣步時,從庫將在10分鐘內自動嘗試從新同步一次。
  • oplogSize參數能夠用來指定oplog.$main集合的最大空間尺寸,若是未指定mongod將在啓動時分配5%的可用磁盤空間給oplog。


(三)keyFile注意事項spa

當啓用用戶身份認證時,主從節點須要配置keyfil文件以便於主從節點能夠正常通訊,keyfile的配置見上面的mongoDB配置文件,這裏講一下如何生產keyfile。操作系統

在一臺服務器上生成keyfile,而且將權限改成600日誌

openssl rand -base64 745 > /mongo/mongodb-keyfile 
chmod 600 /mongo/mongodb-keyfile

將這個文件拷貝到其它節點上便可,須要注意,各個節點的權限須要保持一致。


遇到的問題:

在建立完keyfile並在配置文件中加入參數後,啓動MongoDB,發現沒法啓動:

[root@mongo1 mongo]# mongod -f /mongo/mongodb.conf 
warning: bind_ip of 0.0.0.0 is unnecessary; listens on all ips by default
about to fork child process, waiting until server is ready for connections.
forked process: 2173
ERROR: child process failed, exited with error number 1

查看MongoDB錯誤日誌,報錯以下:

[root@mongo1 log]# tail -f mongod.log 
2020-06-18T21:20:13.900+0800 invalid char in key file /mongo/mon-keyfile: =

打開keyfile,發如今文件末尾有2個「=」,刪除2個等號以後,MongoDB啓動正常。須要留意,該操做改變了feyfile的內容,須要從新同步到其它節點。



【完】

相關文章
相關標籤/搜索