1. 程式人生 > >Linux下搭建MySQL叢集 / Mysql“叢集”和”主從“兩者的區別

Linux下搭建MySQL叢集 / Mysql“叢集”和”主從“兩者的區別

一、MySQL叢集簡介

1、什麼是MySQL叢集

MySQL叢集是一個無共享的(shared-nothing)、分散式節點架構的儲存方案,其目的是提供容錯性和高效能。

資料更新使用讀已提交隔離級別(read-committedisolation)來保證所有節點資料的一致性,使用兩階段提交機制(two-phasedcommit)保證所有節點都有相同的資料(如果任何一個寫操作失敗,則更新失敗)。

無共享的對等節點使得某臺伺服器上的更新操作在其他伺服器上立即可見。傳播更新使用一種複雜的通訊機制,這一機制專用來提供跨網路的高吞吐量。

通過多個MySQL伺服器分配負載,從而最大程式地達到高效能,通過在不同位置儲存資料保證高可用性和冗餘。

2、名稱概念

MySQL叢集有如下三層:

應用程式層:負責與MySQL伺服器通訊的各種應用程式。

Mysql伺服器層:處理SQL命令,並與NDB儲存引擎通訊和Mysql伺服器。

NDB叢集元件層:NDB叢集元件有時也稱資料節點,負責處理查詢,然後將結果返回給mysql伺服器。

其中MySQL資料庫叢集主要包括如下三部分:

1) SQL節點(SQL node - 下圖對應為 mysqld):分散式資料庫。包括自身資料和查詢中心結點資料

2) 資料節點(Data node - ndbd):叢集共享資料(記憶體中)

3) 管理伺服器(Management Server - ndb_mgmd):管理叢集 SQL node,Data node

拓撲結構圖如下所示:

Linux下搭建MySQL叢集

二、環境說明

1、系統環境

Linux下搭建MySQL叢集

2、軟體環境

MySQL叢集版本:

mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz

注:依據系統,在MySQL官網自行下載。

三、搭建叢集(Linux環境)

1、安裝叢集版本

a、準備工作

不管是Management Server,還是Data node、SQL node,都需要先安裝MySQL叢集版本,然後根據不用的配置來決定當前伺服器有哪幾個角色。

安裝之前準備好mysql使用者和mysql使用者組,

相關命令:

groupadd mysql

為了方便測試,確定相關機器的防火牆已關閉(或者設定防火牆這幾臺機器之間的網路連線是暢通無阻的),

相關命令:

chkconfig iptables off

b、安裝叢集版本

1.上傳安裝包至/usr/local目錄下,並解壓

tar -zxvf mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz

2.重新命名資料夾

mv mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64 mysql

3.授權

chown -R mysql:mysql mysql

4.切換mysql使用者

su - mysql

5.安裝MySQL

cd /usr/local/mysql

注:所有伺服器上都需要執行上述操作來安裝MySQL叢集版本。

2、叢集配置

a、管理節點

1.root使用者下,建立目錄和配置檔案

mkdir /var/lib/mysql-cluster

config.ini配置資訊如下:

[NDBD DEFAULT]

2.授權

chown -R mysql:mysql /var/lib/mysql-cluster

3.切換使用者

su - mysql

4.啟動管理服務

/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

注:命令列中的ndb_mgmd是mysql cluster的管理伺服器,後面的-f表示後面的引數是啟動的引數配置檔案。

如果在啟動後過了幾天又添加了一個數據節點,這時修改了配置檔案啟動時就必須加上--initial引數,不然新增的節點不會作用在mysql cluster中。

b、資料節點

1.編輯/etc/my.cnf檔案

# vim /etc/my.cnf

2.切換使用者

su - mysql

3.啟動資料節點服務

/usr/local/mysql/bin/ndbd --initial

注:第一次啟動需要加引數:–initial,以後就不用加了,直接執行: /usr/local/mysql/bin/ndbd

c、SQL節點

1.編輯/etc/my.cnf檔案(資料節點和SQL節點在統一伺服器時可省略)

# vim /etc/my.cnf

2.複製mysqld到系統服務裡面去

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

3.切換使用者

su - mysql

4.啟動資料節點服務

service mysqld start

d、完成效果

ndb_mgm> show

四、常用命令與問題整理

1) ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm 執行之後就是管理控制檯了,裡面可以繼續輸入命令。(具體命令可以使用help檢視)

2) 停止叢集伺服器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown

如果叢集配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1

3) 停止SQL節點的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown

4)使用需要注意如下兩點:

a.表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項建立,或用ALTER TABLE選項更改,以使用NDB Cluster儲存引擎在 Cluster內複製它們。如果使用mysqldump的輸出從已有資料庫匯入表,可在文字編輯器中開啟SQL指令碼,並將該選項新增到任何表建立語句,或 用這類選項之一替換任何已有的ENGINE(或TYPE)選項。

b.另外還請記住,每個NDB表必須有一個主鍵。如果在建立表時使用者未定義主鍵,NDB Cluster儲存引擎將自動生成隱含的主鍵。(註釋:該隱含 鍵也將佔用空間,就像任何其他的表索引一樣。由於沒有足夠的記憶體來容納這些自動建立的鍵,出現問題並不罕見)。

=======================================================================================================================

1.Mysql cluster: share-nothing,分散式節點架構的儲存方案,以便於提供容錯性和高效能。

需要用到mysql cluster安裝包,在叢集中的每一個機器上安裝。

有三個關鍵概念:Sql節點(多個),資料節點(多個),管理節點(一個),資料節點之間採用的是同步複製來保證各節點之間的資料一致性。

同步複製:
a) Master執行提交語句時,事務被髮送到slave,slave開始準備事務的提交。
b) 每個slave都要準備事務,然後向master傳送OK(或ABORT)訊息,表明事務已經準備好(或者無法準備該事務)。
c) Master等待所有Slave傳送OK或ABORT訊息,如果Master收到所有 Slave的OK訊息,它就會向所有Slave傳送提交訊息,告訴Slave提交該事務;如果 Master收到來自任何一個Slave的ABORT訊息,它就向所有 Slave傳送ABORT訊息,告訴Slave去中止事務。
e) 每個Slave等待來自Master的OK或ABORT訊息。如果Slave收到提交請求,它們就會提交事務,並向Master傳送事務已提交 的確認;如果Slave收到取消請求,它們就會撤銷所有改變並釋放所佔有的資源,從而中止事務,然後向Masterv送事務已中止的確認。
f) Master收到來自所有Slave的確認後,就會報告該事務被提交(或中止),然後繼續進行下一個事務處理。
由於同步複製一共需要4次訊息傳遞,故mysql  cluster的資料更新速度比單機mysql要慢。所以mysql cluster要求執行在千兆以上的區域網內,節點可以採用雙網絡卡,節點組之間採用直連方式。

2.主從(Master-Slave): 主從機器上安裝mysql community(普通版)就可以。
主從之間是通過mysql的replication來保證資料的一致性。相對mysql cluster的資料同步方式來講是非同步的。
Replication:主節點要開啟binlog,設定一個唯一的伺服器id(區域網內唯一);從節點設定伺服器id,binlog記錄了master上的所有操作,會被複制到從節點的relaylog並在從節點上回放。