作者:陳俊傑 / 臺灣大學計算機及資訊網路中心教學研究組幹事
每當遇到連續假期台鐵花東車票,或是著名歌手的演唱會門票,總是會有開放購票當天瞬間湧入上萬人次搶票秒殺的新聞。為了解決這種大量處理問題,而發展出許多概念和技術。根據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