前言
當你的業務到達一定的當量,肯定需要一定數量的數據庫來負載均衡你的數據庫請求,我在之前的博客中已經說明了,如何實現負載均衡,但是還有一個問題就是數據同步,因為負載均衡的前提就是,各個服務器的數據庫是數據同步的。在業務量不大的時候,我們會使用主從復制的方法實現服務器數據同步,一主多從或者是雙主等,但是雖然進行了讀寫分離,但是對於讀的方法限制還是比較大,所以解決數據同步的問題就是數據庫集群的意義。我這里使用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
下面是配置文件,根據自己的需求修改,首先給出官網的默認配置文件,然后給出我的配置文件,根據我修改的修改即可,別的均可不動。
[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=2
DataMemory=512M IndexMemory=18M [ndb_mgmd] HostName=192.168.75.129 DataDir=/var/lib/mysql-cluster [ndbd] HostName=192.168.75.128 DataDir=/var/lib/mysql-cluster [ndbd] HostName=192.168.75.130 DataDir=/var/lib/mysql-cluster [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
然后就能使用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
[mysqld] ndbcluster ndb-connectstring=192.168.75.129 [mysql_cluster] ndb-connectstring=192.168.75.129
其中的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
轉載請注明出處:http://www.cnblogs.com/linkstar/p/6510713.html
作者:LinkinStar