本文以mongodb4.2.1為例搭建副本集,記錄搭建流程,便于大家學習
1.準備三臺機器(阿里云)
????mongo1? ? ? 47.100.32.119(192.168.0.78)
????mongo2? ? ? 106.15.40.89(192.168.0.79)
????mongo3? ? ? 106.15.40.101(192.168.0.80)
2.安裝mongodb
詳情可參考官方安裝文檔:(本文以ubuntu 16.4為例)
????https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
????1.安裝:
????????1.wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
????????2.echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
????????3.sudo apt-get update
????????4.sudo apt-get install -y mongodb-org
? ??2.啟動:
????????1.sudo service mongod start? ? #以默認配置文件啟動
????????2.sudo service mongod status #查看mongodb狀態
????????3.sudo service mongod stop? ? #停止服務
????????4.sudo service mongod restart #重啟服務
? ??3.卸載:
????1.sudo service mongod stop
????2.sudo apt-get purge mongodb*
????3.sudo rm -r /var/log/mongodb
? ? ? ? sudo rm -r /var/lib/mongodb
3.修改mongodb配置文件
????默認啟動文件為:
????????啟動文件:/usr/bin/mongod
????????配置文件:/etc/mongod.conf
????????數據文件:/var/lib/mongodb
????????日志文件:/var/log/mongodb.log
????修改文件位置為:(便于管理和配置,下面的文件位置需要自己手動在服務器上創建目錄和文件)
????????配置文件:/home/mongo/config/mongod.conf(拷貝默認文件 cp /etc/mongod.conf /home/mongo/config/mongod.conf)
????????數據文件:/home/mongo/data
????????日志文件:/home/mongo/log/mongod.log
4.修改配置文件:
????修改完成如下:
? ? #db path(1.修改數據存儲位置為自己新建的位置)
????????storage:
????????????? dbPath: /home/mongo/data
????# logger(2.修改日志文件為自己新建的位置)
????????systemLog:
????????????? destination: file
? ????????????logAppend: true
? ????????????path: /home/mongo/log/mongod.log
????# network interfaces (3.修改bindIp,解除綁定到本地限制)
? ? ? ? ?net:
? ????????????port: 27017
????????????? bindIp: 0.0.0.0
????#replication(4.注意修改副本集名稱,三臺服務器需要統一)
????????replication:
? ????????????replSetName: testRepl
????#sharding:
部分修改如上所示,需要別的可以繼續修好
5.啟動副本集
????????sudo /usr/bin/mongod --config /home/mongo/config/mongod.conf??
????依次在三臺機器上啟動,按照指定的配置文件, 然后進入本機客戶端:
????????sudo /usr/bin/mongo
????在三臺機器上任意一臺登陸mongodb(我這里在mongo1上登陸)
????#進入數據庫
????????user admin
????#進行初始化配置
????????config={_id:"testRepl",members:[{_id:0,host:"47.100.32.119:27017"},{_id:1,host:"106.15.40.89:27017"},{_id:2,host:"106.15.40.101:27017"}]}
????#初始化副本集
????????rs.initiate(config);
????#查詢初始化狀態(此處可查看到當前節點是主節點還是副本集)
????????rs.status();
????#重啟當前節點
????????db.shutdownServer();
6.數據測試
????找到主節點所在的服務器,也可自己設置主節點,然后建立test數據庫
????????use test
????#往testdb插入數據
????????db.testdb.insert({"test1":"test11"})
????#然后在副節點上查看數據是否復制過來
????#使用test 數據庫。
????????repset:SECONDARY> use test;
????????repset:SECONDARY> show tables;
????#如果看見錯誤信息:not master and slaveOk
????解決方案:
????????#mongodb默認是從主節點讀寫數據的,副本節點上不允許讀,需要設置副本節點可以讀。
????????????repset:SECONDARY> db.getMongo().setSlaveOk();
????????#可以看到數據已經復制到了副本集。
????????????repset:SECONDARY> db.testdb.find();
問題備注:
????搭建過程遇到的問題:
????????1.防火墻未關閉,導致三臺機器之間不能相互訪問
????????解決方法:
????????????1.查看防火墻當前狀態
????????????????sudo ufw status
????????????2.開啟防火墻
????????????????sudo ufw enable
????????????3.關閉防火墻(解決方案是關閉防火墻,此處列出一系列命令,便于使用查看)
????????????????sudo ufw disable
????????2.三臺機器中有一二臺開啟的權限認證,此時會報錯
????????解決方法:
????????????將對應機器的配置文件中授權注釋掉
? ??????3.數據庫版本不一致,也可能導致失敗
????????解決方法:
????????????統一數據庫版本,將不相同版本的數據庫卸載重裝,卸載步驟可參看官網文檔
單間完成后即可寫代碼測試,本副本集方案僅為測試使用參考!