1 MySQL集羣概述和安裝環境
MySQL Cluster是MySQL適合於分佈式計算環境的高實用、高冗餘版本。Cluster的漢語是「集羣」的意思。它採用了NDB Cluster 存儲引擎,容許在1個 Cluster 中運行多個MySQL服務器。
MySQL Cluster 是一種技術,該技術容許在無共享的系統中部署「內存中」數據庫的 Cluster 。經過無共享體系結構,系統可以使用廉價的硬件,並且對軟硬件無特殊要求。此外,因爲每一個組件有本身的內存和磁盤,不存在單點故障。
1.1 mysql 集羣架構
html
圖45.1 mysql的一種常見集羣
SQL節點: 給上層應用層提供sql訪問。
管理節點(MGM): 管理整個集羣。 啓動,關閉集羣。 經過ndb_mgmd命令啓動集羣
存儲/數據節點:保存cluster中的數據。 數據節點,能夠提供副本。實現數據冗餘。
NDB引擎:是一種 「內存中」的存儲引擎 , 它具備可用性高和數據一致性好的特色。
拓展:NDB引擎介紹:
NDB引擎
MySQL Cluster使用了一個專用的基於內存的存儲引擎——NDB引擎,這樣作的好處是速度快, 沒有磁盤I/O的瓶頸,可是因爲是基於內存的,因此數據庫的規模受系統總內存的限制,若是運行NDB的MySQL服務器必定要內存夠大,好比4G, 8G, 甚至16G。NDB引擎是分佈式的,它能夠配置在多臺服務器上來實現數據的可靠性和擴展性,理論上經過配置2臺NDB的存儲節點就能
實現整個數據庫集羣的冗餘性和解決單點故障問題。
缺陷
· 基於內存,數據庫的規模受集羣總內存的大小限制
· 基於內存,斷電後數據可能會有數據丟失,這點還須要經過測試驗證。
· 多個節點經過網絡實現通信和數據同步、查詢等操做,所以總體性受網絡速度影響,所以速度也比較慢
2.2 優勢
· 多個節點之間能夠分佈在不一樣的地理位置,所以也是一個實現分佈式數據庫的方案。
· 擴展性很好,增長節點便可實現數據庫集羣的擴展。
· 冗餘性很好,多個節點上都有完整的數據庫數據,所以任何一個節點宕機都不會形成服務中斷。
在咱們作的實驗中mysql cluster集羣各機器角色以下分配:
mysql管理結點:xuegod63.cn IP:192.168.1.63 (安裝server、client)
mysql數據結點:xuegod64.cn IP:192.168.1.64 (安裝server、client)
mysql數據結點:xuegod65.cn IP:192.168.1.65 (安裝server、client)
msyqlSQL結點:xuegod66.cn IP:192.168.1.66 (安裝server、client)
msyqlSQL結點:xuegod67.cn IP:192.168.1.67 (安裝server、client)
將MySQL-Cluster-gpl-7.3.7-1.el6.x86_64.rpm-bundle.tar 上傳到xuegod63,
實戰:MySQL集羣搭建
1.2 環境清理以及安裝
這一部分雖然是初始過程可是比較複雜,請你們耐心配置。
xuegod63上執行下面內容:
首先咱們要清除舊版本,而後安裝mysql cluster,最後是文件權限管理。
1.mysql舊版本清除
首先使用以下命令來清理以前操做系統自帶的mysql安裝:
而後使用以下命令:
對於找到的2個剩餘mysql包,請按照以下的命令格式予以刪除:
- rpm -e --nodepsmysql-libs-5.1.71-1.el6.x86_64
最後刪掉下列文件:
- rm -rf /var/lib/mysql/*
- rm -rf /etc/my.cnf
- rm -rf /etc/init.d/mysqld
- rm -rf /etc/profile
2.mysql cluster版本安裝準備
將MySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar放到某個目錄下(譬如/package) 下面,而且執行以下命令解壓:
- tar -xvfMySQL-Cluster-gpl-7.3.4-1.el6.x86_64.rpm-bundle.tar
獲得以下文件清單:
MySQL-Cluster-client-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-devel-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-embedded-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-server-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.4-1.el6.x86_64.rpm
MySQL-Cluster-test-gpl-7.3.4-1.el6.x86_64.rpm
3.
每一臺主機都要安裝mysql集羣軟件包(server\client)批量安裝
- yum -y installMySQL-Cluster-server-gpl-7.4.11-1.el6.x86_64.rpm
- rpm -ivhMySQL-Cluster-client-gpl-7.4.11-1.el6.x86_64.rpm
4.建立文件夾
(分以下3個類來建立對應的文件夾)
管理節點建立:
- mkdir /var/lib/mysql-cluster /var/run/mysqld/ 進程pid文件目錄
數據節點存放數據:
SQL節點:可不用 文件夾受權
- mkdir /var/run/mysqld 進程pid文件目錄
管理節點受權
- chown mysql.mysql -R /var/lib/mysql-cluster /var/run/mysqld/
數據節點受權
- chown mysql.mysql -R /var/lib/mysql /var/run/mysqld/
SQL節點受權
- chown mysql.mysql -R /var/lib/mysql /var/run/mysqld/
file:///C:/Users/Administrator/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif注意:當安裝完畢MySQL-Cluster-server-gpl包後,將出現以下提示信息,提醒咱們整個cluster安裝後的初次超級帳戶密碼存在/root/.mysql_secret這個文件當中。
---------------------------------------------------------------------------------------------------------
A RANDOMPASSWORD HAS BEEN SET FOR THE MySQL root USER !
You will findthat password in '/root/.mysql_secret'.
You mustchange that password on your first connect,
no otherstatement but 'SET PASSWORD' will be accepted.
See the manualfor the semantics of the 'password expired' flag.
Also, theaccount for the anonymous user has been removed.
In addition,you can run:
/usr/bin/mysql_secure_installation
which willalso give you the option of removing the test database.
This isstrongly recommended for production servers.
-----------------------------------------------------------------
xuegod64的大致步驟如同xuegod63,咱們首先要清除舊版本mysql。node
5.查看mysql root用戶密碼
- [root@xuegod64 ~]# cat/root/.mysql_secret
- # The random password setfor the root user at Wed Apr 1 21:10:532015 (local time): NSblG9hMkThTgFHY
會生成兩個主要的命令文件:ndb_mgmd 和ndb_mgm
- [root@xuegod63 ~]# whichndb_mgm
- /usr/bin/ndb_mgm
- [root@xuegod63 ~]# rpm -qf/usr/bin/ndb_mgm
- MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
- [root@xuegod63 ~]# whichndb_mgmd
- /usr/sbin/ndb_mgmd
- [root@xuegod63 ~]# rpm -qf/usr/sbin/ndb_mgmd
- MySQL-Cluster-server-gpl-7.3.7-1.el6.x86_64
還會生成用戶:mysql
- [root@xuegod63 ~]# id mysql
- uid=495(mysql)gid=489(mysql) groups=489(mysql)
2 搭建mysql集羣
通過複雜的初始配置,咱們終於要搭建集羣了。咱們按配置,啓動,測試的順序來整理這一部分。
.2.1 各個機器上的配置
咱們先將需求配置到各臺機器上
1.xuegod63建立管理結點上配置文件
- [root@xuegod63 ~]vim /var/lib/mysql-cluster/config.ini #寫入如下內容
- [ndbddefault]
- NoOfReplicas=2 #數據寫入數量。2表示兩份
- DataMemory=200M #配置數據存儲可以使用的內存
- IndexMemory=100M #索引給100M
- [ndb_mgmd]
- id=1
- datadir=/var/lib/mysql-cluster #管理結點的日誌
- HostName=192.168.1.63 #管理結點的IP地址。本機IP
- ######data node options: #存儲結點
- [ndbd]
- HostName=192.168.1.64
- DataDir=/var/lib/mysql #mysql數據存儲路徑
- id=2
- [ndbd]
- HostName=192.168.1.65
- DataDir=/var/lib/mysql #mysql數據存儲路徑
- id=3
- # SQLnode options: #關於SQL結點
- [mysqld]
- HostName=192.168.1.66
- id=4
- [mysqld]
- HostName=192.168.1.67
- id=5
在這個文件裏,咱們分別給五個節點分配了ID,這有利於更好的管理和區分各個節點。固然,要是不指定,MySQL也會動態分配一個
2.xuegod63數據節點
- [root@xuegod64 /]# vim /etc/my.cnf #xuegod65配置同樣
- [mysqld]
- datadir=/var/lib/mysql #mysql數據存儲路徑
- ndbcluster #啓動ndb引擎
- ndb-connectstring=192.168.1.63 # 管理節點IP地址
- [mysqld_safe]
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- [mysql_cluster]
- ndb-connectstring=192.168.1.63 #管理節點IP地址
3. SQL節點配置文檔:
- [root@xuegod66~]#vim /etc/my.cnf #xuegod67配置同樣
- [mysqld]
- ndbcluster #啓動ndb引擎
- ndb-connectstring=192.168.1.63 # 管理節點IP地址
- [mysqld_safe]
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- [mysql_cluster]
- ndb-connectstring=192.168.1.63 #管理節點IP地址
- 說明:數據節點和SQL結點配置文件區別 ,就多一行
- 數據結點有:datadir=/var/lib/mysql #mysql數據存儲路徑。
SQL節點上沒有。
2.2 MySQL Cluster啓動
初次啓動命令以及用戶密碼更改調整:(請嚴格按照次序啓動)
先啓動:管理結點服務->數據結點服務->sql結點服務
關閉:關閉管理結點服務,關閉管理結點服務後,nbdb數據結點服務會自動關閉->手動把sql結點服務關了。
執行初次啓動前請先確認 將兩臺機器的防火牆關閉(service iptables stop 或者 設定 防火牆端口可通,兩個端口即通信端口118六、數據端口3306 )
1.xuegod63上啓動管理結點命令
- ndb_mgmd -f/var/lib/mysql-cluster/config.ini # mysql cluster 後臺運行進程
#儘可能不要把管理結點、 數據結點、存儲結點 配置在同一臺機子上,不然一個掛了,就全掛了。
查看端口號:
- [root@xuegod63 ~]#netstat -antup | grep 1186
- tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 7057/ndb_mgmd
- tcp 0 0 127.0.0.1:1186 127.0.0.1:60324 ESTABLISHED 7057/ndb_mgmd
- tcp 0 0127.0.0.1:60324 127.0.0.1:1186 ESTABLISHED 7057/ndb_mgmd
2.xuegod64和xuegod 65啓動數據結點服務
- [root@xuegod64 ~]# ndbd--initial
- 2015-04-01 21:57:58 [ndbd]INFO -- Angel connected to'192.168.1.63: 1186'
- 2015-04-01 21:57:58 [ndbd]INFO -- Angel allocated nodeid: 2
- [root@xuegod65 ~]# ndbd --initial
- 2014-12-02 22:24:31 [ndbd]INFO -- Angel connected to'192.168.1.63: 1186'
- 2014-12-02 22:24:31 [ndbd]INFO -- Angel allocated nodeid: 3
3.xuegod66和xuegod67啓動SQL結點服務
- [root@xuegod66 ~]#mysqld_safe--defaults-file=/etc/my.cnf &
- [root@xuegod67 ~]#mysqld_safe--defaults-file=/etc/my.cnf &
查看mysql集羣狀態:
- [root@xuegod63 ~]#ndb_mgm
- ndb_mgm> show
2.3 數據同步
由於默認密碼比較坑人,咱們就須要在此以前改一下兩臺機器mysql的密碼。
1.xuegod67 修改root密碼:
- [root@xuegod67 /]# cat/root/.mysql_secret
- # The random password setfor the root user at Tue Dec 2 21:25:592014 (local time): rWG1av6XjzT4ghfd
- [root@xuegod67 /]# mysql-uroot -prWG1av6XjzT4ghfd
- mysql> show databases;
- ERROR 1820 (HY000): You mustSET PASSWORD before executing this statement
- mysql> setpassword=password('123456');
- Query OK, 0 rows affected(0.72 sec)
- mysql> exit;
- Bye
- [root@xuegod67 /]# mysql-uroot -p123456 #測試登錄
- mysql>grant all privilegeson *.* to cluster@」%」 identified by 「123456」 #受權
- mysql>flush privileges;
2.xuegod66 修改root密碼:
- [root@xuegod67 ~]# cat/root/.mysql_secret
- # The random password setfor the root user at Tue Dec 2 21:31:112014 (local time): 2nOsamIw5wkBNhDm
- [root@xuegod66~]# mysql-uroot -p2nOsamIw5wkBNhDm
- mysql> setpassword=password('123456');
- Query OK, 0 rows affected(0.42 sec)
- mysql> exit;
- Bye
- [root@xuegod66 ~]# mysql-uroot -p123456
- mysql> show databases;
- mysql>grant allprivileges on *.* to cluster@」%」 identified by 「123456」 #受權
- mysql>flush privileges;
3.模擬外部機器的一個客戶端插入數據:
- mysql -ucluster -p123456 -h192.168.1.67
- mysql> create database db;
- mysql> use db;
- mysql> create tabletest(id int) engine=ndb;
- mysql> insert into testvalues(1000);
- mysql> select * from test;
登錄另外一臺sql節點查看
- mysql -ucluster -p123456 -h192.168.1.66
- mysql> use db;
- mysql> select * fromtest;
- 停掉一個sql節點測試
- [root@xuegod67 ~]#mysqladmin -uroot -p123456 shutdown
- ndb_mgm> show 查看狀態
2.4 關閉服務
關閉mysql集羣順序: 關閉管理節點服務-》 關閉管理節點時,數據結點服務自動關閉 –》 須要手動關閉SQL結點服務
- [root@xuegod63 /] # ndb_mgm
- -- NDB Cluster -- ManagementClient --
- ndb_mgm> shutdown
- Node 2: Cluster shutdowninitiated
- Node 3: Cluster shutdowninitiated
- 3 NDB Cluster node(s) haveshutdown.
- Disconnecting to allowmanagement server to shutdown.
- Node 2: Node shutdowncompleted.
- ndb_mgm> exit
- ps -axu | grep ndbd #查看不到,說明數據節點已經被關
手動關閉SQL結點服務
- xuegod66和xuegod67上,手動關閉SQL結點服務
- [root@xuegod66 ~]#mysqladmin -uroot -p123456 shutdown
- [root@xuegod67 ~]#mysqladmin -uroot -p123456 shutdown
或者:方法二 kill掉
- [root@xuegod66 ~]# ps -axu |grep mysql
- [root@xuegod66 ~]# kill -97617
- [root@xuegod66 ~]# kill -97743
- [root@xuegod67~]# ps -axu |grep mysql #xuegod67一樣kill掉
2.5 總結
再次啓動,msyql集羣啓動:
- [root@xuegod63 /]# ndb_mgmd-f /var/lib/mysql-cluster/config.ini
- [root@xuegod64 /]#ndbd
- [root@xuegod65 /]#ndbd
- [root@xuegod66 /]#mysqld_safe --defaults-file=/etc/my.cnf &
- [root@xuegod67 /]#mysqld_safe --defaults-file=/etc/my.cnf &
查看mysql 集羣狀態:
- [root@xuegod63 ~]# ndb_mgm
- -- NDB Cluster -- Management Client --
- ndb_mgm> show
- Connected to Management Server at: localhost:1186
- Cluster Configuration
- ---------------------
- [ndbd(NDB)] 2node(s)
- id=2 @192.168.1.64 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
- id=3 @192.168.1.65 (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)
- [ndb_mgmd(MGM)] 1node(s)
- id=1 @192.168.1.63 (mysql-5.6.29 ndb-7.4.11)
- [mysqld(API)] 2node(s)
- id=4 @192.168.1.66 (mysql-5.6.29 ndb-7.4.11)
- id=5 @192.168.1.67 (mysql-5.6.29 ndb-7.4.11)
- ndb_mgm>