Linux下搭建MySQL集群
一、MySQL集群簡介
1、什麼是MySQL集群
MySQL集群是一個無共享的(shared-nothing)、分布式節點架構的存儲方案,其目的是提供容錯性和高性能。
數據更新使用讀已提交隔離級別(read-committedisolation)來保證所有節點數據的一致性,使用兩階段提交機製(two-phasedcommit)保證所有節點都有相同的數據(如果任何一個寫操作失敗,則更新失敗)。
無共享的對等節點使得某台服務器上的更新操作在其他服務器上立即可見。傳播更新使用一種複雜的通信機製,這一機製專用來提供跨網絡的高吞吐量。
通過多個MySQL服務器分配負載,從而最大程序地達到高性能,通過在不同位置存儲數據保證高可用性和冗餘。
2、名稱概念
MySQL集群有如下三層:
應用程序層:負責與MySQL服務器通信的各種應用程序。
Mysql服務器層:處理SQL命令,並與NDB存儲引擎通信和Mysql服務器。
NDB集群組件層:NDB集群組件有時也稱數據節點,負責處理查詢,然後將結果返回給mysql服務器。
其中MySQL數據庫集群主要包括如下三部分:
1) SQL節點(SQL node - 下圖對應為 mysqld):分布式數據庫。包括自身數據和查詢中心結點數據
2) 數據節點(Data node - ndbd):集群共享數據(內存中)
3) 管理服務器(Management Server - ndb_mgmd):管理集群 SQL node,Data node
二、環境說明
2、軟件環境
MySQL集群版本:
mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz
注:依據係統,在MySQL官網自行下載。
三、搭建集群(Linux環境)
1、安裝集群版本
a、準備工作
不管是Management Server,還是Data node、SQL node,都需要先安裝MySQL集群版本,然後根據不用的配置來決定當前服務器有哪幾個角色。
安裝之前準備好mysql用戶和mysql用戶組,
相關命令:
groupadd mysql
useradd mysql -g mysql
為了方便測試,確定相關機器的防火牆已關閉(或者設置防火牆這幾台機器之間的網絡連接是暢通無阻的),
相關命令:
chkconfig iptables off
service iptables stop
b、安裝集群版本
1.上傳安裝包至/usr/local目錄下,並解壓
tar -zxvf mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64.tar.gz
2.重命名文件夾
mv mysql-cluster-gpl-7.3.6-linux-glibc2.5-x86_64 mysql
3.授權
chown -R mysql:mysql mysql
4.切換mysql用戶
su - mysql
5.安裝MySQL
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
注:所有服務器上都需要執行上述操作來安裝MySQL集群版本。
2、集群配置
a、管理節點
1.root用戶下,創建目錄和配置文件
mkdir /var/lib/mysql-cluster
cd /var/lib/mysql-cluster
vim config.ini
config.ini配置信息如下:
[NDBD DEFAULT]
NoOfReplicas=2
[NDB_MGMD]
#設置管理節點服務器
nodeid=1
HostName=192.168.3.115
DataDir=/var/lib/mysql-cluster
[NDBD]
id=2
HostName=192.168.3.116
DataDir=/usr/local/mysql/data
[NDBD]
id=3
HostName=192.168.3.117
DataDir=/usr/local/mysql/data
[MYSQLD]
id=4
HostName=192.168.3.116
[MYSQLD]
id=5
HostName=192.168.3.117
#必須有空的mysqld節點,不然數據節點斷開後啟動有報錯
[MYSQLD]
id=6
[mysqld]
id=7
2.授權
chown -R mysql:mysql /var/lib/mysql-cluster
3.切換用戶
su - mysql
4.啟動管理服務
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
注:命令行中的ndb_mgmd是mysql cluster的管理服務器,後麵的-f表示後麵的參數是啟動的參數配置文件。
如果在啟動後過了幾天又添加了一個數據節點,這時修改了配置文件啟動時就必須加上--initial參數,不然添加的節點不會作用在mysql cluster中。
b、數據節點
1.編輯/etc/my.cnf文件
# vim /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
ndbcluster
ndb-connectstring=192.168.3.115
[mysql_cluster]
ndb-connectstring=192.168.3.115
2.切換用戶
su - mysql
3.啟動數據節點服務
/usr/local/mysql/bin/ndbd --initial
注:第一次啟動需要加參數:–initial,以後就不用加了,直接運行: /usr/local/mysql/bin/ndbd
c、SQL節點
1.編輯/etc/my.cnf文件(數據節點和SQL節點在統一服務器時可省略)
# vim /etc/my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
user=mysql
ndbcluster
ndb-connectstring=192.168.3.115
[mysql_cluster]
ndb-connectstring=192.168.3.115
2.複製mysqld到係統服務裏麵去
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
3.切換用戶
su - mysql
4.啟動數據節點服務
service mysqld start
/usr/local/mysql/bin/mysqladmin -u root password 'password'
d、完成效果
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]2 node(s)
id=2@192.168.3.116 (mysql-5.6.19 ndb-7.3.6, Nodegroup: 0, *)
id=3@192.168.3.117 (mysql-5.6.19 ndb-7.3.6, Nodegroup: 0)
[ndb_mgmd(MGM)]1 node(s)
id=1@192.168.3.115 (mysql-5.6.19 ndb-7.3.6)
[mysqld(API)]4 node(s)
id=4@192.168.3.116 (mysql-5.6.19 ndb-7.3.6)
id=5@192.168.3.117 (mysql-5.6.19 ndb-7.3.6)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)
四、常用命令與問題整理
1) ndb_mgmd管理命令:/usr/local/mysql/bin/ndb_mgm 執行之後就是管理控製台了,裏麵可以繼續輸入命令。(具體命令可以使用help查看)
2) 停止集群服務器的命令:/usr/local/mysql/bin/ndb_mgm -e shutdown
如果集群配置有更新了:rm /usr/local/mysql/mysql-cluster/ndb_1_config.bin.1
3) 停止SQL節點的命令:/usr/local/mysql/bin/mysqladmin -uroot shutdown
4)使用需要注意如下兩點:
a.表必須用ENGINE=NDB或ENGINE=NDBCLUSTER選項創建,或用ALTER TABLE選項更改,以使用NDB Cluster存儲引擎在 Cluster內複製它們。如果使用mysqldump的輸出從已有數據庫導入表,可在文本編輯器中打開SQL腳本,並將該選項添加到任何表創建語句,或 用這類選項之一替換任何已有的ENGINE(或TYPE)選項。
b.另外還請記住,每個NDB表必須有一個主鍵。如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎將自動生成隱含的主鍵。(注釋:該隱含 鍵也將占用空間,就像任何其他的表索引一樣。由於沒有足夠的內存來容納這些自動創建的鍵,出現問題並不罕見)。
其他操作上沒有什麼區別!
最後更新:2017-08-22 11:03:07