mongodb單機集羣部署,僅僅爲了測試

1、架構介紹

mongodb有幾種部署方式,這裏採用的是副本集架構(Replica Set)。mongodb

爲了防止單點故障就須要引副本(Replication),當發生硬件故障或者其它緣由形成的宕機時,可使用副本進行恢復,最好可以自動的故障轉移(failover)。有時引入副本是爲了讀寫分離,將讀的請求分流到副本上,減輕主(Primary)的讀壓力。而Mongodb的Replica Set都能知足這些要求。數據庫

Replica Set的一堆mongod的實例集合,它們有着一樣的數據內容。服務器

包含三類角色:架構

  1. 主節點(Primary):接收全部的寫請求,而後把修改同步到全部Secondary。一個Replica Set只能有一個Primary節點,當Primary掛掉後,其餘Secondary或者Arbiter節點會從新選舉出來一個主節點。默認讀請求也是發到Primary節點處理的,須要轉發到Secondary須要客戶端修改一下鏈接配置。
  2. 副本節點(Secondary):與主節點保持一樣的數據集。當主節點掛掉的時候,參與選主。
  3. 仲裁者(Arbiter):不保有數據,不參與選主,只進行選主投票。使用Arbiter能夠減輕數據存儲的硬件需求,Arbiter跑起來幾乎沒什麼大的硬件資源需求,但重要的一點是,在生產環境下它和其餘數據節點不要部署在同一臺機器上。

注意,一個自動failover的Replica Set節點數必須爲奇數,目的是選主投票的時候要有一個大多數才能進行選主決策。app

mongodb副本集

由圖能夠看到客戶端鏈接到整個副本集,不關心具體哪一臺機器是否掛掉。主服務器負責整個副本集的讀寫,副本集按期同步數據備份,一但主節點掛掉,副本節點就會選舉一個新的主服務器,這一切對於應用服務器不須要關心。咱們看一下主服務器掛掉後的架構:測試

副本集中的副本節點在主節點掛掉後經過心跳機制檢測到後,就會在集羣內發起主節點的選舉機制,自動選舉一位新的主服務器。code

2、安裝部署

下載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份,分別爲mongodb2mongodb3

分別修改配置文件中的目錄和端口.

啓動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();

3、測試集羣功能

主節點鏈接到終端:

/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();

相關文章
相關標籤/搜索