全部產品
Search
文件中心

ApsaraDB for MongoDB:鏈式複製對執行個體效能影響測試

更新時間:Apr 01, 2025

本文通過ECS訪問ApsaraDB for MongoDB,測試並分析了ApsaraDB for MongoDB複本集執行個體中鏈式複製對執行個體效能的影響,為MongoDB執行個體效能最佳化提供參考。

鏈式複製

什麼是鏈式複製

MongoDB支援鏈式複製。當複本集中的某個從節點(Secondary節點)從另一個從節點同步資料時,就發生了鏈式複製。鏈式複製可以降低主節點(Primary節點)的負載,但可能會在不同的網路拓撲中導致更長的主從延遲。更多資訊,請參見Self-Managed Chained Replication

鏈式複製並不意味著所有節點必須形成單一的鏈條結構,而是Secondary 節點可根據網路往返時延(Round-Trip Time,RTT)等資訊,選取Primary以外的節點作為同步源。以5節點複本集拓撲結構為例,下圖中展示的網路拓撲結構均屬於鏈式複製。

配置鏈式複製

您可以在控制台的參數設定頁面調整settings.chainingAllowed 參數,以啟用或禁用鏈式複製。如何調整參數,請參見設定資料庫參數

在某些情況下,鏈式複製可能會導致主從同步延遲,您可以禁用鏈式複製以最佳化同步處理效能。

說明

出於安全性考慮,您並沒有對阿里雲MongoDB執行個體執行replSetReconfig命令的相關許可權,請通過控制台調整相關參數。

執行個體效能影響測試

測試環境

建立ECS執行個體和ApsaraDB for MongoDB複本集執行個體。如何建立,請參見棄置站台集執行個體通過控制台使用ECS執行個體(快捷版)

  • ApsaraDB for MongoDB執行個體架構:標準複本集拓撲結構(三節點,包含一個主節點、一個從節點和一個隱藏節點),並通過添加從節點和唯讀節點擴充複本集節點數。

  • ECS執行個體和MongoDB執行個體間的網路往返時延:測試執行個體在同一地區及可用性區域下,RTT(Round-Trip Time)平均值為0.103ms。

本次測試的執行個體配置如下:

配置項

ECS執行個體

ApsaraDB for MongoDB雲端硬碟架構執行個體

地區及可用性區域

華北2(北京)可用性區域H

華北2(北京)可用性區域H

網路類型

Virtual Private Cloud

Virtual Private Cloud

執行個體規格類型系列

計算型c6

獨享型

執行個體規格

ecs.c6.xlarge(4c8g)

ecs.c7.xlarge(4c8g)

儲存類型

ESSD PL0

ESSD PL1

執行個體或鏡像版本

Alibaba Cloud Linux 3.2104 LTS 64位

4.19.91-26.al7.x86_64

MongoDB核心版本

不涉及

大版本:5.0

小版本基準版本:5.0.30

測試載入器

本次壓力測試將採用開源社區的YCSB 0.17.0壓測工具。

說明

YCSB是一款用Java編寫的支援多種資料庫的效能測試工具,具體安裝和使用方法請參見YCSB

測試方法

  1. 添加白名單。登入ECS控制台,在執行個體詳情頁面的網路資訊地區查看ECS執行個體的主私網IP,將ECS執行個體的主私網IP添加到ApsaraDB for MongoDB執行個體的白名單中。

  2. 串連ECS執行個體

  3. 使用YCSB工具進行載入資料測試。

    ./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=5000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8

    參數說明:

    • recordcount:載入至ApsaraDB for MongoDB執行個體的資料總數。

    • mongodb.url:ApsaraDB for MongoDB執行個體的串連地址。本文使用的資料庫帳號為test,所屬資料庫為admin。您可以登入ApsaraDB for MongoDB控制台,在資料庫連接頁面的私網串連 - 專用網路地區查看串連地址。

    • threads:用戶端的並發線程數。

  4. 查看ycsb的測試結果以及測試執行個體的監控資訊。在監控資訊頁面的節點監控頁簽下,選擇本次測試對應的時間段,查看執行個體主節點的CPU使用率操作QPS數、平均回應時間指標。具體操作請參見節點監控(原基本監控)

測試結果

參數說明

Write Concern:資料持久化保證層級,決定了寫操作需要滿足哪些條件後才被認為成功完成。測試結果中相關取值介紹如下。

  • {w:"majority"}:預設配置,表示大多數(majority),等待寫操作被複製到複本集中大多數節點上後才確認完成。

  • {w: 1}:表示只需要Primary節點確認完成。

測試結果詳情

3節點

複本集拓撲結構:1個主節點、1個從節點、1個隱藏節點。

writeConcern為{w:"majority"}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

5277

5241

CPU使用率

65%

65%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

writeConcern為{w:1}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

15075

14785

CPU使用率

93%

93%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

7節點

複本集拓撲結構:1個主節點、5個從節點、1個隱藏節點。

writeConcern為{w:"majority"}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

3005

4312

CPU使用率

56%

85%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

writeConcern為{w:1}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

14414

11492

CPU使用率

91%

93%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

15節點

複本集拓撲結構:1個主節點、5個從節點、1個隱藏節點、8個唯讀節點。

包括7個投票節點和8個非投票節點(唯讀節點不參與投票)。

writeConcern為{w:"majority"}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

2932

3123

CPU使用率

58%

91%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

writeConcern為{w:1}

對比項

啟用鏈式複製

禁用鏈式複製

輸送量throughput(ops)

14093

7500

CPU使用率

90%

94%

操作QPS數(個)

image.png

image.png

平均回應時間RT(微秒)

image.png

image.png

效能對比及總結

  • 相同的節點數配置下,禁用鏈式複製是否會導致寫入效能下降,取決於writeConcern的配置。

    writeConcern為{w:1}

    • 3節點執行個體,禁用鏈式複製帶來的效能退化基本可以忽略不計。

    • 7節點執行個體,禁用鏈式複製帶來的效能退化約為20.3%

    • 15節點執行個體,禁用鏈式複製帶來的效能退化達到了46.8%,而且可以明顯觀察到禁用鏈式複製後主節點上CPU使用率的提升

    writeConcern為{w:"majority"}

    • 3節點執行個體,禁用鏈式複製帶來的效能退化基本可以忽略不計。

    • 7節點和15節點執行個體,禁用鏈式複製反而可以帶來大約6.5%~43.5%的效能提升。

      效能提升原因:禁用鏈式複製後,複本集內所有節點整體同步鏈路縮短,導致majority的條件更容易被滿足,單次寫入的延遲有所縮短。

      非投票節點數的影響:隨著非投票節點的數量增加(投票節點固定7個),禁用鏈式複製帶來的效能提升會越來越不明顯,這是由於主節點上承載的主從同步負載太高導致的。

  • 相同的chainingAllowed以及writeConcern配置下,寫入效能隨著節點數增加而下降。而且禁用鏈式複製後,寫入效能隨著節點數增加下降趨勢更加顯著。

    • 預設配置下(chainingAllowed:true+writeConcern:{w:"majority"}),由於複本集只能包含不超過7個投票節點,滿足majority的條件並沒有變化,因此將節點數從7個擴充到15個時,寫入效能退化並不明顯。

    • 無論是否禁用鏈式複製,writeConcern:{w:1}效能都要明顯優於writeConcern:{w:"majority"},符合writeConcern設計。

    • writeConcern配置固定時,隨著節點數增加,禁用鏈式複製相比啟用鏈式複製會顯著提高主節點的CPU使用率。

最佳實務

  • 節點數少時,您可以按需啟用或禁用鏈式複製。執行個體整體效能基本不會受到影響,CPU使用率差異不大。

  • 節點數多時:

    • writeConcern為{w:1},建議啟用鏈式複製。

    • writeConcern為{w: "majority" },需要在主節點負載(CPU使用率等)和執行個體效能之間做進一步的取捨。禁用鏈式複製有助於提升寫入效能,但相應的主節點負載也會顯著增加。