2-20 MySQL集羣搭建實現高可用

 

MySQL集羣概述和安裝環境 node

MySQL Cluster是MySQL適合於分佈式計算環境的高實用、高冗餘版本.Cluster的漢語是「集羣」的意思.它採用了NDB Cluster 存儲引擎,容許在1個 Cluster 中運行多個MySQL服務器. mysql

MySQL Cluster 是一種技術,該技術容許在無共享的系統中部署「內存中」數據庫的 Cluster .經過無共享體系結構,系統可以使用廉價的硬件,並且對軟硬件無特殊要求.此外,因爲每一個組件有本身的內存和磁盤,不存在單點故障. sql

mysql 集羣架構 數據庫

wps4A0A.tmp

上圖是mysql的一種常見集羣 vim

SQL節點: 給上層應用層提供sql訪問. windows

管理節點(MGM): 管理整個集羣. 啓動,關閉集羣. 經過ndb_mgmd命令啓動集羣 服務器

存儲/數據節點: 保存cluster中的數據. 網絡

數據節點,能夠提供副本.實現數據冗餘. 架構

NDB引擎:是一種 「內存中」的存儲引擎 ,它具備可用性高和數據一致性好的特色. dom

拓展:NDB引擎介紹

NDB引擎

MySQL Cluster 使用了一個專用的基於內存的存儲引擎——NDB引擎,這樣作的好處是速度快, 沒有磁盤I/O的瓶頸,可是因爲是基於內存的,因此數據庫的規模受系統總內存的限制, 若是運行NDB的MySQL服務器必定要內存夠大,好比4G, 8G, 甚至16G.NDB引擎是分佈式的,它能夠配置在多臺服務器上來實現數據的可靠性和擴展性,理論上 經過配置2臺NDB的存儲節點就能實現整個數據庫集羣的冗餘性和解決單點故障問題.

缺陷

·基於內存,數據庫的規模受集羣總內存的大小限制

·基於內存,斷電後數據可能會有數據丟失,這點還須要經過測試驗證.

·多個節點經過網絡實現通信和數據同步、查詢等操做,所以總體性受網絡速度影響,所以速度也比較慢

優勢

·多個節點之間能夠分佈在不一樣的地理位置,所以也是一個實現分佈式數據庫的方案.

·擴展性很好,增長節點便可實現數據庫集羣的擴展.

·冗餘性很好,多個節點上都有完整的數據庫數據,所以任何一個節點宕機都不會形成服務中斷.

Mysql cluster的下載地址:http://dev.mysql.com/downloads/cluster/

在咱們作的實驗中mysql cluster集羣各機器角色以下分配:

mysql管理結點:xiaogan63.cn   IP:192.168.31.63

mysql 數據結點:xiaogan63.cn   IP:192.168.31.63

mysql 數據結點:xiaogan64.cn   IP:192.168.31.64

msyql SQL結點:xiaogan63.cn   IP:192.168.31.63

msyql SQL結點:xiaogan64.cn   IP:192.168.31.64

將MySQL-Cluster-gpl-7.4.13-1.el6.x86_64.rpm-bundle.tar

上傳到xiaogan63和xiaogan64上.

實戰:MySQL集羣搭建

環境清理以及安裝

xiaogan63和xiaogan64上執行下面內容:

首先咱們要清除舊版本,而後安裝mysql cluster,最後是文件權限管理.

1.mysql舊版本清除

首先使用以下命令來清理以前操做系統自帶的mysql安裝:

yum -y remove mysql

而後使用以下命令:

rpm -qa | grep mysql*

對於找到的2個剩餘mysql包,請按照以下的命令格式予以刪除:

rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64

2.mysql cluster版本安裝準備

將MySQL-Cluster-gpl-7.4.13-1.el6.x86_64.rpm-bundle.tar放到某個目錄下(譬如/package) 下面,而且執行以下命令解壓:

tar -xf MySQL-Cluster-gpl-7.4.13-1.el6.x86_64.rpm-bundle.tar

# 當前時間不能晚於下載文件的時間,否則會報錯

# 避免報錯,能夠先用ntpdate 同步下時間

# ntpdate time.windows.com

# rpm -ivh /mnt/Packages/ntpdate-*

獲得以下文件清單:

MySQL-Cluster-client-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-devel-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-embedded-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-gpl-7.4.13-1.el6.x86_64.rpm-bundle.tar

MySQL-Cluster-server-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-shared-compat-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-shared-gpl-7.4.13-1.el6.x86_64.rpm

MySQL-Cluster-test-gpl-7.4.13-1.el6.x86_64.rpm

3.建立文件夾

(分以下4個類來建立對應的文件夾)

數據結點存放數據:mkdir /var/lib/mysql

管理節點:mkdir /var/lib/mysql-cluster  SQL節點:可不用 文件夾受權

進程DIR:    mkdir /var/run/mysqld 

管理結點運行目錄: /usr/mysql-cluster

使用以下的命令來變動權限保證可寫入:

[root@xiaogan63 ~]# useradd -M -s /sbin/nologin mysql

[root@xiaogan63 ~]# chown mysql:mysql -R /var/lib/mysql

[root@xiaogan63 ~]# chown mysql:mysql -R /var/lib/mysql-cluster/

[root@xiaogan63 ~]# chown mysql:mysql -R /var/run/mysqld/

[root@xiaogan63 ~]# chown mysql:mysql -R /usr/mysqld-cluster/

# 64中不須要建立/usr/mysqld-cluster

4.安裝mysql集羣軟件包(客戶端)

rpm -ivh MySQL-Cluster-server-gpl-7.4.13-1.el6.x86_64. rpm

rpm -ivh MySQL-Cluster-client-gpl-7.4.13-1.el6.x86_64. rpm

注意:MySQL-Cluster-server和MySQL-Cluster-client 的關係和mysql-server同mysql 包的關係同樣.數據結點存放數據: /var/lib/mysql  會自動建立.

會生成兩個主要的命令文件:ndb_mgmd 和ndb_mgm

[root@xiaogan63 ~]# which ndb_mgm

/usr/bin/ndb_mgm

[root@xiaogan63 ~]# rpm -qf /usr/bin/ndb_mgm

MySQL-Cluster-server-gpl-7.4.13-1.el6.x86_64

[root@xiaogan63 ~]# which ndb_mgmd

/usr/sbin/ndb_mgmd

[root@xiaogan63 ~]# rpm -qf /usr/sbin/ndb_mgmd

MySQL-Cluster-server-gpl-7.4.13-1.el6.x86_64

注意:當安裝完畢MySQL-Cluster-server-gpl包後,將出現以下提示信息,提醒咱們整個cluster安裝後的初次超級帳戶密碼存在/root/.mysql_secret這個文件當中.

---------------------------------------------------------------------------------------------------------

wps4A0B.tmp

5.查看mysql root用戶密碼

[root@xiaogan64 ~]# cat /root/.mysql_secret

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

搭建mysql集羣

通過複雜的初始配置,咱們終於要搭建集羣了.咱們按配置,啓動,測試的順序來整理這一部分.

各個機器上的配置

咱們先將需求配置到各臺機器上

1.xiaogan63建立管理結點上配置文件

[root@xiaogan63 ~]# cd /var/lib/mysql-cluster

[root@xiaogan63 mysql-cluster]# vi config.ini   #寫入如下內容

[ndbd default]

NoOfReplicas=2 #數據寫入數量.2表示兩份

DataMemory=200M

IndexMemory=100M #索引給100M

[ndb_mgmd]

id=1

datadir=/var/lib/mysql-cluster # 管理結點的日誌

HostName=192.168.31.63 #管理結點的IP地址.本機IP

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

[ndbd]

HostName=192.168.31.63

DataDir=/var/lib/mysql #mysql數據存儲路徑

id=2

[ndbd]

HostName=192.168.31.64

DataDir=/var/lib/mysql #mysql數據存儲路徑

id=3

# SQL node options: #關於SQL結點

[mysqld]

HostName=192.168.31.63

id=4

[mysqld]

HostName=192.168.31.64

id=5

在這個文件裏,咱們分別給五個節點分配了ID,這有利於更好的管理和區分各個節點.固然,要是不指定,MySQL也會動態分配一個

2.xiaogan63數據節點+SQL節點配置文檔

[root@xiaogan63 /]# vim  /etc/my.cnf #寫入如下內容

[mysqld]

datadir=/var/lib/mysql #mysql數據存儲路徑

# 注:若是xiaogan63 只作 SQL節點,則配置文檔 沒有datadir這一項

# 說明:數據節點和SQL結點配置文件區別 ,就多一行

# 數據結點有:datadir=/var/lib/mysql#mysql數據存儲路徑.

# SQL節點上沒有.

ndbcluster      #啓動ndb引擎

ndb-connectstring=192.168.31.63 # 管理節點IP地址

[mysqld_safe] 

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

ndb-connectstring=192.168.31.63 #管理節點IP地址

3.xiaogan64配置數據結點和SQL結點

[root@xiaogan63 ~]# scp /etc/my.cnf 192.168.31.64:/etc/

注意:xiaogan63和xiaogan64的/my.cnf的內容同樣,可直接從xiaogan63複製過去

MySQL Cluster啓動

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

先啓動:管理結點服務->數據結點服務->sql結點服務

關閉:關閉管理結點服務,關閉管理結點服務後,nbdb數據結點服務會自動關閉->手動把sql結點服務關了.

執行初次啓動前請先確認

將兩臺機器的防火牆關閉(service iptables stop 或者 設定 防火牆端口可通,兩個端口即通信端口118六、數據端口3306 )

1.xiaogan63上啓動管理結點命令

ndb_mgmd -f /var/lib/mysql-cluster/config.ini

# mysql cluster 後臺運行進程

#儘可能不要把 管理結點、數據結點、存儲結點 配置在同一臺機子上,不然一個掛了,就全掛了.

查看端口號:

wps4A1C.tmp

2.xiaogan63和xiaogan 64啓動數據結點服務

[root@xiaogan63 ~]# ndbd --initial

2016-10-23 11:58:48 [ndbd] INFO     -- Angel connected to '192.168.31.63:1186'

2016-10-23 11:58:48 [ndbd] INFO     -- Angel allocated nodeid: 2 [root@xiaogan64 ~]# ndbd --initial

2016-10-23 11:58:59 [ndbd] INFO     -- Angel connected to '192.168.31.63:1186'

2016-10-23 11:58:59 [ndbd] INFO     -- Angel allocated nodeid: 3

wps4A1D.tmp

3.xiaogan63和xiaogan64啓動SQL結點服務

[root@xiaogan63 ~]#mysqld_safe --defaults-file=/etc/my.cnf  &

[root@xiaogan64 ~]#mysqld_safe --defaults-file=/etc/my.cnf  &

查看mysql 集羣狀態:

[root@xiaogan63 ~]#ndb_mgm

wps4A1E.tmp

數據同步

1.xiaogan63 修改root密碼:

[root@xiaogan63 /]# cat /root/.mysql_secret

[root@xiaogan63 /]# mysql -uroot -pHV6Isr1WnotQxADc

mysql> set password=password('123456');

[root@xiaogan63 /]# mysql -uroot -p123456

wps4A1F.tmp

2.xiaogan64 修改root密碼:

[root@xiaogan64 ~]# cat /root/.mysql_secret

[root@xiaogan64 ~]# mysql_secure_installation

Enter current password for root (enter for none):

Change the root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Remove anonymous users? [Y/n] y

Disallow root login remotely? [Y/n] y

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n] y

[root@xiaogan64 ~]# mysql -uroot -p123456

wps4A20.tmp

3.插入數據:

xiaogan63:

mysql> create database xiaogan;

xiaogan64:

mysql> show databases;

關閉服務

關閉mysql集羣順序: 關閉管理節點服務-》 關閉管理節點時,數據結點服務自動關閉 –》 須要手動關閉SQL結點服務

[root@xiaogan63 /] # 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 3: Node shutdown completed.

ndb_mgm> exit

ps -axu | grep ndbd #查看不到,說明數據節點已經被關

手動關閉SQL結點服務

xiaogan63上,手動關閉SQL結點服務

[root@xiaogan63 ~]# ps -axu | grep mysql

[root@xiaogan63 ~]# kill -9 7617

[root@xiaogan63 ~]# kill -9 7743

[root@xiaogan63 ~]# ps -axu | grep mysql

xiaogan64上,手動關閉SQL結點服務

[root@xiaogan64 ~]# ps -axu | grep mysql

[root@xiaogan64 ~]# kill -9  5576

[root@xiaogan64 ~]# kill -9  5701

[root@xiaogan64 ~]# ps -axu | grep mysql

總結

再次啓動,msyql集羣啓動:

[root@xiaogan63 ~]# ndb_mgmd -f /var/lib/mysql-cluster/config.ini

[root@xiaogan63 ~]# ndbd

[root@xiaogan64 ~]# ndbd

[root@xiaogan63 ~]# mysqld_safe --defaults-file=/etc/my.cnf &

[root@xiaogan64 ~]# mysqld_safe --defaults-file=/etc/my.cnf &

測試:

查看mysql 集羣狀態:

[root@xiaogan63 /]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

wps4A21.tmp

相關文章
相關標籤/搜索