本人日前曾實驗過MySQL容錯叢集MySQL MMM:
Multi-Master Replication Manager for MySQL
可實現高可用效能負載與Fail Over 容錯轉移之叢集,今將實現MySQL官方做法建構HA叢集
操作過兩者HA解決方案且比較後-兩者同樣皆須一台擔任Monitor與仲裁角色,只不過MMM
另需預先設定Master to Master 資料複寫前置作業,且需安裝大量Perl套件,程序較官方做法複雜
今將實作MySQL釋出套件官方做法:
請先至MySQL 官方下載以下套件: 下述為官方最新釋出(7.1.10)之Cluster 套件版本
僅下載部份基本需要安裝套件
MGM Node: rpm -ivh MySQL-Cluster-gpl-tools-7.1.10-1.rhel5.i386.rpm
rpm -ivh MySQL-Cluster-gpl-management-7.1.10-1.rhel5.i386.rpm
SQL Node: rpm -ivh MySQL-Cluster-gpl-server-7.1.10-1.rhel5.i386.rpm
rpm -ivh MySQL-Cluster-gpl-client-7.1.10-1.rhel5.i386.rpm
DATA Node: rpm -ivh MySQL-Cluster-gpl-storage-7.1.10-1.rhel5.i386.rpm
MySQL 5.5.11: 本Lab使用源碼編譯安裝MySQL於SQL Node 主機上,切記勿使用發行版YUM
安裝MySQL!!!
Memcached 1.4.5 : 由於本人先前安裝Remi Repo: 可以利用yum -y install memcached
Memcached 套件取得為最新的1.4.5
memcache 3.0.6 (支援php): 另外我們額外安裝php程式支援memcache 模組,稍後將說明
分享拓樸:

實驗架構設計:
OS 使用CentOS 5.6 * 3 , 建議SQL Node*1 , MGM*1,Data *2 獨立安裝,
本例將SQLNode與MGM 安裝成一台, Data Node *2
MGM Node: 用來啟動/關閉 Cluster,及其他管理作業,實際 DB 運作不需要此程序。
192.168.0.162(mgm node +sql node)
SQL Node: 用來連結 Web AP 與 DB ,可建置多個以提高多個的 AP 連線效率
,實際DB資料不存放在此,擴充 node 時,至少需要有一台可正常運作。
Data Node: 實際資料庫的儲存位置,並負責彼此抄寫的任務,愈多台可提高存取效率。
192.168.0.171(node1) ,192.168.0.172(node2)
實驗開始
About Memcached #本例使用Remi Repo Memcached1.4.5 版本實作
shell> yum -y install memcached
故組態參數設定檔位址位於
vi /etc/sysconfig/memcached
PORT="5000" #設定Memcached port number
USER="memcached"
MAXCONN="1024" #memcached 最大可連線數
CACHESIZE="50" #配置多少RAM給Memcached 使用
OPTIONS=""
設定完成後,請啟動memcached 程式,並檢視memcached 是否已順利啟動
shell> service memcached restart
shell> chkconfig memcached on
shell> ps -aux | grep 'mem' #由下圖可知memcached已順利啟動
接者我們另額外安裝讓PHP支援使用memcached 模組, memcache.3.0.6
透過下列Command 檢視目前的PHP是否已支援memcached 模組
shell> php -i | grep -i 'memcache' #memcache support = > enabled
[小結]
memcached是一套高效能 分散式的快取系統,memcached 是利用記憶體來儲存快取資料,
可以利用memcached減少資料庫負載增加讀取速度,提升MySQL運行效能
[MySQL Cluster _組態MGM Node 設定]
於前面摘要中已將MGM 主機相關套件安裝完成,THEN 我們需建立MGM 組態檔案config.ini
在此我們
mkdir -p /var/lib/mysql-cluster #建立存放config.ini 目錄
Then
vi /var/lib/mysql-cluster/config.ini #編輯參考參數如下
[ndbd default]
NoOfReplicas=2 #複寫之結點數
DataMemory=80M #配置給Data storage ram 大小
IndexMemory=18M #配置給索引儲存大小
[tcp default]
portnumber=2202 #MySQL叢集使用PORT號
[ndb_mgmd] #宣告MGM之Host IP/Hostname 與datadir目錄位置
hostname=192.168.0.162
datadir=/var/lib/mysql-cluster
[ndbd] #宣告data node1之Host IP/Hostname 與datadir目錄位置
hostname=192.168.0.171
datadir=/var/lib/mysql-cluster
[ndbd]
hostname=192.168.0.172 #宣告data node2之Host IP/Hostname 與datadir目錄位置
datadir=/var/lib/mysql-cluster
[mysqld] #宣告mysqld host ip /hostname(SQL Node)
hostname=192.168.0.162 #本例將MGM與SQL Node安裝至同一台主機.162
[MySQL Cluster _組態Data Node 設定]
請預先參考前面摘要所述將Data Node 基本套件預先安裝ok
上一布,MGM Node 組態檔案設定OK後,接者著手設定Node1 & Node 2(storage node)
我們分別在node1 & node2 兩台之下新增 /etc/my.cnf
並填入以下參數設定儲檔後離開即可
[MYSQLD]
ndbcluster # run NDB engine
ndb-connectstring=192.168.0.162 # mgm hostname or ip
[MYSQL_CLUSTER]
ndb-connectstring=192.168.0.162 # location of MGM node
[MySQL Cluster _組態SQL Node 設定] # 此時之mysqld仍處未啟動狀態
*本人是使用官方MySQL 5.5.11 源碼安裝好MySQL *
編輯/etc/my.cnf #插入下述幾行參數command 即可
[mysqld]
ndbcluster # run NDB storage engine #mgm目前與sql為同一台主機
ndb-connectstring=mgm 這邊要填入 mgm node的主機名稱或IP
[mysql_cluster]
ndb-connectstring=mgm #這邊要填入 mgm node的主機名稱或IP #可參見下圖
[MySQL Cluster _啟動]
接者,我們組態完各個Node 設定後,可進行叢集啟動動作..請注意以下要點
1st. 首先.切換只MGM Node 進行叢集設定初始化與MGM Node啟動如下
>
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial #--initial 初次初始化才加上
將叢集MGM啟動後.我們使用以下Comand 來檢視叢集啟動狀況
> ndb_mgm -e show #由於我們尚未加入各個Node 故目前Node 處未連線狀態
Then MGM 啟動後,接者我們需將Node1 & Node2 二節點加入MGM Cluster中
請分別至node1 & node2 主機下以下command即可初始化啟動ndbd
>ndbd --initial #--initial 唯有初次初始化才加上,日後啟動使用ndbd即可
將Data Node啟動後.我們使用以下Comand 來檢視叢集啟動狀況
> ndb_mgm -e show #由於我們已成功啟動node1& node2 ,目前僅剩下SQL Node 未啟動
目前node1(192.168.0.171) 為master node
Then MGM 與 Data Node 啟動後,我們接下來進行最後的SQL Node 啟動
SQL Node 啟動: service mysql restart 即可
將SQL Node啟動後.我們使用以下Comand 來檢視叢集啟動狀況
> ndb_mgm -e show #由於我們已完成啟動node1& node2 ,SQL Node
>all status 再次檢視確認node1,node2是順利啟動
[測試叢集容錯]: node1(master) shutdown , 測試master 是否轉移至node2 接手
data node 角色 > ndb_mgm -e show
# 當node1 crash down後 node2 即變為master 持續接手mysql data node 運作
總結: 建議使用兩台SQL Node 同時存取node1 與node2 測試叢集容錯效果相形亦彰
並將MGM Node 獨立切割出一台MGM不錯考量
LAB實作時參考資料:
OssLab 開放軟體時驗室 http://wiki.osslab.org.tw/
Hello world : http://helloworld.pixnet.net/