MySQL 是一種使用廣泛的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。在大型應(yīng)用上,我們需要使用 MySQL 集群來滿足高可用性和高性能的需求。
MySQL 5.7 支持多種集群方案,其中包括主從復(fù)制、Galera Cluster 和NDB Cluster。
主從復(fù)制是 MySQL 集群的最基本的實現(xiàn)方式,適用于讀寫分離場景。通過一個主庫寫入數(shù)據(jù),再將修改同步到從庫上。從庫的讀操作可以分擔主庫的負載,以增加系統(tǒng)的吞吐量。
mysql> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.0.0.1 Master_User: repl_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000246 Read_Master_Log_Pos: 8218829 Relay_Log_File: mysqld-relay-bin.000130 Relay_Log_Pos: 8218982 Relay_Master_Log_File: mysql-bin.000246 Slave_IO_Running: Yes Slave_SQL_Running: Yes
Galera Cluster 是一個基于多主復(fù)制的實現(xiàn),可實現(xiàn)高可用性和線性可擴展性。在 Galera Cluster 中,每個節(jié)點都有相同的數(shù)據(jù),并可以進行讀寫操作。當一個節(jié)點向另一個節(jié)點發(fā)送寫請求時,被請求的節(jié)點進行數(shù)據(jù)同步,并將修改傳遞給其他節(jié)點。Galera Cluster 需要至少三個節(jié)點來實現(xiàn)。
mysql> SHOW STATUS LIKE 'wsrep_cluster%'; +--------------------------+---------+ | Variable_name | Value | +--------------------------+---------+ | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | 35c7f080-ca2b-11e6-bd54-0047e0a3e74c | | wsrep_cluster_status | Primary | +--------------------------+---------+
NDB Cluster 是一種高度可擴展,實時讀寫延遲低的分布式數(shù)據(jù)庫。NDB Cluster 可以在多個物理節(jié)點之間進行分區(qū)和復(fù)制。這使得 NDB Cluster 成為適合于大規(guī)模 Web 應(yīng)用,移動應(yīng)用和游戲等實時應(yīng)用的解決方案。
mysql> SHOW STATUS LIKE '%NDB%'; +-----------------------------------------------+-------+ | Variable_name | Value | +-----------------------------------------------+-------+ | Ndb_status | STARTED| | Ndb_cluster_node_count | 2 | | Ndb_number_of_data_nodes | 2 | | Ndb_overload | 0 | | Ndb_data_node_version | 8.0.16| +-----------------------------------------------+-------+
以上是 MySQL 5.7 主要的三種集群方案。不同的集群方案適用于不同的業(yè)務(wù)場景。選擇適合自己的集群方案,可以在實現(xiàn)高可用性和高性能的同時,為企業(yè)節(jié)約成本和提高生產(chǎn)率。