共計 2729 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹了 MongoDB 中副本集的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
具體如下:
replication set 復制集,
復制集,多臺服務器維護相同的數(shù)據(jù)副本,提高服務器的可用性。
MongoDB 復制是將數(shù)據(jù)同步在多個服務器的過程。
復制提供了數(shù)據(jù)的冗余備份,并在多個服務器上存儲數(shù)據(jù)副本,提高了數(shù)據(jù)的可用性,并可以保證數(shù)據(jù)的安全性。
復制還允許您從硬件故障和服務中斷中恢復數(shù)據(jù)。
設置過程:
(1)創(chuàng)建示例
假設創(chuàng)建三臺,創(chuàng)建三個實例目錄和日志目錄:
mkdir /home/m17 /home/m18 /home/m19 /home/mlog
啟動三個示例,端口分別為 27017、27018、27019。
./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles
說明:
參數(shù) –replSet 設置一樣,才能屬于同一個復制集
參數(shù) –smallfiles 可以節(jié)省空間,提高速度。
然后使用 ps aux | grep mongo 可以查看到啟動起來的三個端口。
(2)配置
使用客戶端連接 mongo 進行配置:
[test@localhost bin]$ ./mongo
要管理配置,所以切換到 admin 上:
use admin
(配置是 json 格式)
var rsconf = {
_id: rs2 ,
members:[{ _id :0,host: 192.168.8.172:27017},
{_id:1,host: 192.168.8.172:27018},
{_id:2,host: 192.168.8.172:27019}
}
如果沒有配置 ip,使用 127.0.0.1
var rsconf = {
_id: rs2 ,
members:[{_id:0,host: 127.0.0.1:27017},
{_id:1,host: 127.0.0.1:27018},
{_id:2,host: 127.0.0.1:27019}
}
執(zhí)行后,使用 printjson(rsconf)查看剛才的配置。
然后執(zhí)行初始化:
rs.initiate(rsconf);
rs.initiate(rsconf);
ok : 1,
operationTime : Timestamp(1539933041, 1),
$clusterTime : {clusterTime : Timestamp(1539933041, 1),
signature : {hash : BinData(0, AAAAAAAAAAAAAAAAAAAAAAAAAAA=),
keyId : NumberLong(0)
rs2:SECONDARY
查看節(jié)點:
rs.status()
刪除節(jié)點:
rs.remove(127.0.0.1:27019)
添加節(jié)點:
rs.add(127.0.0.1:27019)
切換節(jié)點:
默認是在 27017 端口,即 rs2:PRIMARY 狀態(tài),
退出 mongo 客戶端命令模式,
切換到另一個端口:
[test@localhost bin]$ ./mongo
--port=27018,
即切換到 rs2:SECONDARY 狀態(tài)。
測試:
在主服務上,創(chuàng)建庫和集合,
rs2:PRIMARY use student
switched to db student
rs2:PRIMARY db.user.insert({uid:1,name: zhang san})
WriteResult({ nInserted : 1 })
rs2:PRIMARY db.user.find();
{ _id : ObjectId( 5bc9889f85a0986431fd2499), uid : 1, name : zhang san }
去從服務上查看
show dbs
然后看到有錯誤,具體錯誤信息是:
…
errmsg : not master and slaveOk=false ,
…
是因為 slave 默認不允許讀寫:
rs.slaveOk();
然后就可以看到主服務器創(chuàng)建的庫和集合了。
同理 27019 也需要執(zhí)行這個命令才能自動同步和讀寫。
當主服務器 27017 停掉的時候,
第二個 27018 就自動變成主服務器 master 狀態(tài)。
但是 27019 需要再次執(zhí)行 rs.slaveOk()才能自動同步讀寫。
shell 腳本:
#!/bin/bash
IP=127.0.0.1
NA=rs2
sudo mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog
sudo chmod -R 777 /home/m17 /home/m18 /home/m19 /home/mlog
./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=${NA} --smallfiles
./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=${NA} --smallfiles
./mongo EOF
use admin
var rsconf = {
_id: rs2 ,
members:[{_id:0,host: ${IP}:27017 },
{_id:1,host: ${IP}:27018 },
{_id:2,host: ${IP}:27019 }
rs.initiate(rsconf)
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“MongoDB 中副本集的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業(yè)資訊頻道,更多相關知識等著你來學習!