本文的英文版本連接是 http://xuri.me/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.htmlhtml
MySQL Cluster 是 MySQL 適合於分佈式計算環境的高實用、高冗餘版本。它採用了 NDB Cluster 存儲引擎,容許在1個 Cluster 中運行多個MySQL服務器。經過無共享體系結構,系統可以使用廉價的硬件,並且對軟硬件無特殊要求。此外,因爲每一個組件有本身的內存和磁盤,不存在單點故障 node
開發者官方網站 www.oracle.commysql
在這篇文章中,我會敘述如何 在 Ubuntu 12.04 LTS 構建高可用 MySQL 集羣 linux
1. SQL Cluster 虛擬主機sql
要建立一個功能齊全的集羣,至少須要3臺主機才能夠完成。其中一個主機做爲管理節點,另外兩個作數據節點。若是數據節點脫機,羣集仍然能夠工做,可是一旦管理節點出現問題,將致使集羣沒法正常工做,因此在可能的狀況下,創建兩個管理節點。在個人例子中,我將使用二個管理節點的集羣shell
這個例子中一共使用了 5 臺主機,系統架構以下圖所示 數據庫
虛擬機羣平臺 VMware ESXi 4.1ubuntu
虛擬機操做系統 Ubuntu 12.04.3 LTS (Precise Pangolin) 64-bitbash
全部虛擬機都在同一 192.168.67.0/24 網絡地址段當中,請根據你的網絡狀況來具體配置 IP 地址,在開始以前請確保全部主機網絡鏈接設置正常
服務器
2. 安裝管理節點
首先,咱們須要安裝的 MySQL 集羣的管理節點。咱們將開始與 MySQL-MGM-1,配置完成後按照相同的步驟配置第二個管理節點,若是隻設定一個管理節點,那麼繼續下一步的配置
在開始配置前,請訪問 http://www.mysql.com/downloads/cluster/#downloads 確認當前安裝文檔的版本信息. 這裏我所使用的 MySQL Cluster 版本是 7.3.3
首先,咱們把 MySQL Cluster 安裝包下載到管理主機上。進入到 /usr/src 文件夾並建立 mysql-mgm 目錄
mkdir /usr/src/mysql-mgm cd /usr/src/mysql-mgm
完成這一步後,在 MySQL 的官方網站下載最新的安裝源代碼,並解壓軟件包
wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz tar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
進入解壓縮後的文件夾,而後移動二進制文件
cd mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64 cp bin/ndb_mgm /usr/bin cp bin/ndb_mgmd /usr/bin
更改目錄的權限,並能夠選擇刪除下載的源文件
chmod 755 /usr/bin/ndb_mg* cd /usr/src rm -rf /usr/src/mysql-mgm
接下來,咱們建立管理節點配置文件,在 /var/lib/mysql-cluster/ 文件夾中,名字叫作 config.ini ,這個文件夾事先不存在,建立它
mkdir /var/lib/mysql-cluster
在 config.ini 文件建立完成後,使用你喜歡的文本編輯器編輯此文件,內容相似於這樣
[NDBD DEFAULT] NoOfReplicas=2 DataMemory=80M IndexMemory=18M [MYSQLD DEFAULT] [NDB_MGMD DEFAULT] DataDir=/var/lib/mysql-cluster [TCP DEFAULT] # Section for the cluster management node [NDB_MGMD] NodeId=1 # IP address of the first management node (this system) HostName=192.168.67.10 [NDB_MGMD] NodeId=2 #IP address of the second management node HostName=192.168.67.11 # Section for the storage nodes [NDBD] # IP address of the first storage node HostName=192.168.67.12 DataDir= /var/lib/mysql-cluster [NDBD] # IP address of the second storage node HostName=192.168.67.13 DataDir=/var/lib/mysql-cluster # one [MYSQLD] per storage node [MYSQLD] [MYSQLD]
全部主機都定義在這個裏,即便咱們只安裝第一個。請注意,管理主機節點須要設定 NodeId,而 NDBD 節點不須要設定.
完成這步操做後,能夠用下面的命令啓動管理節點
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/
完成這步操做後, 你能夠經過下面的命令向 init.d 中添加一個條目,以自動啓動程序
echo "ndb_mgmd -f /var/lib/mysql-cluster/config.ini --configdir=/var/lib/mysql-cluster/" > /etc/init.d/ndb_mgmd chmod 755 /etc/init.d/ndb_mgmd
若是一切順利,第二個管理節點上遵循相同的步驟,並使用相同的配置。請不要改變的節點配置文件中的 ID
你可使用 ndb_mgm 命令來驗證管理節點的運行,(只須要在終端中輸入 ndb_mgm ) ,並經過鍵入 show,啓動配置實用程序。此時 NDBD 節點和 MySQL 節點處於斷開狀態,須要將全部節點配置完成才能夠輸出正確的狀態。
3. 數據節點
建立數據節點與建立管理節點的過程是相似的。讓咱們開始建立一個 mysql 組,將用戶 mysql 添加到 mysql 組中
groupadd mysql useradd -g mysql mysql
進入 /usr/local ,並下載和配置管理節點時使用的相同的壓縮文檔,並解壓
cd /usr/local/ wget http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz tar xvfz mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64.tar.gz
建立一個名爲 mysql 指向解壓的文件夾(這之後將用於DB集羣,因此不要刪除它!)的的軟鏈接。建立完成後,你能夠安裝數據庫
ln -s mysql-cluster-gpl-7.3.3-linux-glibc2.5-x86_64 mysql cd mysql apt-get install libaio1 libaio-dev scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
修改文件權限
chown -R root:mysql . chown -R mysql data
與管理節點上同樣,咱們但願的 DataBase 引擎自動啓動,所以,咱們須要建立 init.d 命令
cp support-files/mysql.server /etc/init.d/ chmod 755 /etc/init.d/mysql.server
最後,複製 bin 文件夾到 /usr/bin 的位置,並建立一個符號連接,以保持可以正確的引用
cd /usr/local/mysql/bin mv * /usr/bin cd ../ rm -fr /usr/local/mysql/bin ln -s /usr/bin /usr/local/mysql/bin
MySQL 配置文件目前不存在,因此咱們須要本身建立它。該文件位於 /etc/ 中,並命名爲 my.cnf 文件。使用你喜歡的文本編輯器,並添加如下幾行
[mysqld] ndbcluster # IP address of the cluster management node ndb-connectstring=192.168.67.10,192.168.67.11 [mysql_cluster] # IP address of the cluster management node ndb-connectstring=192.168.67.10,192.168.67.11
請注意,這兩個管理節點的地址,使用逗號分隔。若是你只有一個管理節點,只需在列表中刪除第二個。一旦 my.cnf 文件已保存,咱們須要建立 MySQL 的數據文件夾
mkdir /var/lib/mysql-cluster
完成這些後,咱們須要初始化集羣並啓動該服務。只有當你開始第一次的節點,或當在管理節點上的 /var/lib/mysql-cluster/config.ini 文件被更改時,須要作初始化
cd /var/lib/mysql-cluster ndbd –-initial /etc/init.d/mysql.server start
接下來,經過運行相應的腳本安裝 MySQL
/usr/local/mysql/bin/mysql_secure_installation
最後,咱們須要 NDB 自動啓動
echo "ndbd" > /etc/init.d/ndbd chmod 755 /etc/init.d/ndbd
好了,咱們已經完成了第一個數據節點的配置,按照相同的方法和步驟去完成第二個數據節點的配置
4.驗證與測試
若是一切正常,在管理節點終端中執行命令 ndb_mgm ,而後鍵入 show. 這個時候應該看到的數據庫節點已填充的提示
root@MYSQL-MGM1:~# ndb_mgm ndb_mgm> show Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=3 @192.168.67.12 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *) id=4 @192.168.67.13 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0) [ndb_mgmd(MGM)] 2 node(s) id=1 @192.168.67.10 (mysql-5.6.14 ndb-7.3.3) id=2 @192.168.67.11 (mysql-5.6.14 ndb-7.3.3) [mysqld(API)] 2 node(s) id=5 @192.168.67.12 (mysql-5.6.14 ndb-7.3.3) id=6 @192.168.67.13 (mysql-5.6.14 ndb-7.3.3)
若是你可以看到相似的輸出,去嘗試一些基本的SQL命令。登陸到SQL數據庫,並建立一個新的數據庫,表,以驗證數據同步。請注意,在建立數據庫時,需使用 NDBCLUSTER 存儲引擎。若是使用 InnoDB ,數據將不會在集羣節點之間被複制。在使用 NDBCLUSTER 引擎時,會有一些問題,請參閱 MySQL 官方網站
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-unsupported.html
http://dev.mysql.com/doc/refman/5.5/en/mysql-cluster-limitations-syntax.html
mysql -u root -p mysql> CREATE DATABASE mysqlclustertest; mysql> USE mysqlclustertest; mysql> CREATE TABLE testtable (i INT) ENGINE=NDBCLUSTER; mysql> INSERT INTO testtable () VALUES (1); mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | +------+ 1 row in set (0.01 sec)
鏈接到第二個數據庫節點,咱們看看,獲得了相同的輸出
mysql -u root -p mysql> USE mysqlclustertest; mysql> SELECT * FROM testtable; +------+ | i | +------+ | 1 | +------+ 1 row in set (0.01 sec)
應該看到相同的輸出。如今,若是你插入一個新條目表,它會被複制回的第一個節點
5. 負載均衡
在這篇文章的最後部分是爲 MySQL 集羣安裝負載均衡服務器,負載均衡可使用 mysql-proxy,很容易安裝,固然你也可使用其餘服務
root@mysql-proxy:~# apt-get install mysql-proxy root@mysql-proxy:~# mkdir /etc/mysql-proxy root@mysql-proxy:~# cd /etc/mysql-proxy root@mysql-proxy:/etc/mysql-proxy# nano mysql-proxy.conf
在 mysql-proxy.conf 文件中加入下面幾行
[mysql-proxy] daemon = true proxy-address = 192.168.67.14:3306 proxy-skip-profiling = true keepalive = true event-threads = 50 pid-file = /var/run/mysql-proxy.pid log-file = /var/log/mysql-proxy.log log-level = debug proxy-backend-addresses = 192.168.67.12:3306,192.168.67.13:3306 proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/balance.lua
對於自動啓動的附加選項建立如下文件 /etc/default/mysql-proxy
ENABLED="true" OPTIONS="--defaults-file=/etc/mysql-proxy.conf --plugins=proxy"
而後,你能夠經過調用如下命令啓動 mysql-proxy
/etc/init.d/mysql-proxy start/stop/status
完成後,你應該可以鏈接到 MySQL 服務器使用代理地址。記得這個工做,你須要建立一個新的用戶具備特定的子網鏈接到它。還須要在 my.cnf 文件爲 MySQL 服務器添加捆綁地址
SQL用戶不用複製,因此相同的用戶有單獨被添加到全部的數據庫節點。在數據節點登陸到 SQL shell,執行如下命令
CREATE USER 'newuser'@'192.168.67.%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; SELECT * FROM mysql.user;
更改 newuser,IP和密碼,根據你的配置需求。 %做爲通配符,從而對整個子網的IP地址的行爲,它容許遠程鏈接到這個數據庫節點。請記得在這個集羣中的節點中添加相同的用戶具備相同配置的其餘全部數據庫
撰寫本文參考了這篇文章 MySQL NDB Cluster setup on Ubuntu 12.04 LTS, 作了一些改動
若是有哪裏有誤,歡迎指正,這篇文章的英文版本在個人我的網站 xuri.me 上,連接是 http://xuri.me/2013/11/20/install-mysql-cluster-on-ubuntu-12-04-lts.html 歡迎你們訪問