MemSQL分布式架構介紹(一)


最近在了解MemSQL架構,看了些官方文檔,在這里做個記錄,原文在這里:http://docs.memsql.com/latest/concepts/distributed_architecture/

 

分布式架構

MemSQL的分布式架構被設計為直接的、簡單的並且快速的。這里概述了MemSQL集群,包括各式組件的交互。同時介紹了當你執行一個查詢或者管理操作的時候,MemSQL環境發生了什么。

 

幾個概念:

1、Aggregators(匯聚器) MemSQL集群的一種節點,為訪問MemSQL集群的網關,一個集群中可以有多個匯聚器,匯聚器主要負責向葉子節點發送DML請求、匯聚操作結果並返回給客戶端

2、Master Aggregator(主匯聚器) 是一種特殊的匯聚器,除了一般匯聚器的功能,還負責監控集群、失效切換及DDL語句的操作。每一個MemSQL的集群只能有一個主匯聚器。當主匯聚器失效時,MemSQL的集群和DDL語句操作將被掛起,而一般的DML語句仍可以通過其他的匯聚器進行操作。如果主匯聚器的程序文件沒有丟失,那么只要重啟一下主匯聚器即可,主匯聚器將會自動重連。否則的話,可以在一個子匯聚器上執行命令來將子匯聚器提升為主匯聚器。

3、Leaf Node(葉子節點) 在MemSQL集群中,葉子節點的作用是存儲和計算。負責在集群中存儲數據的切片。為了優化性能,MemSQL會圍繞葉子節點自動分布數據到分區。每一個葉子節點由若干個分區組成。每一個分區其實就是一個database。

4、Partitions(分區)  一個葉子節點由多個分區組成。每一個分區其實就是一個database。比如說,如有你創建了一個database名為test,那么當你在一個葉子節點執行SHOW DATABASES 時,會看到數據庫名為類似test_5,表明這是分區5。通過SHOW DATABASES EXTENDED命令輸出的State列,可以查看分區是Master或者slave分區或者正處於其他狀態的分區。Master分區是數據庫真正執行操作的分區,而slave分區則是通過網絡和sql操作將Master上的數據復制到slave上。另外,slave分區是只讀的。

 

設計原則

MemSQL分布式系統的設計遵循如下的原則:

    • 性能優先   MemSQL是世界上最快的single-box數據庫,分布式部署在多台服務器上時更是能讓性能有線性的提升。MemSQL集群能夠處理每秒數十億行數據,而硬件只需要普通的商用硬件即可。
    • 將集群分為匯聚層和葉子層同時盡可能多的將工作交由葉子層處理   這允許你在線增加額外的葉子節點到集群來提升集群容量和查詢性能
    • 無單點失敗風險  通過運行冗余的集群,可以確保每一個數據分區都有一個熱備份。當葉子節點失效時,MemSQL將自動切換到salve分區。匯聚層同樣也有類似的技術來規避單節點風險。
    • 強大但又簡單的集群管理   分布式系統提供了REBALANCE PARTITIONS功能來恢復分區數據
    • 沒有隱式的數據移動  

 

集群組件

一個MemSQL集群由兩個層面組成:

  • 匯聚器   匯聚器處理分布式系統的元數據,路由查詢並匯聚結果。依賴於查詢量,一個集群可能有一個或者多個匯聚器。主匯聚器是一個特殊的匯聚器,只處理元數據並負責集群的監控和失效切換
  • 葉子節點    葉子節點存儲和執行sql查詢。一個葉子節點是一個由多個分區組成的MemSQL服務實例。

 匯聚器和葉子節點共享同一套MemSQL的二進制程序文件,因此你在集群中部署時可以完全相同。默認的話MemSQL只會作為葉子節點來運行。要運行MemSQL作為一個匯聚器,需要使用./memsqld --master-aggregator來指定主匯聚器。

MemSQL集群最小安裝只需要一個主匯聚器和一個葉子幾點即可。你可以添加更多的匯聚器,這些匯聚器會從主匯聚器讀取元素據,也能夠在葉子節點運行DML命令

已部署的匯聚器和葉子節點的數量決定了集群的存儲容量和性能。典型的部署結構中,葉子節點和匯聚器的比例為5:1。在一個設計良好的集群中:

  • 當集群需要比較高的連接能力的時候,匯聚器比葉子節點的比率要較高
  • 當集群需要比較大的存儲容量時,葉子節點比匯聚器的比率要比較高

你能夠列出所有的匯聚器和葉子節點通過使用SHOW AGGREGATORS 和 SHOW LEAVES命令

memsql> SHOW AGGREGATORS; +---------------+-------+--------+--------------------+---------------------------+-------------------+ | Host | Port | State | Opened_Connections | Average_Roundtrip_Latency | Master_Aggregator | +---------------+-------+--------+--------------------+---------------------------+-------------------+ | 127.0.0.1 | 3306 | online | 0 | NULL | 1 | | 192.168.1.116 | 3306 | online | 1 | 0.200 | 0 | +---------------+-------+--------+--------------------+---------------------------+-------------------+ 2 rows in set (0.00 sec) memsql> SHOW LEAVES; +---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+ | Host | Port | Availability_Group | Pair_Host | Pair_Port | State | Opened_Connections | Average_Roundtrip_Latency | +---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+ | 192.168.1.110 | 3306 | 1 | 192.168.1.112 | 3306 | online | 5 | 0.299 | | 192.168.1.111 | 3306 | 1 | 192.168.1.113 | 3306 | online | 5 | 0.293 | | 192.168.1.112 | 3306 | 2 | 192.168.1.110 | 3306 | online | 1 | 0.271 | | 192.168.1.113 | 3306 | 2 | 192.168.1.111 | 3306 | online | 1 | 0.264 | +---------------+-------+--------------------+---------------+-----------+--------+--------------------+---------------------------+

 

集群通信

除了復制時的數據傳輸,所有MemSQL節點間的通信都是通過SQL命令實現的。比如說,集群心跳是通過select 1查詢實現的而非特殊的接口。

 

 

 后續內容將在MemSQL分布式架構介紹(二)中繼續記錄

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM