1、MySQL集群的作用:
- 解決訪問節點的單點故障
- 數據存儲節點的單點故障
- 解決數據存儲節點數據備份問題
2、集群:
使用一組服務器提供相同的服務
3、關于MySQL-Cluster:
MySQL官方提供的集群版本
已集成標準版MySQL程序,可獨立安裝使用
采用NDB(Network DataBase)引擎
假定每個節點都有獨立內存、硬盤
利用廉價硬件減少整個數據庫的單點故障
4、集群中服務器的角色
- 數據節點:ndbd(單線程) ndb_mtd(多線程)?? 存儲數據的(表里的記錄)
- Sql節點:mysqld? 是客戶端訪問數據的接口,負責執行SQL命令
可理解為支持NDB的標準MySQL服務器,僅存儲表結構、獨立的用戶授權
面向客戶端提供用戶鑒權、SQL查詢等訪問服務
- 管理節點:ndb_mgmd? 管理集群中的所有服務器
客戶端:client 訪問數據
5、案例拓撲:
6、MySQL集群的搭建(配置)
1)公共配置:
# rpm -qa | grep -i mysql
# service mysql? stop ; chkconfig? mysql off
# rpm -e --nodeps MySQL-devel MySQL-embeddedMySQL-test MySQL-server MySQL-client MySQL-shared MySQL-shared-compat
//保留RHEL自帶的mysql-libs包
# rm -rf??/etc/my.cnf
# rm -rf??/var/lib/mysql/*
# tar -xvfMySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar
# rpm -Uvh MySQL-Cluster-*.rpm
2)配置管理節點:
運行管理進程?? ndb_mgmd
配置文件? /etc/config.ini?? (服務器的角色? 和角色對應的ip? id號?? 工作目錄)
[ndbd?default] :數據節點的公共配置
[ndb_mgmd] :指定管理節點
[ndbd] :指定數據節點
[mysqld] :指定sql節點
# mkdir??-p??? /var/log/mysql-cluster?? //創建工作目錄
# vim?/etc/config.ini?? //編寫主配置文件
[ndbd?default]
NoOfReplicas=2?????? //保留2份數據拷貝
DataMemory=80M???? //數據緩存大小
IndexMemory=18M?? //索引緩存大小
[ndb_mgmd]
nodeid=7????? //管理節點的ID標識
hostname=192.168.4.100?? //管理節點的IP地址
datadir=/var/log/mysql-cluster??? //工作目錄
[ndbd]?????????? //設置數據節點ndbA
nodeid=8????? //數據節點ndbA的ID標識
hostname=192.168.4.30???? //此節點的IP地址
datadir=/var/log/mysql-cluster/data???? //工作目錄
[ndbd]???????? //設置數據節點ndbB
nodeid=9
hostname=192.168.4.40
datadir=/var/log/mysql-cluster/data
[mysqld]????? //設置sql節點sqlA
nodeid=10????? //sql節點sqlA的ID標識
hostname=192.168.4.10???? //此節點的IP地址
[mysqld]????? //設置sql節點sqlB
nodeid=11
hostname=192.168.4.20
:wq
3)配置數據節點:
運行數據進程?? ndbd
配置文件:? /etc/my.cnf
#mkdir?-p?? /var/log/mysql-cluster/data??? //創建工作目錄
#vim????/etc/my.cnf
[mysqld]
datadir=/var/log/mysql-cluster/data? ?? ??//工作目錄
ndb-connectstring=192.168.4.100??? //管理節點IP地址
ndbcluster???????????????????? //指定使用ndbcluster集群存儲引擎
[mysql_cluster]
ndb-connectstring=192.168.4.100?? //如何連接管理節點
:wq
4)配置sql節點
運行mysql服務??mysql(此服務是由mysql-cluster軟件包提供)
#vim???/etc/my.cnf
[mysqld]
ndbcluster??????????????????????????????? //指定使用ndbcluster集群存儲引擎
default-storage-engine=ndbcluster??? //指定表的默認存儲引擎是 ndbcluster
ndb-connectstring=192.168.4.100
[mysql_cluster]
ndb-connectstring=192.168.4.100???? //如何連接管理節點
:wq
7、啟動不同角色服務器上進程
1)? 啟動管理節點上的管理進程
#ndb_mgmd? -f??/etc/config.ini
//啟動進程,結合-f選項讀取.ini配置;默認后臺模式,調試時可加--nodaemon;修改了配置以后,可加--initial重新初始化
#netstat?-untlap? |? grep???:1186? ??//查看進程
#pkill??-9?? ndb_mgmd????? //殺死進程
2)依次啟動數據節點上的數據進程
#ndbd
//首次執行時,可加--initial初始化;多個數據節點的操作相同
3)依次啟動sql節點上的數據庫服務
#service?? mysql?start??//多個sql節點的操作相同
8、查看集群狀態
1)管理節點上登錄管理界面,查看狀態
#ndb_mgm
ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]? 2node(s)
id=8 @192.168.4.30? (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)
id=9 @192.168.4.40? (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0)
[ndb_mgmd(MGM)]????? 1 node(s)
id=7 @192.168.4.100? (mysql-5.6.14 ndb-7.3.3)
[mysqld(API)]?????? 2 node(s)
id=10????? @192.168.4.10? (mysql-5.6.14 ndb-7.3.3)
id=11????? @192.168.4.20? (mysql-5.6.14 ndb-7.3.3)
ndb_mgm>
2)Sql節點的mysql初始化
重設root密碼;為客戶端訪問添加用戶授權
#service mysqlstart
#mysql -uroot -p初始密碼??? //初始密碼見/root/.mysql_secret文件
3)在sql節點上,檢查默認的存儲引擎
Mysql>show engines;
9、測試訪問節點的單點故障
在sql節點上授權可以從遠端的客戶機連接自己
Grant all?on? webdb.* to webuser@”%”identified by “webuser88”;? //兩個sql節點都做授權
客戶端訪問:#mysql-h192.168.10/20? -uwebuser -pwebuser88
mysql>create? database??webdb;
mysql>create? table?webdb.a(id int);
mysql>insert?? into?webdb.a values(1000);
mysql> select? * from webdb.a ;
訪問sqlA節點操縱數據,在sqlB上會同步結果。
10、測試數據節點的單點故障
數據節點之間可以互相備份,自動選舉Master,自動同步數據。測試時可關掉一個數據節點的ndbd服務,插入、查詢數據驗證數據的同步性。
Sql節點和數據節點的進程正常運行后,不需要重啟的話,管理節點可以關掉