天天看點

mysql cluster noofreplicas,Mysql Cluster叢集搭建

本文源連結位址:https:www.93bok.com

實驗環境: Centos6.5 minimal 64位系統

伺服器IP:

192.168.1.113(用戶端)

192.168.1.114(管理節點)

192.168.1.115(資料節點1)

192.168.1.116(資料節點2)

192.168.1.117(SQL節點1)

192.168.1.118(SQL節點2)

包版本:

MySQL Cluster:mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

實驗拓撲:

mysql cluster noofreplicas,Mysql Cluster叢集搭建

MySQL叢集概述

MySQL Cluster是MySQL适合于分布式計算環境的高實用、高備援版本。Cluster的漢語是“叢集”的意思。它采用了NDB Cluster 存儲引擎,允許在1個 Cluster 中運作多個MySQL伺服器。

MySQL Cluster 是一種技術,該技術允許在無共享的系統中部署“記憶體中”資料庫的 Cluster 。通過無共享體系結構,系統能夠使用廉價的硬體,而且對軟硬體無特殊要求。此外,由于每個元件有自己的記憶體和磁盤,不存在單點故障。

MySQL叢集架構

mysql cluster noofreplicas,Mysql Cluster叢集搭建

1)SQL節點: 給上層應用層提供sql通路。

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

3)存儲/資料節點: 儲存cluster中的資料。 資料節點,可以提供副本。實作資料備援。

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

NDB引擎介紹

MySQL Cluster 使用了一個專用的基于記憶體的存儲引擎——NDB引擎,這樣做的好處是速度快, 沒有磁盤I/O的瓶頸,但是由于是基于記憶體的,是以資料庫的規模受系統總記憶體的限制, 如果運作NDB的MySQL伺服器一定要記憶體夠大,比如4G, 8G, 甚至16G。NDB引擎是分布式的,它可以配置在多台伺服器上來實作資料的可靠性和擴充性,理論上 通過配置2台NDB的存儲節點就能實作整個資料庫叢集的備援性和解決單點故障問題。

缺陷:

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

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

3)多個節點通過網絡實作通訊和資料同步、查詢等操作,是以整體性受網絡速度影響,是以速度也比較慢

優點:

1)多個節點之間可以分布在不同的地理位置,是以也是一個實作分布式資料庫的方案。

2)擴充性很好,增加節點即可實作資料庫叢集的擴充。

3)備援性很好,多個節點上都有完整的資料庫資料,是以任何一個節點當機都不會造成服務中斷。

官網下載下傳位址

https://dev.mysql.com/downloads/cluster/

mysql cluster noofreplicas,Mysql Cluster叢集搭建

MySQL Cluster叢集搭建

一、解除安裝系統自帶的mysql所有元件(所有機器,除了客戶機)

yum -y remove mysql*

rpm -qa | grep mysql

rpm -e --nodeps xxxxx

rm -rf /var/lib/mysql/

rm -rf /etc/my.cnf

rm -rf /etc/init.d/mysqld

vim /etc/profile 删除與mysql相關内容

chkconfig --list | grep mysql

chkconfig --del mysqld

二、安裝配置管理節點(MGM)

1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓

mkdir -p /usr/local/mysql

cd /usr/local/mysql

tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster

2、建立管理節點日志目錄、配置檔案目錄

mkdir -p /var/log/mysql-cluster

mkdir -p /etc/mysql-cluster

3、建立配置檔案

vi /etc/mysql-cluster/config.ini

[ndbd default]

NoOfReplicas=2 #資料寫入數量。2表示兩份,2個資料節點

DataMemory=80M #配置資料存儲可使用的記憶體

IndexMemory=18M #索引給100M

[ndb_mgmd]

nodeid=1

datadir=/var/log/mysql-cluster #管理結點的日志

HostName=192.168.1.114 #管理結點的IP位址。本機IP

###### data node options: #存儲結點

[ndbd]

HostName=192.168.1.115

DataDir=/data/mysql #mysql資料存儲路徑

nodeid=2

[ndbd]

HostName=192.168.1.116

DataDir=/data/mysql #mysql資料存儲路徑

nodeid=3

# SQL node options: #關于SQL結點

[mysqld]

HostName=192.168.1.117

nodeid=4

[mysqld]

HostName=192.168.1.118

nodeid=5

4、初始化管理節點

/usr/local/mysql/mysql-cluster/bin/ndb_mgmd -f /etc/mysql-cluster/config.ini

mysql cluster noofreplicas,Mysql Cluster叢集搭建

5、檢視叢集狀态

/usr/local/mysql/mysql-cluster/bin/ndb_mgm

ndb_mgm> show

mysql cluster noofreplicas,Mysql Cluster叢集搭建

從圖中可以看到,除了管理節點,别的資料節點和SQL節點還沒有連接配接上,我們還沒配置。

三、安裝配置資料節點(NDB)

兩台資料節點(192.168.1.115、192.168.1.116)一樣的配置

1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓

mkdir -p /usr/local/mysql

cd /usr/local/mysql

tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster

2、建立mysql運作使用者

useradd -M -s /sbin/nologin mysql

3、建立mysql資料目錄、配置檔案目錄并授權

mkdir -p /etc/mysql

mkdir -p /data/mysql

chown -R mysql:mysql /data/mysql/

4、建立資料節點配置檔案

vi /etc/mysql/my.cnf

[mysqld]

datadir=/data/mysql #mysql資料存儲路徑

ndbcluster #啟動ndb引擎

ndb-connectstring=192.168.1.114 #管理節點IP位址

[mysql_cluster]

ndb-connectstring=192.168.1.114 #管理節點IP位址

5、啟動資料節點服務

/usr/local/mysql/mysql-cluster/bin/ndbd --initial

mysql cluster noofreplicas,Mysql Cluster叢集搭建

四、安裝配置SQL節點

兩台SQL節點(192.168.1.117、192.168.1.118)一樣的配置

1、建立目錄,上傳二進制包到/usr/local/mysql目錄解壓

mkdir -p /usr/local/mysql

cd /usr/local/mysql

tar -zxvf mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64.tar.gz

mv mysql-cluster-gpl-7.3.19-linux-glibc2.12-x86_64 mysql-cluster

2、建立mysql運作使用者

useradd -M -s /sbin/nologin mysql

3、建立mysql資料目錄、配置檔案目錄并授權

mkdir -p /etc/mysql

mkdir -p /data/mysql

chown -R mysql:mysql /data/mysql/

4、建立SQL節點配置檔案

vi /etc/mysql/my.cnf

[mysqld]

ndbcluster #啟動ndb引擎

ndb-connectstring=192.168.1.114 #管理節點IP位址

[mysql_cluster]

ndb-connectstring=192.168.1.114 #管理節點IP位址

5、配置mysql服務

cp /usr/local/mysql/mysql-cluster/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

chkconfig --add mysqld

vi /etc/init.d/mysqld

mysql cluster noofreplicas,Mysql Cluster叢集搭建

6、初始化mysql資料庫

/usr/local/mysql/mysql-cluster/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/mysql-cluster --datadir=/data/mysql/

mysql cluster noofreplicas,Mysql Cluster叢集搭建

報錯,缺少依賴,我們yum裝一下

yum -y install perl

再重新初始化一下

mysql cluster noofreplicas,Mysql Cluster叢集搭建

又報錯了,還是缺少依賴,再裝呗

yum -y install numactl

再來重新開機初始化一次,正常了

mysql cluster noofreplicas,Mysql Cluster叢集搭建

7、啟動SQL節點(和正常啟動mysql資料庫一樣)

service mysqld start

mysql cluster noofreplicas,Mysql Cluster叢集搭建

MySQL Cluster管理節點檢視

/usr/local/mysql/mysql-cluster/bin/ndb_mgm

ndb_mgm> show

mysql cluster noofreplicas,Mysql Cluster叢集搭建

SQL節點設定mysql密碼并授權用戶端可以登入

SQL節點1:(密碼123456)

/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password

/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456

mysql> grant all on *.* to [email protected]‘%‘ identified by ‘123456‘;

mysql> flush privileges;

SQL節點2:(密碼123456)

/usr/local/mysql/mysql-cluster/bin/mysqladmin -u root password

/usr/local/mysql/mysql-cluster/bin/mysql -u root -p123456

mysql> grant all on *.* to [email protected]‘%‘ identified by ‘123456‘;

mysql> flush privileges;

MySQL Cluster測試

測試一:先用用戶端登入任意一台SQL節點,然後建立庫,插入資料,檢視兩台SQL節點是否會自動同步

用戶端登入117SQL節點,建立資料:

mysql -u cluster -p123456 -h 192.168.1.117

mysql> create database BB;

mysql> use BB;

mysql> create table test2(id int)ENGINE=NDB;

mysql> insert into test2 values(33333);

用戶端退出117SQL節點,登入118SQL節點檢視資料是否同步:

mysql -u cluster -p123456 -h 192.168.1.118

mysql> select * from BB.test2;

mysql cluster noofreplicas,Mysql Cluster叢集搭建

測試二:關閉117SQL節點,然後使用用戶端登入118SQL節點,建立資料,建立完成資料之後,重新啟動117SQL節點,檢視117SQL節點是否能同步118SQL節點新建立的資料

關閉117SQL節點:

service mysqld stop

用戶端登入118SQL節點建立資料:

mysql -u cluster -p123456 -h 192.168.1.118

mysql> create database db;

mysql> use db;

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

mysql> insert into test values(1000);

重新啟動117SQL節點:

service mysqld start

用戶端登入117SQL節點檢視在118SQL節點上建立的資料是否能同步過來:

mysql -u cluster -p123456 -h 192.168.1.117

mysql> show databases;

mysql cluster noofreplicas,Mysql Cluster叢集搭建

mysql> select * from db.test;

mysql cluster noofreplicas,Mysql Cluster叢集搭建

MySQL Cluster叢集啟動和關閉順序

請嚴格按照次序啟動和關閉叢集

啟動:

管理結點服務->資料結點服務->sql結點服務

關閉:

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

說明:

首次啟動資料節點時,有帶上參數--initial,這是初始化參數,在以後的啟動過程中,則不能添加該參數,否則ndbd程式會清除在之前建立的所有用于恢複的資料檔案和日志檔案

筆者留下的一個天坑

由于我能力以及時間有限,在搭建過程中,發現了一個問題,這個搭建過程我是全部的防火牆都關閉了,因為我發現,如果所有伺服器的防火牆都開啟,即使我把MySQL Cluster叢集所需要的3306和1186端口開放了,搭建還是不成功,比如下圖,SQL節點怎麼都是not connected,但是隻要把防火牆關閉,瞬間就連接配接上了,哈哈,算是留下的一個坑吧,如果有大神看到這篇文章,且,知道該怎麼解決,并,願意把解決方案告訴我的,可以在網站的《關于》一欄,加一下我微信或Q群,小的在此感激不盡

mysql cluster noofreplicas,Mysql Cluster叢集搭建