標籤:mysql 叢集
MySQL叢集作用:解決MySQLProxy 伺服器的缺點單點故障和資料備份
結構圖如下:
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/88/5C/wKiom1fyFs6gtx6XAACycUylU2U172.png" title="234.png" alt="wKiom1fyFs6gtx6XAACycUylU2U172.png" />
使用6台RHEL6.4虛擬機器,sqlA和sqlB作為SQL節點,ndbA和ndbB作為資料節點,mgmd作為管理節點,這5個節點構成MySQLCluster體系;而另一台虛擬機器192.168.4.120作為MySQL測試客戶機。
角色說明:
用戶端(client) :訪問叢集主機
管理叢集的主機(mgmd):管理叢集中所有主機,載入自己的主設定檔,設定叢集中所有主機的角色
SQL結點(sql) :供使用者訪問和執行SQL語句,儲存表結構(2台以上)
資料結點(ndbd節點) :儲存表中的記錄(2台以上)
MySQL叢集提供三進程:
mgmd 管理進程 運行在管理機上 config.ini
mysqld 資料庫服務 運行在sql節點上 /etc/my.cnf
ndbd 資料存放區服務 運行在ndbd節點 /etc/my.cnf
1、公用配置(要保留RHEL內建的mysql-libs包)
A、關閉防火牆、selinux,停止mysql資料庫服務,移走設定檔/etc/my.cnf
B、卸載衝突的軟體包(所有節點)
# rpm -qa | grep -i mysql //查看原有的mysql包
# yum -y remove .....
C、安裝叢集軟體(所有節點)
# tar -xf MySQL-Cluster-gpl-7.3.3-1.el6.x86_64.rpm-bundle.tar
# rpm -Uvh MySQL-Cluster-*.rpm //預設路徑/var/lib/mysql
# rpm -qa | grep MySQL-Cluster
D、修改密碼
# cat /root/.mysql_secret
# the root user at Tue Dec24 15:24:50 2013 (local time): Z3Qw2OWJ
# mysql -u root -p Z3Qw2OWJ
mysql> SET PASSWORD FOR ‘root‘@‘localhost‘=PASSWORD(‘123‘);
2、組態管理主機mgm
啟動管理進程時,調用設定檔/etc/my-cluster.ini,知道叢集中主機的角色(設定檔要自己編輯,不允許有空行)
# mkdir -p /var/log/mysql-cluster //建立工作資料夾
# vim /etc/my-cluster.ini
[ndbd default] //定義資料結點的公用配置 NoOfReplicas=2 //指定一份資料備份幾份(資料結點數或能被資料節點數整除)
DataMemory=80M //資料記憶體(儲存使用者執行過的SQL語句和查詢結果,通常是實體記憶體的1/3) IndexMemory=18M //儲存索引的記憶體 [ndb_mgmd] //指定管理主機 nodeid=1 //指定編號(管理標識),值不允許重複 hostname=192.168.4.100 //管理主機的IP datadir=/var/log/mysql-cluster //路徑在mgm上,用於存放叢集中主機的資訊,路徑需自己建立 [ndbd] //指定資料結點1
nodeid =30 hostname=192.168.4.30 //資料結點的IP Datadir=/var/lib/mysql-cluster/data //路徑在資料結點上要存在,該目錄用於存放表中的記錄 [ndbd] //指定資料結點2
nodeid =40 hostname=192.168.4.40 Datadir=/var/lib/mysql-cluster/data [mysqld] //指定sql結點1
nodeid =10 hostname=192.168.4.10 //sql結點的IP [mysqld] //指定sql結點2 nodeid =20 hostname=192.168.4.20
3、配置資料結點ndb(在 .30 .40上操作)
1)建立儲存表中記錄的目錄
# mkdir -p /var/lib/mysql-cluster/data
2)編輯設定檔/etc/my.cnf(與mysqld的主設定檔同名)
若原來已存在my.cnf檔案,則先做改名
# mv /etc/my.cnf /etc/my.cnf.bak
# vi /etc/my.cnf [mysqld] //設定資料結點 datadir=/var/lib/mysql-cluster/data //將記錄儲存在原生哪個目錄下,與管理主機上的設定一致 ndb-connectstring=192.168.4.100 //管理主機的IP
ndbcluster //指定啟動並執行儲存引擎
[mysql_cluster] //設定管理叢集的主機
ndb-connectstring=192.168.4.100 //管理主機的IP
4、配置SQL結點sql (在.10 .20上操作)
1)編輯設定檔/etc/my.cnf
# mv /etc/my.cnf /etc/my.cnf.bak
# vi /etc/my.cnf [mysqld] //設定sql結點
ndbcluster //指定表的儲存引擎
default-storage-engine=ndbcluster
[mysql_cluster] //設定管理叢集的主機
ndb-connectstring=192.168.4.100 //管理主機的IP
5、啟動(注意啟動順序)
*正確的啟動順序:管理節點 --> 資料節點 --> SQL節點。
*關閉順序: SQL節點 --> 資料節點 --> 管理節點。
*資料節點、SQL節點都正常運行後,理論上管理節點可關閉(無監控等任務的話)
1)啟動管理進程
# ndb_mgmd -f /etc/my-cluster.ini --nodaemon //啟動管理進程指令碼
# pgrep mgmd //查看進程是否開啟,可用pkill -9 mgmd 結束管理進程
# ndb_mgm //執行登入管理介面的指令碼 ndb_mgm>show //查看叢集資訊
# netstat -atunp | grep ndb
tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 4965/ndb_mgmd
設定為開機自啟動
#vim /etc/rc.local
ndb_mgmd -f /etc/my-cluster.ini --nodaemon
關於管理節點的啟動,有以下幾個需要注意的地方:
ndb_mgmd 預設以後台模式運行(--daemon),調試過程中可添加選項--nodaemon來禁用後台模式;
ndb_mgmd 初次啟動成功以後,會自動儲存叢集配置,以後再啟動時會忽略-f指定的設定檔,除非添加--inital選項(比如向叢集中添加新的節點時,就應該重新初始化)。
2)啟動資料結點進程
MySQL Cluster資料節點的對應服務程式為ndbd(單線程的)、ndbmtd(多線程的),初次開機或重新初始化時加 --initial選項,以後不用加。
# ndbd --initial-start //啟動資料結點進程
# pgrep ndbd //查看進程,可用pkill -9 ndbd 結束管理進程
# vim /etc/rc.local //設定為開機自啟動
ndbd
3)啟動sql結點的資料庫服務進程
# pgrep mysqld
# pkill -9 mysql
# service mysql start
# chkconfig mysql on
檢查sql節點預設儲存引擎,確保已支援ndbcluster且作為預設儲存引擎:
# mysql -u root -p123456 //本機帳號登入
mysql> show engines\G;
Engine: ndbcluster
Support: DEFAULT
管理節點查看叢集狀態
#ndb_mgm //進入群集管理環境
ndb_mgm> show //若能看到如下資訊就說明叢集建立成功
Cluster Configuration
---------------------
[ndbd(NDB)] 2node(s)
id=30 @192.168.4.30 (mysql-5.6.14 ndb-7.3.3, starting, Nodegroup:0)
id=40 @192.168.4.40 (mysql-5.6.14 ndb-7.3.3, Nodegroup: 0, *)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.4.100 (mysql-5.6.14 ndb-7.3.3)
[mysqld(API)] 2node(s)
id=10 @192.168.4.10 (mysql-5.6.14 ndb-7.3.3)
id=20 @192.168.4.20 (mysql-5.6.14 ndb-7.3.3)
6、sql結點授權用戶端使用者(兩點節點都要)
mysql>grant all on *.* to [email protected]‘192.168.4.%‘ identified by ‘123‘;
7、MySQL叢集的高可用性測試(驗證叢集)
**如果預設引擎未設為ndbcluster,則建表操作末尾需手工指定儲存引擎**
**不能自動切換兩個節點→mysql-mmm 解決**
1)資料同步(自動備份)測試
用戶端登入 mysql節點.10 和.20 ( .10和.20的資料會同步)
# mysql -h192.168.4.10 -uroot -p123
mysql> create database ndb;
mysql> use ndb;
mysql> create table ndb01(idint);
mysql> insert into ndb01values(100);
mysql> select * from ndb01;
+------+
| id |
+------+
| 100 |
| 100 |
從客戶機訪問20,確認結果(能看到從10上所建的庫、表、表記錄)
# mysql -h192.168.4.20 -uroot-p123
2)高可用性測試(單點故障)(關閉一台資料節點)
**只要還有一台資料節點可用,MYSQL資料庫整體就仍然可用**
關閉資料節點.30上的ndbd進程:
# pkill -9 ndbd
# netstat -antup | grep ndbd //確認
ndb_mgm> show //此時從管理節點上查看叢集狀態,會發現ndbA已中斷連線
id=30 (not connected, acceptingconnect from 192.168.4.30)
然後從客戶機訪問sqlA或sqlB,仍然可讀、寫資料庫。
驗證故障恢複過程
重新啟動.30上的ndbd服務進程,稍待片刻後強制關閉.40上的ndbd服務進程。然後再次訪問.30或.40節點,查詢ndb01表的記錄,發現與前面添加的結果一致:
以上測試成立說明:因故障中斷的資料節點(.30)恢複後,會立即從正常的資料節點(.40)同步資料,確保資料一致性。
3)高可用性測試(關閉一台SQL節點)
這個比較好理解:當MySQL叢集內有多個SQL節點時,只要有一台SQL節點可用,就可以通過它來訪問MySQL資料庫中儲存的表資料。
比如說,關閉sqlA、sqlB中的任何一台以後,還可以通過另外一台來訪問mydb庫
完畢!
本文出自 “Dave-技術部落格” 部落格,請務必保留此出處http://davewang.blog.51cto.com/6974997/1858594
構建MySQL叢集