Design

Design
asp.net mvc
顯示具有 MongoDB 標籤的文章。 顯示所有文章
顯示具有 MongoDB 標籤的文章。 顯示所有文章

2019年4月10日 星期三

Windows Mongodb Replica set + Sharding Cluster

Replica set 
Mongodb的高可靠性的架構,主要原理為Primary資料庫之外會同時在Secondary資料庫生成一樣的資料防只在在主資料庫有問題的狀況下我們還有Secondary的資料就有點像HA的機制,詳細如下分為三種角色


1.Primary
唯一具有寫跟讀的角色,主要的存取節點


2.Secondary
只能讀取的角色,可以有一個以上的Secondary,Primary資料會複製一份到Secondary












3.Arbiter
Arbiter不會存取任何資料,主要功能為在Primary無法跟其他Secondary溝通時
會跳出來推舉為新的Secondary擔任Primary



















Sharding Cluster 
分片如字面上的意思就是把資料做切分放置在不同位置,這樣做的主要用意為我們單機如果有大量的資料硬碟快撐不住了 負載爆炸,我們把資料做切分減少每個單機上的資料量提升空間的使用率 減少負載 有種load balance的感覺 一般我們常使用架構為sharding cluster其他種就 不做說明


至於詳細的架構如下 我們一般都是直接連接資料庫拿資料也就是我們如圖上的Shard的位置,當我們做了Sharding的機制後我們就需要個Router層因為我們已經做分層處理了直接存取Shard我們只能看到資料的片段而已這時候Router就起來作用 至於Router怎知道資料該怎取怎處理呢,Config Server就是在做這類資訊的處理存放些Metadata及計算的索引紀錄每個資料Shard的位置.




















實作

介紹這麼多是不是了解不少,那麼我們為什麼需要Replica set + Sharding Cluster呢 Sharding Cluster的壞處就是當一台資料庫掛了我們就無法處理了 這時候Replica set是不是就剛好把這個洞補起來了 我們就有個高可靠性 又有效率的Mongodb架構
Sharding是建立在Replica set架構之上我們首先間建立Replica set

首先我們建立三個檔案primary.conf  secondary.conf   arbiter.conf 的config如下


primary.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\primary\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\primary"
    directoryPerDB: true
net:
    port: 27017 
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: primary
        displayName: primary
replication:
    replSetName: rs
secondary.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\secondary\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\secondary"
    directoryPerDB: true
net:
    port: 27018
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: secondary
        displayName: secondary
replication:
    replSetName: rs
arbiter.conf
systemLog:
    destination: file
    path: "C:\\mongodb\\logs\\arbiter\\log.log"
    logAppend: true
storage:
    dbPath: "C:\\mongodb\\data\\arbiter"
    directoryPerDB: true
net:
    port: 27019
    bindIp: 127.0.0.1
processManagement:
    windowsService:
        serviceName: arbiter
        displayName: arbiter
replication:
    replSetName: rs

這時候可以把我們的服務開起來
#安裝服務
mongod --config "C:\mongodb\config\primary.conf" --install
mongod --config "C:\mongodb\config\secondary.conf" --install
mongod --config "C:\mongodb\config\arbiter.conf" --install

#啟動服務
net start primary
net start secondary
net start arbiter

#進入(這時角色都一樣需要設定)
mongo 127.0.0.1:27017

#加入Primary rs為replSetName設定的
rs.initiate( {   _id : "rs",members: [ { _id : 0, host : "127.0.0.1:27017" } ]})

#加入Secondary
rs.add("127.0.0.1:27018")

#加入Arbiter
rs.addArb("127.0.0.1:27019")

#查看狀態
rs.status()


最後我們查看狀態已經把各個角色都指定好






































再來我們可以試著Primary寫入資料看看是不是已經達到同步的效果
var data = [];
for (var i = 0; i < 50; i++){
    data.push({
        "index":"資料"+NumberInt(i),
        });
}
db.demo.insertMany(data);


然後可以看到我們的Primary跟Secondary都有我們剛新增的資料

未完待續 還有我們的 Sharding Cluster 

2017年5月13日 星期六

MongoDB(芒果)與Robomongo(蘿蔔) Windows環境安裝

首先我們應用MongoDB(芒果)總不會傻傻的還在打指令

這時就需要我們這種懶人專用的GUI RoMongo(蘿蔔)
首先安裝我們的芒果吧 MongoDB官網連結: 安裝就看環境是幾位元
做下載安裝 沒難度

 安裝完可CMD測試看看 預設的路徑是
cd C:\Program Files\MongoDB\Server\3.2\bin
mongod.exe --dbpath c:\data\db
如果執行成功會出現類似以下訊息
2015-09-25T15:54:09.212+0800 I CONTROL Hotfix KB2731284 or later update is not
installed, will zero-out data files
2015-09-25T15:54:09.229+0800 I JOURNAL [initandlisten] journal dir=c:\data\db\j
ournal
2015-09-25T15:54:09.237+0800 I JOURNAL [initandlisten] recover : no journal fil
es present, no recovery needed
2015-09-25T15:54:09.290+0800 I JOURNAL [durability] Durability thread started
2015-09-25T15:54:09.294+0800 I CONTROL [initandlisten] MongoDB starting : pid=2
488 port=27017 dbpath=c:\data\db 64-bit host=WIN-1VONBJOCE88
2015-09-25T15:54:09.296+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/W
indows Server 2008 R2
2015-09-25T15:54:09.298+0800 I CONTROL [initandlisten] db version v3.0.6
……
再來我們需要開啟我們windows的去啟動MongoDB的服務.
記得建立相對應的 C:\data\db 跟 C:\data\dbConf\mongodb.log 否則會出錯 你要改位置也是可以 記得yourIPadress yourPortNumber YourServiceName 要記得修改成自己的環境
mongod.exe --bind_ip yourIPadress --logpath "C:\data\dbConf\mongodb.log" --logappend --dbpath "C:\data\db" --port yourPortNumber --serviceName "YourServiceName" --serviceDisplayName "YourServiceName" --install
最後 記得是 YourServiceName 你當初打上面那串指令的時候建的名子
net start "YourServiceName"
参数描述
--bind_ip绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath定MongoDB日志文件,注意是指定文件不是目录
--logappend使用追加的方式写日志
--dbpath指定数据库路径
--port指定服务端口号,默认端口27017
--serviceName指定服务名称
--serviceDisplayName指定服务名称,有多个mongodb服务时执行。
--install指定作为一个Windows服务安装。

 再來我們電腦就有mongodb server了
 接著使用我們的GUI Robomongo官網連結
建立我們的 Connection 爽爽使用拉  詳細操作請看官網介紹