mongodb有幾種部署方式,這裏採用的是副本集架構(Replica Set)。mongodb
爲了防止單點故障就須要引副本(Replication),當發生硬件故障或者其它緣由形成的宕機時,可使用副本進行恢復,最好可以自動的故障轉移(failover)。有時引入副本是爲了讀寫分離,將讀的請求分流到副本上,減輕主(Primary)的讀壓力。而Mongodb的Replica Set都能知足這些要求。數據庫
Replica Set的一堆mongod的實例集合,它們有着一樣的數據內容。服務器
包含三類角色:架構
注意,一個自動failover的Replica Set節點數必須爲奇數,目的是選主投票的時候要有一個大多數才能進行選主決策。app
由圖能夠看到客戶端鏈接到整個副本集,不關心具體哪一臺機器是否掛掉。主服務器負責整個副本集的讀寫,副本集按期同步數據備份,一但主節點掛掉,副本節點就會選舉一個新的主服務器,這一切對於應用服務器不須要關心。咱們看一下主服務器掛掉後的架構:測試
副本集中的副本節點在主節點掛掉後經過心跳機制檢測到後,就會在集羣內發起主節點的選舉機制,自動選舉一位新的主服務器。code
下載mongodb:ssl
wget https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-3.6.4.tgz
解壓並文件夾重命名爲mongodb1資源
進入mongodb目錄,新建兩個文件夾:db
logs
部署
bin目錄下新建配置文件:touch mongodb.conf
dbpath=/Users/mac-desktop/app/mongodb1/db logpath=/Users/mac-desktop/app/mongodb1/logs/mongodb.log port=27018 fork=true
複製2份,分別爲mongodb2
和mongodb3
分別修改配置文件中的目錄和端口.
啓動mongodb:
/Users/mac-desktop/app/mongodb1/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb1/bin/mongodb.conf /Users/mac-desktop/app/mongodb2/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb2/bin/mongodb.conf /Users/mac-desktop/app/mongodb3/bin/mongod --replSet repset -f /Users/mac-desktop/app/mongodb3/bin/mongodb.conf
查看服務是否已經啓動:
ps -ef|grep mongodb
登錄任意一個mongodb:
/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27018
使用admin數據庫
use admin
定義副本集配置變量,這裏的_id:」repset」
和上面命令參數--replSet repset
保持一致
config = { _id:"repset", members:[{_id:0,host:"127.0.0.1:27018"},{_id:1,host:"127.0.0.1:27019"},{_id:2,host:"127.0.0.1:27020"}]}
初始化副本集羣:
rs.initiate(config);
查看集羣節點的狀態:
rs.status();
主節點鏈接到終端:
/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27018
鏈接test數據庫:
use test;
往testdb表裏插入數據
db.testdb.insert({"test1":"testval1"})
在副本節點鏈接查詢:
/Users/mac-desktop/app/mongodb3/bin/mongo --host localhost --port 27019
使用test數據庫:
user test;
查詢表格:
show tables;
報錯
緣由: mongodb默認是從主節點讀寫數據,副本節點上不容許讀,設置副本節點可讀。
db.getMongo().setSlaveOk();
注意:這條命令要在副節點上運行
而後就能夠查詢複製過來的數據了
repset:SECONDARY> db.testdb.find();