跳到主要內容區塊

ntuccepaper2019

專題報導

MySQL Cluster學習筆記
  • 卷期:v0037
  • 出版日期:2016-06-20

作者:陳俊傑 / 臺灣大學計算機及資訊網路中心教學研究組幹事


每當遇到連續假期台鐵花東車票,或是著名歌手的演唱會門票,總是會有開放購票當天瞬間湧入上萬人次搶票秒殺的新聞。為了解決這種大量處理問題,而發展出許多概念和技術。根據MySQL參考手冊的說明,MySQL Cluster讓資料能分散式的存取,卻又能維持資料的一致性[1],對於尚未決定資料庫版本的人,似乎是不錯的選擇。因此,本文藉由實際安裝與操作,讓初次架設資料庫的使用者也能覺得很實用。

 

簡介

MySQL Cluster可避免Split-brain的發生[2],且具有以下特性:
1. 無共享(shared-nothing)
2. 自動分片(auto-sharding)
3. 高可用性(High Availability)
4. 規模可擴充性(Scalability)
假設其中一台掛掉,另一台可充當備援,以確保資料的可使用性[3]。
適合初次學習叢集(Cluster)架構的使用者。

 

實驗架構


圖一 實驗架構圖

 

在MySQL Cluster中,主機共分三類[1]:
1. 管理主機:提供配置資料、啟動並停止節點、執行備份等,應優先啟動。
2. SQL Node:使用NDB叢集儲存引擎,對資料進行存取。
3. Data Node:記錄交易資料。
Web_1、Web_2為網頁伺服器,利用phpMyAdmin存取資料庫。

 

硬體環境

本文透過Oracle VM Virtual Box 5.0.16版[4]設定虛擬伺服器。

 


圖二 詳細資料

 

作業環境

1. 作業系統:Ubuntu 16.04 Server
2. Apache版本:2.4.20
3. PHP版本:7.0.5
4. phpMyAdmin版本:4.6.0

 

下載MySQL Cluster

執行主機:MGM_Node、Node_1、Node_2
1. 下載
  sudo wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.4/mysql-cluster-gpl-7.4.11-linux-glibc2.5-x86_64.tar.gz
2. 解壓縮
  sudo tar -zxvf mysql-cluster-gpl-7.4.11-linux-glibc2.5-x86_64.tar.gz
3. 重新命名
  sudo mv mysql-cluster-gpl-7.4.11-linux-glibc2.5-x86_64 mysql
4. 移動至/usr/local
  sudo mv mysql/usr/local

 

建立mysql群組及使用者

執行主機:MGM_Node、Node_1、Node_2
1. 新增mysql群組
  sudo groupadd mysql
2. 新增mysql使用者
  sudo useradd mysql -s /sbin/nologin -g mysql
3. 設定資料夾權限
  sudo chown -R root:root /usr/local/mysql
  sudo chown -R mysql:mysql /usr/local/mysql/data

 

管理主機配置

執行主機:MGM_Node
1. 新增mysql-cluster資料夾
  sudo vi /usr/local/mysql/mysql-cluster
2. 編輯config.ini檔案

 


圖三 管理主機配置內容

 

3. 啟用管理節點服務
  sudo /usr/local/mysql/bin/ndb_mgmd -f /usr/local/mysql/mysql-cluster/config.ini --initial
  註:--initial,初始化參數。

 

Data Node配置

執行主機:Node_1、Node_2
1. 編輯my.cnf檔案

 


圖四 Data Node配置內容

 

2. 啟用資料節點服務
  sudo /usr/local/mysql/bin/ndbd --initial

 

SQL Node配置

執行主機:Node_1、Node_2
1. 安裝libaio1套件
  sudo apt-get install libaio1
2. 初始化資料庫
  sudo /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3. 啟用SQL節點服務
  sudo /usr/local/mysql/support-files/mysql.server start

 

設定開機後自動執行

1. 設定開機內容

 


圖五 開機設定

 

2. 提供執行權限
  sudo chmod 755 /etc/init.d/myBoot
3. 更新開機執行
  sudo update-rc.d -f myBoot defaults
註:取消開機後自動執行,sudo update-rc.d -f myBoot remove

 

確認啟用狀態


圖六 查詢啟用狀態

 

設定登入MySQL的帳號

1. 設定root密碼
  sudo /usr/local/mysql/bin/mysqladmin -u root password "密碼"
2. 登入mysql命令列
  sudo /usr/local/mysql/bin/mysql -u root -p
  註:有設定密碼時,要加-p參數。
3. 設定資料庫使用者權限

 


圖七 新增使用者帳號的SQL語法

 

測試

1. 建立資料庫

 


圖八 建立資料庫

 

2. 新增資料表

 


圖九 新增資料表

 

3. 說定資料表欄位,儲存引擎須設定為「ndbcluster」

 


圖十 設定資料表欄位

 

4. 新增資料

 


圖十一 新增資料(1)

 


圖十二 新增資料(2)

 

5. 預覽結果

 


圖十三 在Web_1預覽結果

 


圖十四 在Web_2預覽結果

 

根據預覽結果,在Web_1與Web_2出現相同時間的資料,可確認資料庫已完成同步。

 

參考資料

[1] 第17章:MySQL叢集
http://twpug.net/docs/mysql-5.1/ndbcluster.html#mysql-cluster-overview
[2] 如何架設 MySQL Cluster
http://jaychung.tw/2015/09/12/mysql-cluster-deployment/
[3] MySQL Cluster 叢集安裝環境介紹
http://www.neo.com.tw/archives/869
[4] VirtualBox 4.3安裝Ubuntu 14.04(一)
http://blog.xuite.net/yh96301/blog/220731233