1. 程式人生 > >Mysql Cluster 7.6.4 環境搭建

Mysql Cluster 7.6.4 環境搭建

數據庫 MySQL

MySQL Cluster 介紹

???? MySQL Cluster是一個基於NDB Cluster存儲引擎的完整的分布式數據庫系統。不僅僅具有高可用性,而且可以自動切分數據,冗余數據等高級功能。和Oracle Real Cluster Application不太一樣的是,MySQL Cluster 是一個Share Nothing的架構,各個MySQL Server之間並不共享任何數據,高度可擴展以及高度可用方面的突出表現是其最大的特色。

??? 簡單的說,MySQL Cluster 實際上是在無共享存儲設備的情況下實現的一種完全分布式數據庫系統,其主要通過 NDB Cluster(簡稱 NDB)存儲引擎來實現。MySQL Cluster 剛剛誕生的時候可以說是一個可以對數據進行持久化的內存數據庫,所有數據和索引都必須裝載在內存中才能夠正常運行,但是現在的MySQL Cluster 版本分為內存表和磁盤表,內存表,所有數據加載到內存中運行,磁盤表僅僅將主鍵,索引字段裝載在內存中,其他字段存放在磁上。

一個 MySQL Cluster 的環境主要由以下三部分組成:

(1)負責管理各個節點的 Manage 節點主機;管理節點負責整個Cluster集群中各個節點的管理工作,包括集群的配置,啟動關閉各節點,對各個節點進行常規維護,以及實施數據的備份恢復等。管理節點會獲取整個Cluster環境中各節點的狀態和錯誤信息,並且將各 Cluster 集群中各個節點的信息反饋給整個集群中其他的所有節點。由於管理節點上保存了整個Cluster 環境的配置,同時擔任了集群中各節點的基本溝通工作,所以他必須是最先被啟動的節點。

(2)Storage 層的 NDB 數據節點;也就是上面說的NDB Cluster。最初的NDB是一個內存式存儲引擎,當然也會將數據持久化到存儲設備上。但是最新的NDB Cluster存儲引擎已經改進了這一點,可以選擇數據是全部加載到內存中還是僅僅加載索引數據。NDB 節點主要是實現底層數據存儲功能,來保存Cluster 的數據。每一個Cluster節點保存完整數據的一個fragment,也就是一個數據分片(或者一份完整的數據,視節點數目和配置而定),所以只要配置得當,MySQL Cluster在存儲層不會出現單點的問題。一般來說,NDB 節點被組織成一個一個的NDB Group,一個 NDB Group實際上就是一組存有完全相同的物理數據的NDB節點群。

上面提到了NDB 各個節點對數據的組織,可能每個節點都存有全部的數據也可能只保存一部分數據,主要是受節點數目和參數來控制的。首先在 MySQL Cluster主配置文件(在管理節點上面,一般為 config.ini)中,有一個非常重要的參數叫NoOfReplicas,這個參數指定了每一份數據被冗余存儲在不同節點上面的份數,該參數一般至少應該被設置成2,也只需要設置成2就可以了。因為正常來說,兩個互為冗余的節點同時出現故障的概率還是非常小的,當然如果機器和內存足夠多的話,也可以繼續增大來更進一步減小出現故障的概率。此外,一個節點上面是保存所有的數據還是一部分數據還受到存儲節點數目的限制。NDB 存儲引擎首先保證NoOfReplicas參數配置的要求來使用存儲節點,對數據進行冗余,然後再根據節點數目將數據分段來繼續使用多余的NDB節點。分段的數目為節點總數除以NoOfReplicas 所得。

(3)SQL 層的 SQL 服務器節點(後面簡稱為 SQL 節點);也就是我們常說的MySQL Server。主要負責實現一個數據庫在存儲層之上的所有事情,比如連接管理,Query 優化和響應 ,Cache 管理等等,只有存儲層的工作交給了NDB 數據節點去處理了。也就是說,在純粹的MySQL Cluster 環境中的SQL 節點,可以被認為是一個不需要提供任何存儲引擎的MySQL服務器,因為他的存儲引擎有Cluster 環境中的NDB 節點來擔任。所以,SQL 層各MySQL服務器的啟動與普通的MySQL Server 啟動也有一定的區別,必須要添加ndbcluster參數選項才行。我們可以添加在my.cnf配置文件中,也可以通過啟動命令行來指定。

MySQL Cluster 環境搭建

搭建 MySQL Cluster首先需要至少一個管理節點主機來實現管理功能,一個SQL節點主機來實現MySQL server功能和兩個ndb節點主機實現NDB Cluster的功能。我在這裏測試使用雙SQL節點來搭建測試環境,具體信息如下:

1、服務器準備

192.168.1.2???? 管理節點

192.168.1.3??? mysql節點,ndb節點

192.168.1.4??? mysql節點,ndb節點

我這兒把mysq節點l和ndb數據節點放在一臺機器上面

2、軟件安裝

測試環境(3臺服務器均一樣,不是必須的,但ndb節點最好一樣,不一樣的話,內存要配一樣大,服務器均已關閉iptables,生產環境請自行開放相關端口)

安裝 MySQL 節點:

sql節點1: 192.168.1.3
sql節點2: 192.168.1.4

下載安裝包:mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz ,我這裏使用二進制編譯好了的,也可以自己下載源碼包編譯。這裏操作一臺SQL節點服務器,另外一臺SQL節點服務器也是相同的,都執行如下安裝步驟。

wget *.*.*/mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz

[[email protected] src]# groupadd mysql
[[email protected] src]# useradd -r -g mysql mysql
[[email protected] src]# tar –zvxf mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64.tar.gz

[[email protected] src]# mv mysql-cluster-gpl-7.6.4-linux-glibc2.12-x86_64? /usr/local/mysql
[[email protected] src]# cd /usr/local/mysql
[[email protected] mysql]# chown -R mysql .
[[email protected] mysql]# mkdir /data/
[[email protected] mysql]# chown -R mysql.mysql /data
[[email protected] mysql]# /usr/local/mysql/bin/mysqld –initialize? --user=mysql --datadir=/data/ --basedir=/usr/local/mysql

[[email protected] mysql]# cp support-files/mysql.server   /etc/init.d/mysql
[[email protected]]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /root/.bash_profile      #添加環境變量
[[email protected] mysql]# source /root/.bash_profile 
修改/etc/my.cnf配置文件,追加如下配置

[mysqld]
datadir=/data/
basedir= /usr/local/mysql
ndbcluster??????????????????????????????????????? # 運行NDB存儲引擎
ndb-connectstring=192.168.1.2?????? # 管理節點
[MYSQL_CLUSTER]
ndb-connectstring=192.168.1.2????? #管理節點

NDB節點安裝(數據節點)

因為我的數據節點和SQL節點在一起,所以就不需要安裝了。如果ndb數據節點和SQL節點是分開的,那安裝方法和SQL節點安裝方法一樣。也是需要配置my.cnf的。

安裝管理節點

管理節點所需要的安裝更簡單,實際上只需要 ndb_mgm 和ndb_mgmd兩個程序即可,這兩個可執行程序可以在上面的MySQL節點的MySQL安裝目錄中的bin目錄下面找到。將這兩個程序copy到管理節點上面合適的位置(自行考慮,我一般會放在/usr/local/mysql/bin下面)並且添加環境變量就可以了。(另外也可以將ndb_config 、ndb_perror? 復制過來,ndb_config -q MaxNoOfAttributes? #查看變量修改是否生效;ndb_perror --ndb 2308? 2308為錯誤代碼)

1.在/usr/local/創建目錄mysql-cluster,該目錄會存放相關日誌文件,以及pid號。並在目錄中創建配置文件config.ini

[[email protected] ~]# mkdir /usr/local/mysql-cluster
[[email protected] ~]# cd /usr/local/mysql-cluster/
[[email protected] mysql-cluster]# touch config.ini
2.根據我們上面提供的環境,config.ini文件配置如下

[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M


[ndbd default]
NoOfReplicas=2?????????????????????????? #每個數據節點的鏡像數量,通常最低設置為2,否則就沒有意義了
DataMemory=3072M??????????????????? #每個數據節點中給數據分配的內存,
IndexMemory=1024M?????????????????? #每個數據節點中給索引分配的內存?? ,7.6版本中的已經改名了


MaxNoOfOrderedIndexes=4000
MaxNoOfUniqueHashIndexes=4000
MaxNoOfAttributes=4000

MaxNoOfConcurrentOperations=1500000
MaxNoOfLocalOperations=2000000
MaxNoOfConcurrentTransactions=16000
TransactionDeadLockDetectionTimeOut=50000??????????????? #這是毫秒單位,相當於50秒

#ODirect=1

MaxNoOfTables=1024

#UndoDataBuffer=64M
#RedoBuffer=64M

#FragmentLogFileSize=512M
NoOfFragmentLogFiles=300


[ndb_mgmd]
NodeId=1
HostName=192.168.1.2??????????????? #管理節點ip
DataDir=/var/lib/mysql-cluster?????? #管理節點數據目錄,存放相關日誌,以及pid文件


[ndbd]
NodeId=2
HostName=192.168.1.3???????? #數據節點ip地址
DataDir=/data/??????????????????????? #NDB點數據存放目錄

[ndbd]
NodeId=3
HostName=192.168.1.4????????? #數據節點ip地址
DataDir=/data???????????????????????? #NDB點數據存放目錄



[mysqld]
NodeId=4
HostName=192.168.1.3????????? #SQL節點ip地址

[mysqld]
NodeId=5
HostName=192.168.1.4??????? #SQL節點ip地址

[mysqld]


在上面的配置文件中,包括很多的組,組名用"[]"括起來,這裏我們最關心的是3類節點組的配置,分別定義如下

NDB_MGMD] 表示管理節點的配置,只能有一個。

[NDBD DEFAULT] 表示每個數據節點的默認配置,在每個節點的[NDBD]中不用再寫這些選項,只能有一個。

[NDBD] 表示每個數據節點的配置,可以有多個。

[MYSQLD] 表示SQL節點的配置,可以有多個,分別寫上不同的SQL節點的ip地址;也可以不用寫,只保留一個空節點,表示任意一個ip地址都可以進行訪問。此節點的個數表明了可以用來連接數據節點的SQL節點總數。

每個節點都有一個獨立的id號,可以填寫,比如nodeid=2,(老版本使用id,新版本已經不使用id標識了)也可以不用填寫,系統會按照配置文件的填寫順序自動分配。

開始使用Cluster

上面我們都已經配置完畢了,下面說明啟動,關閉和使用方法

啟動順序為:管理節點->數據節點->SQL節點(很重要)

(1)啟動管理節點:

[[email protected] ~]# ndb_mgmd -f /usr/local/mysql-cluster/config.ini  --initial   #第一次啟動加—initial參數,以後修改了config.ini 加—reload
MySQL Cluster Management Server mysql-5.7.20 ndb-7.6.4
[[email protected] ~]# netstat -ntlp | grep 1186
tcp        0      0 0.0.0.0:1186                0.0.0.0:*                   LISTEN      1329/ndb_mgmd     
(2)啟動NDB(數據節點)
[[email protected] ~]# ndbd --initial
2018-03-30 16:23:46 [ndbd] INFO     -- Angel connected to ‘192.168.1.2:1186‘
2018-03-30 16:23:46 [ndbd] INFO     -- Angel allocated nodeid: 3

[[email protected] /]#? ps -ef | grep ndbd
root?????? 2913????? 1? 0 16:23 ???????? 00:00:00 ndbd
root?????? 2914?? 2913 27 16:23 ???????? 00:00:43 ndbd

ndbd進程是使用NDB存儲引擎處理表中數據的進程。通過該進程,存儲節點能夠實現分布式事務管理,節點恢復,在線備份相關任務。

(3)啟動SQL節點(啟動mysql服務)

[[email protected] /]# service mysql start
? SUCCESS! MySQL running (2588)

(4)節點全部啟動成功後,在管理節點使用ndb_mgm工具的show命令查看集群狀態:

[[email protected]]# /ndb_mgm
-- NDB Cluster -- Management Client --

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]???? 2 node(s)
id=2??? @192.168.1.3? (mysql-5.7.20 ndb-7.6.4, Nodegroup: 0, *)
id=3??? @192.168.1.4? (mysql-5.7.20 ndb-7.6.4, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1??? @192.168.1.2? (mysql-5.7.20 ndb-7.6.4)

[mysqld(API)]?? 2 node(s)
id=4??? @192.168.1.3? (mysql-5.7.20 ndb-7.6.4)
id=5??? @192.168.1.4 (mysql-5.7.20 ndb-7.6.4)

ndb_mgm工具是ndb_mgmd(MySQL Cluster Server)的客戶端管理工具,通過該工具可以方便的檢查Cluster的狀態,啟動備份,關閉等功能。更詳細的方法可以通過ndb_mgm --help命令來進行查看。

到這裏MySQL Cluster就已經搭建完成了。下一篇介紹動態加節點。

Mysql Cluster 7.6.4 環境搭建