手把手教你用Mysql-Cluster-7.5搭建數據庫集羣 HAProxy實現mysql負載均衡

前言

當你的業務到達必定的當量,確定須要必定數量的數據庫來負載均衡你的數據庫請求,我在以前的博客中已經說明了,如何實現負載均衡,可是還有一個問題就是數據同步,由於負載均衡的前提就是,各個服務器的數據庫是數據同步的。在業務量不大的時候,咱們會使用主從複製的方法實現服務器數據同步,一主多從或者是雙主等,可是雖然進行了讀寫分離,可是對於讀的方法限制仍是比較大,因此解決數據同步的問題就是數據庫集羣的意義。我這裏使用mysql官網提供的mysql-cluster實現集羣。(到文章發佈前的最新版本的安裝教程,把網上踩的坑都踩過了一遍;)node

 

mysql cluster中的幾個概念解釋

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

一、mc已經包含了mysql,我下載的最新的mc7.5,官方說明包含的是mysql版本是5.7。因此不須要使用別的msyql的安裝包安裝數據庫。同時注意mysql5.7的版本在安裝的命令和配置上面和以前的版本有很大的不一樣,因此網上有不少mc7.5以前的版本,所包含的mysql版本不一樣,因此安裝方法不一樣。linux

二、管理節點,mc管理節點負責管理、配置、監控整個集羣。sql

三、數據節點,使用內存存放數據,保存進數據節點的數據都會自動複製並存儲到其餘數據節點。數據庫

四、mysql節點,也叫數據庫節點,和咱們平時使用的mysql相同,做爲數據庫使用。被數據節點訪問。服務器

 

架構圖及說明

image

我實驗中的配置就是如圖所示,由於虛擬機佔用內存較大,只使用了3臺服務器,在實際狀況中最好將數據節點和mysql節點分開。在實際中負載均衡服務還須要作備份,由於萬一負載均衡服務器宕機將會致使全部數據節點都沒法訪問,因此須要對負載均衡服務器備份,有條件的話,分開管理節點和負載均衡器。實驗只實現整個數據庫集羣,負載均衡請參考以前的博客配置便可。架構

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

 

下載mysql cluster

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

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

下面是配置文件,根據本身的需求修改,首先給出官網的默認配置文件,而後給出個人配置文件,根據我修改的修改便可,別的都可不動。

使用配置文件初始化管理節點

# /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

其中的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,不然表不會進行同步

下面是測試的截圖

imageimage

image

若是使用sql建立表,命令爲:CREATE TABLE student (age INT) ENGINE=NDBCLUSTER

 

啓動和關閉

啓動mysql集羣。啓動順序爲:管理節點→數據節點→SQL節點。

啓動的命令上面都有,刪去--initial便可

關閉時只須要關閉管理節點,後面的數據節點會同時被關閉,mysql就和原來同樣便可

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

(執行完成以後管理節點會關閉,數據節點也會關閉,但SQL節點不會,也就是數據庫服務須要手動到每一臺服務器上中止以保證數據同步)

 

總結

一、在實際中須要分開數據節點和sql節點。

二、安裝最好參考官網的文檔進行配置安裝,網上的博客安裝的可能爲舊版本,命令可能不一樣,連我本身如今寫的不知道你看的時候是否是官網又出了新版本,可能在某些地方進行了改動。

三、配置文件過於簡單,還有不少配置會在實際中被使用到,須要參考文檔進行添加。(my.cnf文件的配置須要根據你的實際進行修改)

四、架構簡單,實驗足夠,現實遠不足。(須要使用備份數據庫,要備份管理節點等)

五、還未測試各類節點斷開、服務器中止、數據庫服務中止、是否會出現數據異常等等特殊狀況,還須要進行考慮。由於一旦數據不一樣步,想要恢復數據會比較麻煩。(以後通過測試,數據庫服務中止以後,或者服務器中止以後,只要管理節點正常,數據會以後在開啓以後同步過去,可是爲了防止萬一仍是須要作好數據備份工做)

 

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

官網安裝步驟可能和個人不一樣,我儘量一臺弄好再弄另外的,官網有配置和啓動進行劃分,每臺同時進行,因此須要看清楚。

實現集羣的方式不止這一種,網上給出了幾種方式,這裏只作參考:

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

相關文章
相關標籤/搜索