MySQL集羣概述和安裝環境 node
MySQL Cluster是MySQL適合於分佈式計算環境的高實用、高冗餘版本.Cluster的漢語是「集羣」的意思.它採用了NDB Cluster 存儲引擎,容許在1個 Cluster 中運行多個MySQL服務器. mysql
MySQL Cluster 是一種技術,該技術容許在無共享的系統中部署「內存中」數據庫的 Cluster .經過無共享體系結構,系統可以使用廉價的硬件,並且對軟硬件無特殊要求.此外,因爲每一個組件有本身的內存和磁盤,不存在單點故障. sql
mysql 集羣架構 數據庫
上圖是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這個文件當中.
---------------------------------------------------------------------------------------------------------
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 後臺運行進程
#儘可能不要把 管理結點、數據結點、存儲結點 配置在同一臺機子上,不然一個掛了,就全掛了.
查看端口號:
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
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
數據同步
1.xiaogan63 修改root密碼:
[root@xiaogan63 /]# cat /root/.mysql_secret
[root@xiaogan63 /]# mysql -uroot -pHV6Isr1WnotQxADc
mysql> set password=password('123456');
[root@xiaogan63 /]# mysql -uroot -p123456
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
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