1. 程式人生 > >搭建Mysql Cluster叢集實現高可用

搭建Mysql Cluster叢集實現高可用

MySQL Cluster是MySQL適合於分散式計算環境的高實用、高冗餘版本。Cluster的漢語是“叢集”的意思。它採用了NDB Cluster 儲存引擎,允許在1個 Cluster 中執行多個MySQL伺服器。MySQL Cluster 是一種技術,該技術允許在無共享的系統中部署“記憶體中”資料庫的 Cluster 。通過無共享體系節構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由於每個元件有自己的記憶體和磁碟,不存在單點故障。

1.1  MySQL叢集架構

SQL節點: 給上層應用層提供SQL訪問。

管理節點(MGM):  管理整個叢集。 啟動,關閉叢集。 通過ndb_mgmd命令啟動叢集

儲存/資料節點: 儲存cluster中的資料。  資料節點,可以提供副本。實現資料冗餘。

NDB引擎:是一種 “記憶體中”的儲存引擎 , 它具有可用性高和資料一致性好的特點。

拓展:NDB引擎介紹:

NDB引擎

MySQL Cluster 使用了一個專用的基於記憶體的儲存引擎——NDB引擎,這樣做的好處是速度快, 沒有磁碟I/O的瓶頸,但是由於是基於記憶體的,所以資料庫的規模受系統總記憶體的限制, 如果執行NDB的MySQL伺服器一定要記憶體夠大,比如4G, 8G, 甚至16G。NDB引擎是分散式的,它可以配置在多臺伺服器上來實現資料的可靠性和擴充套件性,理論上 通過配置2臺NDB的儲存節點就能

實現整個資料庫叢集的冗餘性和解決單點故障問題

缺陷

基於記憶體,資料庫的規模受叢集總記憶體的大小限制

基於記憶體,斷電後資料可能會有資料丟失,這點還需要通過測試驗證。

多個節點通過網路實現通訊和資料同步、查詢等操作,因此整體性受網路速度影響,因此速度也比較慢

優點

1)多個節點之間可以分佈在不同的地理位置,因此也是一個實現分散式資料庫的方案;

2)擴充套件性很好,增加節點即可實現資料庫叢集的擴充套件;

3)冗餘性很好,多個節點上都有完整的資料庫資料,因此任何一個節點宕機都不會造成服務中斷。

MySQL cluster的下載地址:https://dev.mysql.com/downloads/cluster/

在我們做的實驗中MySQL cluster叢集各機器角色如下分配:

MySQL管理節點:xuegod67.cn   IP:10.10.10.67

MySQL資料節點:xuegod68.cn   IP:10.10.10.68

MySQL資料節點:xuegod69.cn   IP:10.10.10.69

MySQL SQL節點:xuegod70.cn   IP:10.10.10.70

MySQL SQL節點:xuegod71.cn   IP:10.10.10.71

MySQL舊版本清除   首先使用如下命令來清理之前作業系統自帶的MySQL安裝:

yum -y remove mysql

然後使用如下命令:

rpm -qa | grep mysql    有的話也刪除

最後刪掉下列檔案:

rm -rf  /var/lib/mysql/*

rm -rf  /etc/my.cnf 

rm -rf  /etc/init.d/mysqld

vim  /etc/profile  刪除與mysql相關內容

1.上傳並安裝最新的EPEL源 和 MySQL社群版源安裝包

[[email protected] ~]# rpm -ihv epel-release-7-10.noarch.rpm

[[email protected] ~]# rpm -ihv mysql57-community-release-el7-11.noarch.rpm

2開啟MySQL cluster 源

[[email protected] ~]# sed -i "55s/0/1/g" /etc/yum.repos.d/mysql-community.repo

3重新整理yum源快取

[[email protected] ~]# yum clean all && yum list

 

2.4  安裝解決Cluster的依賴包

[[email protected] ~]# yum install -y perl perl-Class-MethodMaker perl-DBI  libaio numactl

19.2.5  安裝MySQL Cluster

[[email protected] ~]# yum install -y mysql-cluster-community-server

2.6  檢視安裝路徑

[[email protected] ~]# rpm -ql mysql-cluster-community-server

其他4臺主機上重複2.1—2.5的步驟

2.4.資料節點主機都要安裝資料節點的相關包(2臺)

[[email protected] ~]# yum install -y mysql-cluster-community-data-node

[[email protected] ~]# yum install -y mysql-cluster-community-data-node

2.5. 管理節點安裝management管理包

 [[email protected]~]# yum -y install mysql-cluster-community-management-server

2.6.建立資料夾

管理節點建立配置目錄:

[[email protected]~]# mkdir -p /usr/mysql-cluster/

3  搭建MySQL叢集

3.1  xuegod67建立管理節點上配置檔案

[[email protected] ~]vim /usr/mysql-cluster/config.ini   #寫入以下內容

[ndbd default]
NoOfReplicas=2                                   #資料寫入數量。2表示兩份
DataMemory=200M                               #配置資料儲存可使用的記憶體
IndexMemory=100M                              #索引給100M
[ndb_mgmd]
nodeid=1
datadir=/var/lib/mysql                       #管理節點的日誌
HostName=10.10.10.67                         #管理節點的IP地址。本機IP
###### data node options:                         #儲存節點
[ndbd]
HostName=10.10.10.68
DataDir=/var/lib/mysql                            #mysql資料儲存路徑
nodeid=2
[ndbd]
HostName=10.10.10.69
DataDir=/var/lib/mysql                            #mysql資料儲存路徑
nodeid=3
# SQL node options:                               #關於SQL節點
[mysqld]
HostName=10.10.10.70
nodeid=4
[mysqld]
HostName=10.10.10.71
nodeid=5

在這個檔案裡,我們分別給五個節點分配了ID,這有利於更好的管理和區分各個節點。當然,要是不指定,MySQL也會動態分配一個。

3.2  xuegod68、xuegod69資料節點

[[email protected] /]# vim  /etc/my.cnf #請配置xuegod69一樣

[[email protected] /]# vim  /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql						#MySQL資料儲存路徑
ndbcluster     									#啟動ndb引擎
ndb-connectstring=10.10.10.67				# 管理節點IP地址 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster] 
ndb-connectstring=10.10.10.67				#管理節點IP地址

3.3  SQL節點配置文件

 [[email protected]~]#vim /etc/my.cnf    #請配置xuegod71一樣

        [[email protected]~]#vim /etc/my.cnf   

[mysqld]
ndbcluster                                 #啟動ndb引擎 
ndb-connectstring=10.10.10.67          # 管理節點IP地址
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql_cluster]  
ndb-connectstring=10.10.10.67          #管理節點IP地址

說明:資料節點和SQL節點配置檔案區別 ,就多一行

資料節點有:datadir=/var/lib/mysql #MySQL資料儲存路徑。

SQL節點上沒有。

3.4  MySQL Cluster啟動

初次啟動命令以及使用者密碼更改調整:(請嚴格按照次序啟動)

先啟動:管理節點服務->資料節點服務->sql節點服務

關閉:關閉管理節點服務,關閉管理節點服務後,nbdb資料節點服務會自動關閉->手動把sql節點服務關了。

執行初次啟動前請先確認 將兩臺機器的防火牆關閉(service iptables stop 或者 設定 防火牆埠可通,兩個埠即通訊埠1186、資料埠3306 )

3.4.1  xuegod67上啟動管理節點命令

[[email protected] ~]#ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini

#儘量不要把 管理節點、 資料節點、儲存節點 配置在同一臺機子上,否則一個掛了,就全掛了。

檢視埠號: 

      [[email protected]~]# netstat  -antup | grep 1186

3.4.2  xuegod68和xuegod69啟動資料節點服務

[[email protected] ~]# ndbd --initial

[ndbd] INFO     -- Angel connected to '10.10.10.67: 1196'

[ndbd] INFO     -- Angel allocated nodeid: 2

[[email protected] ~]# ndbd --initial

[ndbd] INFO     -- Angel connected to '10.10.10.67: 1196'

[ndbd] INFO     -- Angel allocated nodeid: 3

3.4.3  Xuegod70、xuegod71啟動SQL節點服務

[[email protected]~]#systemctl start mysqld

[[email protected] ~]#systemctl start mysqld

3.4.4.  檢視MySQL叢集狀態:

[[email protected] ~]#ndb_mgm

ndb_mgm> show

3.4.5.  資料同步實驗測試

因為預設密碼比較坑人,我們就需要在此之前改一下兩臺機器MySQL的密碼。

檢視MySQL root使用者密碼

注意:我們只需修改sql節點的密碼

[[email protected] ~]# grep password /var/log/messages

# The random password set for the root user at Wed Apr  1 21:10:53 2015 (local time): gDVpNRBxTcgd17di

5.7以上版本 關閉密碼安全策略外掛

在my.cnf新增 validate-password=off 重啟mysql

[[email protected] ~]# mysql –uroot –p’gDVpNRBxTcgd17di’

      mysql>set password for 'root'@'localhost'=password('123456');

mysql>grant all privileges on *.* to [email protected]”%” identified by “123456” #授權

mysql>flush privileges;

另一臺SQL節點也是一樣操作

3.4.6  模擬外部機器的一個客戶端 插入資料:

mysql -ucluster -p123456 -h 10.10.10..70

注意:建立表的時候使用ndb引擎

mysql> create database db;

mysql> use db;

mysql> create table test(id int) engine=ndb;

mysql> insert into test values(1000);

mysql> select * from test;

  登陸另一臺sql節點檢視

mysql -ucluster -p123456 -h 10.10.10.71

mysql> use db;

mysql> select * from test;

      停掉一個sql節點測試

[[email protected] ~]# mysqladmin -uroot -p123456 shutdown

ndb_mgm> show 檢視狀態

3.4.7  關閉服務

關閉MySQL叢集順序: 關閉管理節點服務 -> 關閉管理節點時,資料節點服務自動關閉 –> 需要手動關閉SQL節點服務

  [[email protected] /] # ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> shutdown

Node 2: Cluster shutdown initiated

Node 3: Cluster shutdown initiated

3 NDB Cluster node(s) have shutdown.

Disconnecting to allow management server to shutdown.

Node 2: Node shutdown completed.

ndb_mgm> exit

ps -axu | grep  ndbd #檢視不到,說明資料節點已經被關

手動關閉SQL節點服務

Xuegod70和xuegod71上,手動關閉SQL節點服務

[[email protected] ~]# mysqladmin -uroot -p123456 shutdown

[[email protected] ~]# mysqladmin -uroot -p123456 shutdown

或者:方法二 kill掉

[[email protected] ~]# ps -axu | grep mysql

[[email protected] ~]# kill -9 7617

[[email protected] ~]# kill -9 7743

[[email protected]~]# ps -axu | grep mysql  #xuegod71同樣kill掉

 

再次啟動,MySQL叢集啟動:

[[email protected] /]# ndb_mgmd --ndb_nodeid=1 --initial -f /usr/mysql-cluster/config.ini

[[email protected] /]#ndbd

[[email protected] /]#ndbd

[[email protected] /]# systemctl restart mysqld

[[email protected] /]# systemctl restart mysqld

     

檢視mysql 叢集狀態:

[[email protected] ~]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show