mysql5.7 集羣搭建

前言

當你的業務到達一定的當量,肯定需要一定數量的數據庫來負載均衡你的數據庫請求,我在之前的博客中已經說明了,如何實現負載均衡,但是還有一個問題就是數據同步,因爲負載均衡的前提就是,各個服務器的數據庫是數據同步的。在業務量不大的時候,我們會使用主從複製的方法實現服務器數據同步,一主多從或者是雙主等,但是雖然進行了讀寫分離,但是對於讀的方法限制還是比較大,所以解決數據同步的問題就是數據庫集羣的意義。我這裏使用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節點分開。在實際中負載均衡服務還需要做備份,因爲萬一負載均衡服務器宕機將會導致所有數據節點都無法訪問,所以需要對負載均衡服務器備份,有條件的話,分開管理節點和負載均衡器。實驗只實現整個數據庫集羣,負載均衡請參考之前的博客配置即可。

下載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這些配置文件。確保刪除乾淨。不然可能會和後面的安裝有衝突。如果是實驗,關閉防火牆,實際中,防火牆打開對應端口。保證服務器之前能互相訪問,能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

下面是配置文件,根據自己的需求修改,首先給出官網的默認配置文件,然後給出我的配置文件,根據我修改的修改即可,別的均可不動。

官方配置(這裏NodeId值得注意,每一個節點都需要NodeId):

[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2    # Number of replicas
DataMemory=80M    # How much memory to allocate for data storage
IndexMemory=18M   # How much memory to allocate for index storage
                  # For DataMemory and IndexMemory, we have used the
                  # default values. Since the "world" database takes up
                  # only about 500KB, this should be more than enough for
                  # this example NDB Cluster setup.
ServerPort=2202   # This the default value; however, you can use any
                  # port that is free for all the hosts in the cluster
                  # Note1: It is recommended that you do not specify the port
                  # number at all and simply allow the default value to be used
                  # instead
                  # Note2: The port was formerly specified using the PortNumber 
                  # TCP parameter; this parameter is no longer available in NDB
                  # Cluster 7.5.

[ndb_mgmd]
# Management process options:
HostName=192.168.0.10           # Hostname or IP address of MGM node
DataDir=/var/lib/mysql-cluster  # Directory for MGM node log files

[ndbd]
# Options for data node "A":
                                # (one [ndbd] section per data node)
HostName=192.168.0.30           # Hostname or IP address
NodeId=2                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[ndbd]
# Options for data node "B":
HostName=192.168.0.40           # Hostname or IP address
NodeId=3                        # Node ID for this data node
DataDir=/usr/local/mysql/data   # Directory for this data node's data files

[mysqld]
# SQL node options:
HostName=192.168.0.20           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)

個人配置

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

[ndb_mgmd]
NodeId=1
HostName=192.168.75.129                    //管理節點ip  注意都有NodeId 除了sql節點
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=2
HostName=192.168.75.128                    //ndb數據節點ip
DataDir=/var/lib/mysql-cluster

[ndbd]
NodeId=1                                     
HostName=192.168.75.130                     //ndb數據節點ip
DataDir=/var/lib/mysql-cluster

[mysqld]
HostName=192.168.75.130                   //mysql數據庫sql節點ip, 注意mysqld ip可以和ndbd ip用同一個ip, 但是大型集羣建議分開。

[mysqld]
HostName=192.168.75.131                   //mysql數據庫sql節點ip

[mysqld]                                  //這裏可以不填表示接收任何一個mysqld節點

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

/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

然後就能使用ndb_mgm進去管理了

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 mysql

# 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
[mysqld]
ndbcluster
user=mysql  //啓動權限
ndb-connectstring=192.168.75.129

[mysql_cluster]
ndb-connectstring=192.168.75.129

其中的IP爲管理節點的IP
啓動集羣節點上面的服務啓動mysql(成功會有success)# /etc/init.d/mysql.server start
(如果啓動失敗, 多半是因爲文件權限的問題!)

啓動ndbd# /etc/init.d/ndbd –initial如果上述不行使用絕對路徑的這個:# /usr/local/mysql/bin/ndbd –initial如果出現下述現象就成功了(第一次啓動可以使用 –initial 這個命令會清除以前所有記錄,後續不建議使用–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 @192.168.2.130 (mysql-5.7.16 ndb-7.5.4)
id=5 (not connected, accepting connect from any host)  //這個sql節點未連接

測試

修改mysql密碼統一(在mysqld –initialize 的時候生成),修改mysql的訪問權限,使外部ip能遠程訪問mysql

mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Cjproj_123’;

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

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

下面是測試的截圖
這裏寫圖片描述
這裏寫圖片描述

如果使用sql創建表,命令爲:

CREATE TABLE student (age INT) ENGINE=NDBCLUSTER  //注意這裏的引擎爲NDBCLUSTER

啓動和關閉

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

啓動的命令上面都有,刪去–initial即可

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

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

總結

1、在實際中需要分開數據節點和sql節點。

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

3、配置文件過於簡單,還有很多配置會在實際中被使用到,需要參考文檔進行添加。

4、架構簡單,實驗足夠,現實遠不足。

5、還未測試各種節點斷開、服務器停止、數據庫服務停止、是否會出現數據異常等等特殊情況,還需要進行考慮。因爲一旦數據不同步,想要恢復數據會比較麻煩。

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

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

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

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

轉載請註明出處:http://www.cnblogs.com/linkstar/p/6510713.html

作者:LinkinStar

原文地址: http://www.cnblogs.com/linkstar/p/6510713.html

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