1. 程式人生 > 其它 >手把手教你用Mysql-Cluster-7.5搭建資料庫叢集

手把手教你用Mysql-Cluster-7.5搭建資料庫叢集

當你的業務到達一定的當量,肯定需要一定數量的資料庫來負載均衡你的資料庫請求,我在之前的部落格中已經說明了,如何實現負載均衡,但是還有一個問題就是資料同步,因為負載均衡的前提就是,各個伺服器的資料庫是資料同步的。在業務量不大的時候,我們會使用主從複製的方法實現伺服器資料同步,一主多從或者是雙主等,但是雖然進行了讀寫分離,但是對於讀的方法限制還是比較大,所以解決資料同步的問題就是資料庫叢集的意義。我這裡使用mysql官網提供的mysql-cluster實現叢集。(到文章釋出前的最新版本的安裝教程,把網上踩的坑都踩過了一遍;)

mysql cluster中的幾個概念解釋

為了簡單,我後面簡稱mysql-cluster為mc。

1、mc已經包含了mysql,我下載的最新的mc7.5,官方說明包含的是mysql版本是5.7。所以不需要使用別的msyql的安裝包安裝資料庫。同時注意mysql5.7的版本在安裝的命令和配置上面和之前的版本有很大的不同,所以網上有很多mc7.5之前的版本,所包含的mysql版本不同,所以安裝方法不同。

2、管理節點,mc管理節點負責管理、配置、監控整個叢集。

3、資料節點,使用記憶體存放資料,儲存進資料節點的資料都會自動複製並存儲到其他資料節點。

4、mysql節點,也叫資料庫節點,和我們平時使用的mysql相同,作為資料庫使用。被資料節點訪問。

架構圖及說明

我實驗中的配置就是如圖所示,因為虛擬機器佔用記憶體較大,只使用了3臺伺服器,在實際情況中最好將資料節點和mysql節點分開。在實際中負載均衡服務還需要做備份,因為萬一負載均衡伺服器宕機將會導致所有資料節點都無法訪問,所以需要對負載均衡伺服器備份,有條件的話,分開管理節點和負載均衡器。實驗只實現整個資料庫叢集,負載均衡請參考之前的部落格配置即可。

129的負載均衡可以參考 HAProxy實現mysql負載均衡 也可以使用的別的負載均衡方案。

下載mysql cluster

首先下載mysql cluster,推薦使用下面的映象,下載速度比官網快一些

http://mirrors.sohu.com/mysql/MySQL-Cluster-7.5/

我下載的版本是mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz

注意看清是64位版本的,別下載錯了

安裝mysql cluster之前

安裝之前,如果之前安裝過mysql,那麼需要刪除相應的各種mysql檔案,刪除之前請停止mysql服務。並且不要忘記刪除my.cnf這些配置檔案。確保刪除乾淨。不然可能會和後面的安裝有衝突。如果是實驗,關閉防火牆,實際中,防火牆開啟對應埠,{注意實際中需要使用的埠不只有3306埠,還有同步需要使用的1186埠!!!}。保證伺服器之前能互相訪問,能ping通。保證固定的ip地址。保證沒有別的程式佔用需要使用的埠。如3306等。這些都確認完畢後再進行安裝。需要linux基礎的命令熟練,需要熟練安裝mysql基本版本等操作,因為後序的一些操作我會簡單描述,不做過多的說明了。

安裝配置管理節點

將下載後的包上傳至伺服器/usr/local下

解壓

# tar xvf mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz

將需要的檔案取出

# cd mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64

# cp bin/ndb_mgm* /usr/local/bin

# cd /usr/local/bin

# chmod +x ndb_mgm*

新建配置檔案並且初始化管理節點

# mkdir /var/lib/mysql-cluster

# mkdir /usr/local/mysql

# vi /var/lib/mysql-cluster/config.ini

下面是配置檔案,根據自己的需求修改,首先給出官網的預設配置檔案,然後給出我的配置檔案,根據我修改的修改即可,別的均可不動。

+ View code

+ View code

使用配置檔案初始化管理節點

# /usr/local/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial

出現MySQL Cluster Management Server mysql-5.7.16 ndb-7.5.4

然後就能使用ndbd進去管理了(如果ndbd命令不行,就使用在/usr/local/bin目錄下使用ndb_mgm命令)

# ndbd

ndb_mgm>show(使用show命令檢視管理情況,當資料節點配置完畢之後,我們再用這個命令檢視和管理)

到此為止管理節點配置完畢,接下去配置資料和sql節點

安裝配置資料和mysql節點

以下的所有操作需要在所有的叢集節點都要進行相同的操作

新增使用者組mysql和使用者msyql

# groupadd mysql

# useradd -g mysql -s /bin/false mysql

新建資料夾並賦予許可權

# mkdir /var/lib/mysql-cluster

# chown root:mysql /var/lib/mysql-cluster

將下載後的包上傳至伺服器/usr/local下

解壓

# tar xvf mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64.tar.gz

建立連結方便訪問

# ln -s /usr/local/mysql-cluster-gpl-7.5.4-linux-glibc2.5-x86_64 /usr/local/mysql

初始化資料庫(這裡要注意,如果你安裝的版本和我的不同,資料庫初始化的命令使不同的,很多之前的版本會使用:scripts/mysql_install_db --user=mysql來初始化,這個已經被mysql在新的版本中廢棄了,所以需要使用下面的命令安裝,如果你需要安裝別的版本請參考mysql官網的對應版本的安裝命令。)

進入剛才建立的目錄下

# cd /usr/local/mysql

如果下方這個命令無法使用,那麼就進入bin目錄下使用./mysqld --initialize進行初始化,總之正常安裝mysql如何初始化就如何進行安裝就可以了,這裡還可以設定安裝資料庫的data目錄等引數這裡就不多解釋了,網上安裝mysql5.7的教程很多。

# mysqld --initialize

如果初始化成功之後,系統會提示一個隨機生成的資料庫密碼,此時需要記住這個密碼,之後登入資料庫需要使用這個密碼!!!

修改許可權

# chown -R root .

# chown -R mysql data

# chgrp -R mysql .

# cp support-files/mysql.server /etc/rc.d/init.d/

# chmod +x /etc/rc.d/init.d/mysql.server

# chkconfig --add mysql.server

配置資料節點

# vi /etc/my.cnf

+ View code

其中的IP為管理節點的IP

啟動叢集節點上面的服務啟動mysql(成功會有success)# /etc/init.d/mysql.server start

啟動mysql成功之後請自己登入進mysql內然後進行密碼修改等操作,就和正常安裝完成mysql的操作一樣。需要注意的是,叢集資料庫的密碼需要相同哦!

啟動ndbd# /etc/init.d/ndbd --initial如果上述不行使用絕對路徑的這個:# /usr/local/mysql/bin/ndbd --initial如果出現下述現象就成功了

2017-03-06 14:04:07 [ndbd] INFO     -- Angel connected to '192.168.75.129:1186'  2017-03-06 14:04:07 [ndbd] INFO     -- Angel allocated nodeid: 2

最後當所有的節點配置完成,回到管理節點,使用上述說過的show檢視,如下的類似顯示,證明已經連線完成

ndb_mgm> show 
 Cluster Configuration 
 --------------------- 
 [ndbd(NDB)]    2 node(s) 
 id=2 (not connected, accepting connect from 192.168.75.128) 
 id=3    @192.168.75.130  (mysql-5.1.63 ndb-7.1.23, starting, Nodegroup: 0)
[ndb_mgmd(MGM)]    1 node(s) 
 id=1    @192.168.75.129  (mysql-5.7.16 ndb-7.5.4)
[mysqld(API)]    2 node(s) 
 id=4 (not connected, accepting connect from any host) 
 id=5 (not connected, accepting connect from any host)

測試

修改mysql密碼統一,修改mysql的訪問許可權,使外部ip能遠端訪問mysql

然後建立在一臺上面建立資料庫,看另一臺是否被同步,然後建立表,然後新增刪除等等。

唯一需要注意的是,建立表的時候必須選擇表的引擎為NDBCLUSTER,否則表不會進行同步

下面是測試的截圖

如果使用sql建立表,命令為:CREATE TABLE student (age INT) ENGINE=NDBCLUSTER

啟動和關閉

啟動mysql叢集。啟動順序為:管理節點→資料節點→SQL節點。

啟動的命令上面都有,刪去--initial即可

關閉時只需要關閉管理節點,後面的資料節點會同時被關閉,mysql就和原來一樣即可

管理節點關閉命令:ndb_mgm -e shutdown

(執行完成之後管理節點會關閉,資料節點也會關閉,但SQL節點不會,也就是資料庫服務需要手動到每一臺伺服器上停止以保證資料同步)

總結

1、在實際中需要分開資料節點和sql節點。

2、安裝最好參考官網的文件進行配置安裝,網上的部落格安裝的可能為舊版本,命令可能不同,連我自己現在寫的不知道你看的時候是不是官網又出了新版本,可能在某些地方進行了改動。

3、配置檔案過於簡單,還有很多配置會在實際中被使用到,需要參考文件進行新增。(my.cnf檔案的配置需要根據你的實際進行修改)

4、架構簡單,實驗足夠,現實遠不足。(需要使用備份資料庫,要備份管理節點等)

5、還未測試各種節點斷開、伺服器停止、資料庫服務停止、是否會出現資料異常等等特殊情況,還需要進行考慮。因為一旦資料不同步,想要恢復資料會比較麻煩。(之後經過測試,資料庫服務停止之後,或者伺服器停止之後,只要管理節點正常,資料會之後在開啟之後同步過去,但是為了防止萬一還是需要做好資料備份工作)

最後給出mysql官網的參考文件:https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-installation.html

官網安裝步驟可能和我的不同,我儘可能一臺弄好再弄另外的,官網有配置和啟動進行劃分,每臺同時進行,所以需要看清楚。

實現叢集的方式不止這一種,網上給出了幾種方式,這裡只做參考:

http://www.2cto.com/database/201504/387166.htm