Ubuntu 12.04 LTS 構建高可用分佈式 MySQL 集羣

本文的英文版本連接是 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 臺主機,系統架構以下圖所示 數據庫

20131120202749687

112550449.png

虛擬機羣平臺  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 歡迎你們訪問

相關文章
相關標籤/搜索