標籤:mysql叢集 dex scale 自動 images 全文索引 儲存引擎 限制 lin
1.1.1.
MySQL叢集基本架構
本文所介紹的MySQL叢集指基於NDBCluster的MySQL 叢集。 一個MySQL叢集包含一個或多個Management Node、Data Node和SQL Node。
管理節點Management Node:用於對叢集本身的管理,運行ndb_mgmd服務。應當首先啟動管理節點,再啟動其它節點。
資料節點Data Node:用於儲存叢集的資料,運行ndbmtd或ndbd服務。資料節點支援複製。
SQL節點SQL Node:用於對外提供SQL查詢服務,運行mysqld服務,其中的資料表使用ndbcluster儲存引擎。
NDBCluster:NDBCluster是MySQL提供的一種基於記憶體的儲存引擎,提供了高可用和資料持久化的特性。 MySQL還提供了其它的儲存引擎,包括MyISAM和InnoDB以及Memory等幾種。
MySQL叢集的節點之間的關係可以使用描述。
1.1.2.
節點分組、資料分區以及複製
(1)MySQL Cluster的資料表在資料節點中的分布方式:
MySQL Cluster中的資料節點可以成一個或多個節點群組(Node Group)。而一個資料表可以分成一個或多個分區(Partition)。每個分區的資料存在在一個節點群組中的多個節點中,這些節點中的分區互為複製(Replicas)。
展示了一個資料表分為4個分區P1,P2,P3,P4時各個分區在4個節點N1,N2,N3,N4組成的2個節點群組G1,G2中的分布情況。P1和P2分佈於G1中,P3和P4分佈於G2中。任何一個分區至少同時儲存於2個節點中。
(2)這種基於節點分組和資料分區的分布方式的優點:
在任何資料節點的單點失敗時,該節點所儲存的資料在其它節點還存在至少一份複製品。從而避免了單點故障造成叢集失效。
1.1.3.
NDBCluster和InnoDB的比較
NDBCluster和InnoDB這兩種儲存引擎的比較結果見下表:
本表資料來源於MySQL叢集官方文檔https://dev.mysql.com/doc/index-cluster.html。
特性 |
InnoDB |
NDBCluster |
MySQL server版本 |
5.7 |
5.7 |
InnoDB版本 |
5.7.20 |
5.7.20 |
NDBCluster版本 |
N/A |
7.5.8/7.6.4 |
資料量 |
64TB |
128TB |
交易隔離等級 |
所有層級 |
READ COMMITTED |
MVCC |
支援 |
不支援 |
資料壓縮 |
支援 |
不支援 |
大的資料行(>14KB) |
VARBINARY,VARCHAR, BLOB,TEXT |
BLOB,TEXT |
複製 |
MySQL Replication: 非同步複製、半同步複製 |
叢集內部:自動同步複製; 叢集之間:非同步複製(MySQL Replication)。 |
讀操作橫向擴充(scale out) |
MySQL Replication |
叢集內部:自動分區; 叢集之間:複製。 |
寫操作橫向擴充(scaleout) |
不支援。 應用程式層級的分區 |
支援。 叢集內部:自動分區。 |
高可用(HA) |
InnoDB cluster |
NDBCluter 99.999% |
節點失效恢複和容錯移轉 |
MySQL 分組複製 |
NDBCluster體繫結構提供支援 |
節點失效恢復 |
>=30秒 |
<=1秒 |
即時效能 |
N/A |
支援 |
並發寫 |
支援 |
最多48個並發寫 |
複製衝突檢測和解決 |
支援 |
支援 |
雜湊索引 |
不支援 |
支援 |
線上添加節點 |
MySQL分組複製添加讀寫節點 |
添加任何節點 |
1.1.4.
NDBCluster的限制
使用NDBCluster儲存引擎時存在以下的限制:
(1)不支援臨時資料表。
(2)不能為TEXT和BLOG類型的列建立索引。
(3)不支援FULLTEXT全文索引。
(4)使用雜湊索引時不應該有NULL,否則導致全表掃描。
(5)不支援首碼索引。
(6)位(BIT)列不能作為主鍵。
(7)AUTO_INCREMENT列只能用於主鍵。
(8)外鍵限制:被引用的外鍵欄位如果不是主鍵,則必須有UNIQUE索引。
(9)ON UPDATE CASCADE:當主表中的欄位為主表的主鍵時,不被支援。
(10)交易隔離等級:僅支援READ COMMITTED隔離等級。
MySQL學習筆記02MySQL叢集相關概念