MySQL集羣搭建步驟詳解

1 概述


MySQL Cluster 是MySQL 適合於分佈式計算環境的高實用、可拓展、高性能、高冗餘版本,其研發設計的初衷就是要滿足許多行業裏的最嚴酷應用要求,這些應用中經常要求數據庫運行的可靠性要達到99.999%。MySQL Cluster允許在無共享的系統中部署“內存中”數據庫集羣,通過無共享體系結構,系統能夠使用廉價的硬件,而且對軟硬件無特殊要求。此外,由於每個組件有自己的內存和磁盤,不存在單點故障。

實際上,MySQL集羣是把一個叫做NDB的內存集羣存儲引擎集成與標準的MySQL服務器集成。它包含一組計算機,每個都跑一個或者多個進程,這可能包括一個MySQL服務器,一個數據節點,一個管理服務器和一個專有的一個數據訪問程序。

MySQL Cluster能夠使用多種故障切換和負載平衡選項配置NDB存儲引擎,但在Cluster 級別上的存儲引擎上做這個最簡單。以下爲MySQL集羣結構關係圖,

wKioL1Mm1C3zRCKkAAFxH8xubRs087.jpg

 

MySQL從結構看,由3類節點(計算機或進程)組成,分別是:

管理節點:用於給整個集羣其他節點提供配置、管理、仲裁等功能。理論上通過一臺服務器提供服務就可以了。

數據節點:MySQL Cluster的核心,存儲數據、日誌,提供數據的各種管理服務。2個以上 時就能實現集羣的高可用保證,DB節點增加時,集羣的處理速度會變慢。

SQL節點(API):用於訪問MySQL Cluster數據,提供對外應用服務。增加 API 節點會提高整個集羣的併發訪問速度和整體的吞吐量,該節點 可以部署在Web應用服務器上,也可以部署在專用的服務器上,也開以和DB部署在 同一臺服務器上。

 

2 NDB引擎


MySQL Cluster 使用了一個專用的基於內存的存儲引擎——NDB引擎,這樣做的好處是速度快, 沒有磁盤I/O的瓶頸,但是由於是基於內存的,所以數據庫的規模受系統總內存的限制, 如果運行NDB的MySQL服務器一定要內存夠大,比如4G, 8G, 甚至16G。NDB引擎是分佈式的,它可以配置在多臺服務器上來實現數據的可靠性和擴展性,理論上 通過配置2臺NDB的存儲節點就能實現整個數據庫集羣的冗餘性和解決單點故障問題。


2.1 缺陷


  • 基於內存,數據庫的規模受集羣總內存的大小限制

    基於內存,斷電後數據可能會有數據丟失,這點還需要通過測試驗證。

    多個節點通過網絡實現通訊和數據同步、查詢等操作,因此整體性受網絡速度影響,

    因此速度也比較慢

     

    2.2 優點


    • 多個節點之間可以分佈在不同的地理位置,因此也是一個實現分佈式數據庫的方案。

      擴展性很好,增加節點即可實現數據庫集羣的擴展。

      冗餘性很好,多個節點上都有完整的數據庫數據,因此任何一個節點宕機都不會造成服務中斷。

      實現高可用性的成本比較低,不象傳統的高可用方案一樣需要共享的存儲設備和專用的軟件才能實現,NDB 只要有足夠的內存就能實現。


二、集羣搭建

將搭建一個最簡化的MySQL Cluster系統,配置方法中的所有命令都是以root賬戶運行。這個MySQL Cluster包含一個管理結點、兩個數據結點、兩個SQL結點,這五個結點會分別安裝在五個虛擬機上,虛擬機的名稱和IP如下所示:

管理結點

mysql-mgm

192.168.124.141

數據結點 1

mysql-ndbd-1

192.168.124.142

數據結點 2

mysql-ndbd-2

192.168.124.143

SQL 結點1

mysql-sql-1

192.168.124.144

SQL 結點2

mysql-sql-2

192.168.124.145

  

    

一、公共配置

請在三個虛擬機上分別配置此處的配置項。


1. 安裝虛擬機

虛擬機操作系統安裝CentOS 6.4的x86_64版本,使用NAT網絡,並且還要安裝vmware-tools,具體安裝方法此處不詳述。


2. 拷貝mysql cluster

下載以下版本的MySQL-Cluster:

http://cdn.mysql.com/Downloads/MySQL-Cluster-7.3/mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz


下載得到的壓縮包拷貝至虛擬機的/root/Downloads目錄,然後在shell中運行以下命令:

cd /root/Downloads
tar -xvzf mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64.tar.gz
mv mysql-cluster-gpl-7.3.4-linux-glibc2.5-x86_64 /usr/local/mysql


3. 關閉安全策略

關閉iptables防火牆(或者打開防火牆的1186、3306端口),在Shell中運行以下命令:

chkconfig --level 35 iptables off


關閉SELinux,在Shell中運行以下命令:

gedit /etc/selinux/config


將config文件中的SELINUX項改爲disabled,修改後的config文件的內容如下:


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


最後重啓系統


二、配置管理結點(192.168.124.141)

1. 配置config.ini配置文件

在shell中運行以下命令:

mkdir /var/lib/mysql-cluster

cd /var/lib/mysql-cluster

gedit config.ini



配置文件config.ini內容如下:

[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M

[ndb_mgmd]
NodeId=1
hostname=192.168.124.141
datadir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
hostname=192.168.124.142
datadir=/usr/local/mysql/data

[ndbd]
NodeId=3
hostname=192.168.124.143
datadir=/usr/local/mysql/data


[mysqld]
NodeId=4
hostname=192.168.124.144


[mysqld]
NodeId=5
hostname=192.168.124.145


2. 安裝管理結點

安裝管理節點,不需要mysqld二進制文件,只需要MySQL Cluster服務端程序(ndb_mgmd)和監聽客戶端程序(ndb_mgm)。在shell中運行以下命令:

cp /usr/local/mysql/bin/ndb_mgm* /usr/local/bin
cd /usr/local/bin
chmod +x ndb_mgm*


三、配置數據結點(192.168.124.142、192.168.124.143)

1. 添加mysql組和用戶

在shell中運行以下命令:

groupadd mysql
useradd -g mysql mysql


2. 配置my.cnf配置文件

在shell中運行以下命令:

gedit /etc/my.cnf


配置文件my.cnf的內容如下:

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]
ndb-connectstring=192.168.124.141


3. 創建系統數據庫

在shell中運行以下命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data


4. 設置數據目錄

在shell中運行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .


5. 配置MySQL服務

在shell中運行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server


四、配置SQL結點(192.168.124.144、192.168.124.145)

1. 添加mysql組和用戶

在shell中運行以下命令:

groupadd mysql
useradd -g mysql mysql


2. 配置my.cnf配置文件

在shell中運行以下命令:

gedit /etc/my.cnf


配置文件my.cnf的內容如下:

[client]
socket=/usr/local/mysql/sock/mysql.sock

[mysqld]
ndbcluster
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/sock/mysql.sock
ndb-connectstring=192.168.124.141

[mysql_cluster]
ndb-connectstring=192.168.124.141


3. 創建系統數據庫

在shell中運行以下命令:

cd /usr/local/mysql
mkdir sock
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data


4. 設置數據目錄

在shell中運行以下命令:

chown -R root .
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /usr/local/mysql/sock
chgrp -R mysql .


5. 配置MySQL服務

在shell中運行以下命令:

cp support-files/mysql.server /etc/rc.d/init.d/
chmod +x /etc/rc.d/init.d/mysql.server
chkconfig --add mysql.server


五、Cluster環境啓動

注意啓動順序:首先是管理節點,然後是數據節點,最後是SQL節點。


1. 啓動管理結點

在shell中運行以下命令:

ndb_mgmd -f /var/lib/mysql-cluster/config.ini


還可以使用ndb_mgm來監聽客戶端,如下:

ndb_mgm


2. 啓動數據結點

首次啓動,則需要添加--initial參數,以便進行NDB節點的初始化工作。在以後的啓動過程中,則是不能添加該參數的,否則ndbd程序會清除在之前建立的所有用於恢復的數據文件和日誌文件。

/usr/local/mysql/bin/ndbd --initial


如果不是首次啓動,則執行下面的命令。

/usr/local/mysql/bin/ndbd


3. 啓動SQL結點

若MySQL服務沒有運行,則在shell中運行以下命令:

/usr/local/mysql/bin/mysqld_safe --user=mysql &


4. 啓動測試

查看管理節點,啓動成功:


六、集羣測試

1. 測試一

現在我們在其中一個SQL結點上進行相關數據庫的創建,然後到另外一個SQL結點上看看數據是否同步。


在SQL結點1(192.168.124.144)上執行:

shell> /usr/local/mysql/bin/mysql -u root -p
mysql>show databases;
mysql>create database aa;
mysql>use aa;
mysql>CREATE TABLE ctest2 (i INT) ENGINE=NDB; //這裏必須指定數據庫表的引擎爲NDB,否則同步失敗
mysql> INSERT INTO ctest2 () VALUES (1);
mysql> SELECT * FROM ctest2;


然後在SQL結點2上看數據是否同步過來了


經過測試,在非master上創建數據,可以同步到master上

查看錶的引擎是不是NDB,>show create table 表名;


2. 測試二

關閉一個數據節點 ,在另外一個節點寫輸入,開啓關閉的節點,看數據是否同步過來。


首先把數據結點1重啓,然後在結點2上添加數據

在SQL結點2(192.168.124.145)上操作如下:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE ctest3 (i INT) ENGINE=NDB;
mysql> use aa;
mysql> INSERT INTO ctest2 () VALUES (3333);
mysql> SELECT * FROM ctest2;


等數據結點1啓動完畢,啓動數據結點1的服務

#/usr/local/mysql/bin/ndbd --initial#service mysqld start



然後登錄進去查看數據

# /usr/local/mysql/bin/mysql -u root –p



可以看到數據已經同步過來了,說明數據可以雙向同步了。


七、關閉集羣

1. 關閉管理節點和數據節點,只需要在管理節點(ClusterMgm--134)裏執行:

shell> /usr/local/mysql/bin/ndb_mgm -e shutdown


顯示

Connected to Management Server at: localhost:1186
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.


2. 然後關閉Sql節點(135,136),分別在2個節點裏運行:

shell> /etc/init.d/mysql.server stop
Shutting down MySQL... SUCCESS!


注意:要再次啓動集羣,就按照第五部分的啓動步驟即可,不過這次啓動數據節點的時候就不要加”-initial”參數了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章