關於我轉生變成 (Atlas) 使用者這檔事

Caspar Chang
8 min readJun 4, 2021

--

隨著雲端的普及,Atlas 的使用者也開始逐漸變多,所以今天特地整理Atlas上常用功能與常見問題,讓大家在可以在使用的時候,更明確的知道如何去做使用與設定。

本文是Atlas的進階分享心得文,如果還沒有接觸過Atlas的使用者,可以先參考基礎篇:Re:從零開始的MongoDB Atlas生活

1.集群部署規劃

1–1. 選擇喜歡的雲與區域

Atlas能夠在全球AWS, GCP, AZURE中80多個區域中使用,首先要想好哪個雲哪個區域來部署MongoDB主集群。

同時由於Atlas上面的MongoDB集群,都是預設使用ReplicaSet 三個節點的架構,所以當有需要的時候可以把下方的Multi-Cloud, Multi-Region 打開,進而來使用跨區/跨雲的服務。

1-2. 決定集群的大小

集群的大小可以自由選擇,一般正式環境我會建議從M30開始,M30開始都是 dedicated 的機器,不會有吵鬧的鄰居(noisy neighbour)影響。

至於要怎麼選一個適合的大小呢? 依我個人的經驗,我會有以下的一些數字做初始建議:

CPU : 每顆CPU保守估計可提供每秒200~400以上的操作數。
操作為一般的CRUD,也就是Insert/Update/Delete/Find/Aggregate
IOPS : 建議為操作數*2,也就是CPU數乘800,以避免IO變成瓶頸。
(IOPS與磁碟空間正相關,可放大磁碟空間來增加IOPS)。
Disk : 原始資料量的40%,MongoDB內建資料壓縮的功能,壓縮比約3倍。Memory : 原始資料量的5%~10%,越多越好。
(視熱存取資料量,熱資料越多記憶體需求越大)

另外針對資料量大運算少的應用服務,可以考慮使用Low Cpu的規格來節省開銷。

1-3. 透過API實現自動化

Atlas 內建的 API 服務能夠輕易實現 Infra Sturctre as a Code, 亦可以進一步整合 TerraForm 做自動化部屬。

以下是 Atlas API 參考 Sample Code :

識別自己的Org/Project Id :
通常會在Atlas的url上
Atlas Org Id : 5e549ec4063e812ba4be7d34
Atlas Project Id : 5f07bcad7874914992f00296
建立API Key:
Atlas API Public Key : ipermyhc
Atlas API Private Key : 89e83a46-da2e-454c-95f5-b419bbfc16a1
Get All Projects in an Organization :
curl --user "<Public Key>:<Private Key>" --digest \ "https://cloud.mongodb.com/api/atlas/v1.0/orgs/<Org Id>/groups?pretty=true"
Get All Clusters in a Project :
curl --user "<Public Key>:<Private Key>" --digest \ "https://cloud.mongodb.com/api/atlas/v1.0/groups/<Project Id>/clusters?pretty=true"

2. 集群配置規劃

2-1. 隨需更改配置

萬一集群的資源不夠使用了,怎麼辦?

不用擔心,Atlas的集群調整是完全不停機,應用程式不會中斷,詳情請參閱Atlas SLA

透過集群調整,可以輕易實現以改變 :

垂直擴容 : 可以將M30集群升級成M40集群, 反之亦然。
水平擴容 : 可以將M30集群升級至M30分片,反之亦然。
部署轉移:不管是區域移轉還是雲端移轉,都可以自由調整。
版本升級 : Atlas會永遠保持在該版本的最新Fix, 會自行做Rolling Upgrade.

2–2. 多元的網路配置

Atlas 特別提供 MongoDB SRV 的功能,使用單一連線字串就能夠連到整個集群,再也不用輸入一大亂的連線字串了,同時還內建 load balance 與 連線最近的節點的功能,非常的方便實用。

此外因應雲端網路的需求,也提供雲端私有網路連接,以Peering為例,只要輸入對應的ID/CIDR就能夠輕鬆地改為私有網路連接。

2-3. 資料安全說明

Atlas 本身提供非常多安全功能來符合企業使用,詳情請參閱合規說明

我也針對常見的資料安全做說明:

連線加密 TLS : 
Atlas只能透過加密連線方式使用。
資料加密 Encryption at Rest :
Atlas的資料必須做加密, 密鑰預設由 Atlas 保管,也可以使用雲端的密鑰管理服務,例如AWS KMS作統一管理。
資料稽核 Audit :
可以額外開啟資料稽核功能記錄所有的DDL/DML操作。
權限整合 LDAP :
可以與 LDAP 做整合。

3. 集群管理建議

3–1. 持續監控服務

MongoDB 本身提供了 mongotop與mongostat 的各式指標,讓我們可以知道資料庫即時的健康狀態。

而Atlas則持續蒐集這些資訊來做統一呈現,總共有數十種metrics,而我一般在使用的時候會觀察下面幾個參數:

CPU : 
如果在高峰期超過70% 就建議要有集群升級的打算了,避免效能異常。
IOPS :
需要確保有足夠的IOPS避免效能瓶頸。
Disk Util % :
同IOPS,高峰期盡量低於60%。
Opcounters :
了解現行集群的用量,每秒多少讀與寫。
Query Targeting:
掃描的資料與實際取得資料的比率,越低越好,若使用正確的Index會幾乎 1:1。
Connections :
如果數量暴增,可能有效能問題,需要注意。
Memory :
無需特別關注,因為WildTiger Engine預設就會吃到80%。

當然實務上還有很多參數可以觀測與改善,而我一般是用這樣的方式快速評斷集群資源是否足夠使用,作為是否需要擴容的依據。

3–2. 效能調校服務

Profiler 是 MongoDB 裡面很重要的功能,預設會把執行超過 100ms 的"指令” (大多是查詢) 給記錄下來,並且進一步提供效能調校的建議。

而Atlas則直接提供Dashboard將Profiler資訊以圖形化介面的方式作呈現,非常方便,一目瞭然。

同時亦提供Performance Advisor,會建議哪些Index 需要建立,可以提昇多少百分比的效能,也可以建議哪些Index沒有使用到需要被移除。

3–3. 備份還原服務

除了高可用以外,MongoDB亦提供持續的資料庫備份,確保資料不遺漏。

備份需要注意的是週期,我們可以透過客制備份週期與量來做到最適的成本效益比。

而當你需要還原的時候,亦可以指定一個新的Atlas Cluster還原,來讓使用上更增彈性。

3–4. 免費線上搬移服務

開始對於 Atlas 感興趣了嗎?

MongoDB Atlas 提供一個免費的線上搬移服務叫做 Live Migrate,可以讓你自建的MongoDB即時的與Atlas做抄寫同步,等待抄寫一至後只要切換應用程式的連線 就可以完成搬移了,有感覺心動嗎? 快來一起轉生使用MongoDB Atlas 吧!!!

4. Atlas 資料平台策略:

Atlas 不僅僅提供 MongoDB 作為資料庫引擎,同時還提供了許多周邊的服務將Atlas完善成一個資料平台。

Atlas API - Infra structure as a Code服務Atlas Search - 文字檢索服務Atlas Online Archive & Data Lake - 資料湖泊服務MongoDB Realm - 手機資料庫與事件驅動服務Charts - 視覺化報表服務

而後續,我會依序再跟各位介紹這些實用的資料服務~

關於 MongoDB Atlas

Atlas 是由 MongoDB Inc. 直接營運的雲端資料庫服務

能夠在AWS, AZURE, GCP 上多達80個區域部署MongoDB,也可以將已經部署好的MongoDB做不停機的跨區或是跨雲移轉。

Atlas 滿足了雲端資料庫的所有需求,例如 權限/網路/備份/安全/自動化等功能,因此也廣受全球兩萬多個客戶喜愛,現已在Atlas上建立了超過一百萬套MongoDB (台灣的使用者也貢獻不少XD)。

--

--

Caspar Chang

具有十年以上的資料庫開發與維運管理經驗,現任職於 MongoDB Taiwan 解決方案架構師