← Back to blog

如何在公有雲的 Ubuntu 中設定與優化 MongoDB

Category
如何在公有雲的 Ubuntu 中設定與優化 MongoDB

企業意味著大量的數據,這使得處理和管理數據的問題變得更加困難。傳統上,數十年來業界一直使用 RDBMS 系統,但隨著 21 世紀大數據的出現,NoSQL (Not only SQL) 資料庫開始應用於大規模的非結構化和半結構化數據。

在這篇文章中,我將建立一個 MongoDB 叢集。

MongoDB 是一款免費且開源的 NoSQL 文件資料庫,因其提供的高擴充性和靈活性而被廣泛使用。

要在生產環境中部署 MongoDB,建議使用 Replica Sets。Replica Sets 是 MongoDB 在關聯式世界中相當於主/從(Master/Slave)架構的設計,但相比之下,它們的設定非常輕鬆,因為一切都是內建的。欲了解更多關於 Replica Sets 的資訊,請參閱 TutorialsPoint’s 對於複製過程的定義.

規劃您的 MongoDB 雲端伺服器叢集

我將建立一個 3 節點的叢集。為它們分配相等的資源非常重要,因為其中任何一個都可能成為主(即 master)伺服器。這些節點或機器可以在任何作業系統上運行,但在本教學中,我將使用 Ubuntu 18.04 LTS。關於如何掛載和設定來自 CloudSigma’s 函式庫中預裝的映像檔,您可以參考 本教學.

由於 Replica Set 的核心意義在於叢集應該在單一節點故障時仍能存活,因此如果您的所有伺服器都位於同一個實體主機上,那就毫無意義了。幸運的是,CloudSigma 確實提供了一種稱為 可用性群組 的功能。這意味著您可以指示系統將您的三台伺服器分配到不同的群組中。這樣一來,它們就永遠不會位於同一個實體主機上。關於此功能以及其他安全性和業務連續性功能的更多資訊,可以在 這裡.

使用 64 位元版本的 Linux 也很重要。原因很簡單,因為 MongoDB 在 32 位元系統上運行效果不佳(更多相關資訊請參閱 這裡).

在雲端安裝 MongoDB

這個部分非常簡單。您可以使用預先設定好的 Ubuntu 18.04 映像檔,或者自行安裝。

CPU、RAM 和硬碟的配置因人而異,取決於您的負載。對於較小規模的安裝,4 GHz CPU、4 GB RAM 和 10 GB 硬碟(用於系統)應該就足夠了。當您掛載硬碟時,請確保您使用的是 VirtIO。如果您使用 IDE,效能將會顯著下降。此外,由於您正在建立 Replica Set,您需要所有節點(和應用程式伺服器)都位於同一個 VLAN 上。

與許多其他雲端廠商不同,您無需使用 RAID10 或類似配置來設定您的儲存空間以提高效能。正如我們的許多客戶所回報的,在 CloudSigma 同時使用 SSD 和磁性硬碟,您將能獲得出色的即用效能。

我仍然建議將 MongoDB 數據保存在獨立的硬碟上。原因很簡單,因為在某些時候您可能需要進行一些檔案系統優化,而您不希望對整個檔案系統都進行這些操作。

考慮到這一點,最簡單的方法是在設定好伺服器後再新增此硬碟。現在,讓我們專注於系統安裝。如果您是自行安裝(而不是使用預先設定好的系統),我建議您在開機選單中按 F4 並選擇 ‘安裝最小化虛擬機器’.

我正在建立 3 台機器,每台機器的規格如下:

  • CPU: 4 GHz
  • RAM: 4 GB
  • SSD: 10 GB (Ubuntu 18.04 LTS), 20 GB (額外硬碟)

如 SSD 部分所述,我正在掛載一個容量為 10 GB 且已安裝 Ubuntu 18.04 LTS 的硬碟。

此外,我還掛載了另一個容量為 20 GB 的空白硬碟,用於儲存 MongoDB 數據。其大小很大程度上取決於您的使用情況,但對於小型系統,20GB 應該足夠了。然而,由於有時很難預測您將儲存多少數據,我們將使用 LVM. 這將使您以後能夠簡單地添加另一個硬碟並擴充磁碟區,而無需重新開始。或者,您可以使用單個硬碟,並在以後使用以下工具進行擴充:resize2fs。

要添加硬碟,只需轉到 ‘Drives’(硬碟)部分,點擊頂部的 ‘Create a new drive’(創建新硬碟)圖示,為新硬碟命名並將其大小設置為 20 GB。儲存後,轉到要附加該硬碟的個別機器,在該機器詳細資訊的硬碟部分下,點擊 ‘Attach a drive’(附加硬碟)並選擇該硬碟。

現在您有了三台機器,您可以開始將為 MongoDB 數據存儲添加的額外硬碟掛載到每台機器上。我建議將此硬碟添加為分割區。使用分割區允許操作系統分別管理每個區域中的資訊。為了將硬碟添加為分割區,我將首先檢查連接到我們機器的所有硬碟。為此,我將執行以下命令:

當我執行該命令時,我會得到說明我機器上的硬碟和設備的輸出。

MongoDB

在圖片中,我已將一個 10 GB 的硬碟標記為安裝了我們操作系統的硬碟。然後是另一個現在已附加的 20 GB 硬碟。硬碟位置是 /dev/vdb。您可以使用以下命令在此硬碟上創建分割區:

它將打開 fdisk 工具,這是一個提供硬碟分割功能的命令列工具,您可以在其中在我們的硬碟上創建分割區。它會給出一個提示 “Command (m for help):”,您需要在其中輸入 n 以創建新分割區,然後只需繼續按 Enter 鍵以接受預設值。在創建分割區後,輸入 w 以寫入變更。它看起來會像這樣:

它已創建一個類型為 ‘Linux’ 且大小為 20 GiB 的新分割區 1。現在分割區已創建,讓我們創建一個 LVM 池:

我輸入了 ‘19.5g’,因為我的分割區大小是 20g。接下來,執行以下命令以找出硬碟的名稱:

之後,使用以下命令以 ext4 方式格式化硬碟:

接下來,讓我們建立一個掛載磁碟的位置,以及一個用來存放 MongoDB 資料的資料夾。

為了在 fstab 中新增一條關於要掛載之新磁碟的項目,您可以直接使用以下命令:

在該命令中,blkid 會提供您每個磁碟的 UUID – 通用唯一識別碼。在這裡,我篩選出 MongoDB 磁碟的 UUID,並將此 UUID 分別與掛載資料夾的位置、檔案系統類型以及磁碟的其他選項結合。我正在將此行新增至 /etc/fstab。如果您不這樣做,在掛載磁碟時將會出錯。該項目看起來像這樣:

UUID=”695a62e6-021d-4fc0-945c-cc51a92d86da” /mongodb ext4 auto,noexec,rw,sync,nouser 0 0

現在,您可以將磁碟掛載到 /mongodb 位置:

安裝 MongoDB

系統準備就緒後,讓我們繼續安裝 MongoDB。雖然 Ubuntu 的官方套件庫中確實提供了 MongoDB 版本,但我建議您改用官方的 MongoDB 版本。原因在於 Ubuntu 套件庫的版本釋出相當落後,因此如果您想充分利用 MongoDB,就必須求助於官方釋出的版本。

由於 MongoDB 提供了自己的套件庫,您只需將其新增至您的系統,然後照常安裝 MongoDB 即可。以下是要遵循的步驟:

首先,匯入套件管理系統所使用的公鑰:

然後,我建立一個清單檔案。這將包含 MongoDB 所在的套件庫,以便您的系統可以從那裡下載它:

現在,我正在更新本地套件資料庫,以便套用這些變更。

現在,我只需使用以下命令安裝該套件:

我已在每台機器上安裝了 MongoDB。

現在 MongoDB 已啟動並執行,且已在建立的磁碟機上存放資料。如果預期會有高負載和/或大量連線,您可能需要提高 ulimit 值。

如果您想更深入地瞭解您的資料,您可能還想註冊 MongoDB 的 MMS,這是一個針對 MongoDB 的免費雲端監控服務。

為您的 MongoDB 雲端建立副本集

現在,讓我們建立一個副本集。在此之前,您需要確保每台機器之間可以互相通訊。為此,請在 /etc/hosts 中新增這些項目

為了進行驗證,您可以嘗試使用主機名稱來 ping 這些機器。因此,如果我的機器 1 的 IP 是 IP-1,例如 213.189.123.12,那麼與其輸入

我會輸入,

如果您已啟用防火牆(您確實應該這樣做),請確保節點可以在內部介面上傳送和接收連接埠 28017 和 27017 的 TCP 流量。

現在,在每台機器上,使用以下命令啟動 mongod 服務。

在機器 m1 上,

接下來,在機器 m2 上,

在機器 m3 上,

在這裡,

mongod 是服務的名稱

dbpath 是我們資料庫目錄的位置

replSet 是我們副本集的名稱。同一個副本集中的每台機器都應該相同

bind_ip 是您正在執行該服務的機器的主機名稱。

一旦您啟動了 mongod 服務,請前往主要伺服器(在我的例子中,我選擇了 m1),然後執行 mongo。

這將啟動 MongoDB 終端機。在終端機上,使用以下命令初始化 replicaSet。它將使用預設設定建立 replicaSet:

現在,讓我們使用以下命令將另外兩台機器新增為副本:

您可以使用以下命令監控狀態:

就是這樣。您現在應該已經在 CloudSigma’s 極速雲端上啟動並執行您的 MongoDB 叢集了。

Akshay Nagpal

作者 · CloudSigma

留言

目前尚無留言。成為第一個留言的人吧。