要確保 Aerospike 叢集在生產環境中高效、穩定地運行,一套清晰的管理與維運策略至關重要。本文將作為一份實戰手冊,從核心設定檔 aerospike.conf 的解析開始,逐步深入介紹如何使用 Aerospike 提供的各種命令列工具 (asinfo, asadm, aql, asbackup) 來執行日常的管理、監控、資料操作及備份還原等關鍵任務。

第一部分:核心組態詳解 (aerospike.conf)

Aerospike 的所有行為都由其設定檔定義。理解其中的核心區塊是管理叢集的第一步。

1. 網路 (network)

此區塊定義了節點間如何通訊。

  • service: 用於客戶端應用程式連接的服務位址。
  • fabric: 用於叢集內節點間資料同步與重新平衡的通訊。
  • heartbeat: 用於節點間互相偵測存活狀態。在不支援多播 (multicast) 的雲端環境中,必須使用 mesh 模式,並明確列出種子節點 (seed nodes) 的位址。
    heartbeat {
      mode mesh
      mesh-seed-address-port 10.0.0.123 3002
      mesh-seed-address-port 10.0.0.124 3002
      # ... 其他種子節點
      port 3002
      interval 150
      timeout 10
    }
    

2. 命名空間 (namespace)

Namespace 是資料的邏輯分區,類似於關聯式資料庫中的 “database”。每個 namespace 都有自己獨立的儲存策略。

namespace test {
  replication-factor 2
  memory-size 4G
  storage-engine memory
}
  • replication-factor: 資料副本數。設定為 2 表示每筆資料在叢集中都有一份主副本和一份備份。
  • memory-size: 此 namespace 可使用的最大記憶體量。
  • storage-engine: 儲存引擎類型。最常用的是 device(混合式儲存,索引在記憶體,資料在 SSD),效能最佳的是 memory(所有資料和索引都在記憶體)。

第二部分:動態管理與監控 (asinfo & asadm)

Aerospike 的一大優勢是支援在不重啟服務的情況下動態修改部分設定。

1. asinfo: 單節點操作工具

asinfo 用於對單一節點發送命令。

  • 查詢設定: asinfo -v 'get-config:context=namespace;id=test' -l | grep memory-size
  • 動態修改設定: asinfo -v 'set-config:context=namespace;id=test;memory-size=2G'

注意: 動態修改的設定在節點重啟後會遺失,因此務必同步更新 aerospike.conf 檔案。

2. asadm: 叢集級管理工具

asadm 提供一個互動式 shell,能同時對叢集中所有節點執行命令,是日常監控的首選。

  • 進入互動式 shell: asadm
  • 查看叢集摘要: Admin> info
  • 監控即時延遲: Admin> show latencies -v
  • 查看統計資料: Admin> show statistics like client

圖表解說:Aerospike 管理工具架構

此組件圖展示了各種管理工具如何與 Aerospike 叢集進行互動。

@startuml
!theme _none_
skinparam dpi auto
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam minClassWidth 100
skinparam defaultFontSize 16
title Aerospike 管理工具生態系

package "管理工具" {
  [asadm]
  [asinfo]
  [aql]
  [asbackup]
}

node "Aerospike 叢集" as Cluster {
  node "Node 1" as N1
  node "Node 2" as N2
}

asadm -- Cluster : (叢集級操作)
asinfo -- N1 : (單節點操作)
aql -- Cluster : (資料操作)
asbackup -- Cluster : (備份/還原)
@enduml

第三部分:資料操作與檢視 (aql)

AQL (Aerospike Query Language) 是一個類 SQL 的命令列工具,非常適合在開發或除錯時快速地對資料進行增刪改查。

  • 插入資料:
    aql> INSERT INTO test.demo (PK, foo, bar) VALUES ('key1', 123, 'abc');
    
  • 查詢資料:
    aql> SELECT * FROM test.demo WHERE PK = 'key1';
    
  • 顯示中繼資料 (TTL, generation):
    aql> SET RECORD_PRINT_METADATA true
    aql> SELECT * FROM test.demo WHERE PK = 'key1';
    

第四部分:備份與還原 (asbackup & asrestore)

資料的備份與還原是生產環境維運的必要環節。

圖表解說:備份與還原活動圖

此活動圖清晰地展示了使用 asbackupasrestore 進行資料庫備份與還原的標準流程。

@startuml
!theme _none_
skinparam dpi auto
skinparam defaultFontName "Microsoft JhengHei UI"
skinparam minClassWidth 100
skinparam defaultFontSize 16
title Aerospike 備份與還原流程

start
:<b>1. 執行備份</b>;
note right: asbackup -n <namespace> -o <備份檔案>
:等待備份完成;

:<b>2. (可選) 清空 Namespace</b>;
note right: asadm -e "manage truncate ns <namespace> set <set>"
:等待清空完成;

:<b>3. 執行還原</b>;
note right: asrestore -i <備份檔案>
:等待還原完成;
:<b>4. 驗證資料</b>;
note right: 使用 aql 查詢驗證資料是否已還原
stop
end note

end note

end note

end note

@enduml

核心指令:

  • 執行備份:
    asbackup --namespace test --output-file test_backup.asb
    
  • 執行還原:
    asrestore --input-file test_backup.asb
    

重要注意事項: asrestore 預設不會還原記錄的 generation (世代) 數。如果目標叢集中已存在相同主鍵 (PK) 的記錄,還原時可能會發生版本覆蓋問題。可以使用 --unique--replace 等參數來控制衝突的解決策略。

透過熟練運用這些工具與概念,系統管理員和 DevOps 工程師便能有效地設定、監控、維護及保護 Aerospike 叢集,確保其在生產環境中的高效與穩定。