程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql Cluster概述與部署

Mysql Cluster概述與部署

編輯:MySQL綜合教程

Mysql Cluster概述與部署      MySql Cluster最顯著的優點就是高可用性,高實時性,高冗余,擴展性強。      它允許在無共享的系統中部署"內存中"數據庫的Cluster.通過無共享體系結構,系統能夠使用廉價的硬件.此外,由於每個組件有自己的內存和磁盤,所以不存在單點故障.      它由一組計算機構成,每台計算機上均運行者多種進程,包括mysql服務器,NDB cluster的數據節點,管理服務啟,以及專門的數據訪問程序      所有的這些節點構成一個完整的mysql集群體系.數據保存在"NDB存儲服務器"的存儲引擎中,表(結構)則保存在"mysql服務器"中.應用程序通過"mysql服務器"訪問這些數據表,集群管理服務器通過管理工具(ndb_mgmd)來管理"NDB存儲服務器".   基本概念      "NDB"是一種"內存中"的存儲引擎,它具有可用性高和數據一致性好的特點.下面介紹mysql cluster 節點時,它表示進程.在單台計算機上可以有任意數目的節點.       管理節點(MGM):這類節點的作用是管理mysql cluster內的其他節點,如配置文件和cluster 日志,啟動並停止節點,運行備份等.cluster中的每個節點從管理服務器上檢索配置數據,並請求管理服務器所在位置的方式.當數據節點內出現新的事件時,節點將關於這類事件的信息傳輸到管理服務器上,然後,又將這類信息寫入cluster日志。由於這類節點負責管理其他節點的配置,所以應在啟動其他節點之前首先啟動這類節點.MGM節點是用命令"ndb_mgmd"來啟動       數據節點(NDB):這類節點用於保存cluster的數據.數據節點的數目與副本的數目相關,是片段的倍數.假設有2個副本,每個副本有2個片段,那麼就有4個數據節點.不過沒有必要設置多個副本.數據節點是用命令"ndbd"來啟動的.      SQL節點:這是用來訪問cluster數據的節點.對於MYSQL cluster來說,客戶端節點是使用NDB cluster存儲引擎的傳統Mysql服務器.通常,sql節點使用將"ndbcluster"添加到"my.cnf"後使用"mysqld" 啟動      此外,可以有任意數目的cluster客戶端進程或應該程序.它們分為兩種類型,即標准mysql客戶端和管理客戶端.      標准mysql客戶端:能夠從php,perl,c,c++,java,python,ruby等編寫的現有mysql應用程序上訪問mysql cluster      管理客戶端:這類客戶端與管理服務器相連,並提供了啟動和停止節點,啟動和停止消息跟蹤,顯示節點版本和狀態,啟動和停止備份等命令.   以下是mysql cluster 架構示意圖:     由於Mysql Cluster采用的是TCP/IP方式連接,並且節點之間的數據傳輸沒有加密,最後使用單獨的子網裡.   下面來實施部署   為了方便 這裡我把管理節點,數據節點,sql節點放在一台機器上.   管理節點1 10.1.6.205     數據節點1 10.1.6.203      數據節點2 10.1.6.205   sql節點1   10.1.6.203    sql節點2   10.1.6.205    1.安裝(這裡安裝7.2.6版本)  

下載mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 二進制包(裡面包含ndb,mysql)

1
[email protected]:~# tar -C /usr/local -xzvf mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
2
[email protected]:/usr/local# ln -s /usr/local/mysql-cluster-gpl-7.2.8-linux2.6-i686 /usr/local/mysql
3
[email protected]:/usr/local# cd mysql
4
[email protected]:/usr/local/mysql# scripts/mysql_install_db --user=mysql
5
[email protected]:/usr/local/mysql# chown -R mysql:mysql /usr/local/mysql
同理10.1.6.203
2.配置SQL節點和存儲NDB節點

01
[email protected]:/usr/local/mysql# vim /etc/my.cnf
02
[mysqld]
03
basedir=/usr/local/mysql/
04
datadir=/usr/local/mysql/data/
05
user=mysql
06
port=3306
07
socket=/tmp/mysql.sock
08

09
ndbcluster
10
max_connect_errors=10000
11
ndb-connectstring=10.1.6.205
12
connect_timeout = 300
13

14
[mysql_cluster]
15
ndb-connectstring=10.1.6.205
同理10.1.6.203
3.配置管理節點

01
[email protected]:/usr/local/mysql# vim /opt/cluster/config.ini
02
[ndbd default]
03
NoOfReplicas=2   
04
DataMemory=80M    #分配data storage使用的內存   每個ndb占用
05
IndexMemory=18M   #分配index storage使用的內存  每個ndb占用
06

07
[tcp default]
08
portnumber=2205  #ndb監聽端口
09

10
#設置管理節點
11
[ndb_mgmd]
12
NodeId=1
13
hostname=10.1.6.205
14
datadir=/opt/cluster  #在MGM上保存日志的目錄
15

16
#設置存儲節點NDB1
17
[ndbd]
18
NodeId=2
19
hostname=10.1.6.203
20
datadir=/usr/local/mysql/data
21

22
#設置存儲節點NDB2
23
[ndbd]
24
NodeId=3
25
hostname=10.1.6.205
26
datadir=/usr/local/mysql/data
27

28
#設置SQL節點1
29
[mysqld]
30
NodeId=4
31
hostname=10.1.6.203
32

33
#設置SQL節點2
34
[mysqld]
35
NodeId=5
36
hostname=10.1.6.205
37
[mysqld]    #運行任意ip連接
38
[mysqld]
4.啟動mysql cluster

1)先啟動管理節點服務器.2)啟動NDB存儲節點服務器.3)啟動SQL節點服務器.

1)執行啟動MGM節點進程

1
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/ndb_mgmd -f /opt/cluster/config.ini
2
MySQL Cluster Management Server mysql-5.5.22 ndb-7.2.6
必須用參數-f或--config-file告訴ndb_mgm配置文件config.ini文件所在的位置.
2)在2台存儲節點服務器上,如果是第一次啟動NDB進程的話,必須先執行以下命令:

1
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/ndbd  --initial
2
2013-08-28 23:40:36 [ndbd] INFO     -- Angel connected to '10.1.6.205:1186'
3
2013-08-28 23:40:36 [ndbd] INFO     -- Angel allocated nodeid: 2

 

注意:僅在首次啟動NDB時,或者在備份/恢復或配置文件發生變化且重啟NDB時才使用-initial參數.因為該參數會使節點刪除由早期NDB實例創建的,用於恢復的任何文件,包括用於恢復的日志文件. 如果不是第一次啟動,用以下命令  
1
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/ndbd
3)啟動SQL節點服務器
1
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/mysqld_safe /etc/my.cnf &
5.查看各個節點情況

01
[email protected]:/usr/local/mysql# /usr/local/mysql/bin/ndb_mgm
02
-- NDB Cluster -- Management Client --
03
ndb_mgm> show
04
Cluster Configuration
05
---------------------
06
[ndbd(NDB)] 2 node(s)
07
id=2    @10.1.6.203  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 0, Master)
08
id=3    @10.1.6.205  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 0)
09

10
[ndb_mgmd(MGM)] 1 node(s)
11
id=1    @10.1.6.205  (mysql-5.5.22 ndb-7.2.6)
12

13
[mysqld(API)]   4 node(s)
14
id=4    @10.1.6.203  (mysql-5.5.22 ndb-7.2.6)
15
id=5    @10.1.6.205  (mysql-5.5.22 ndb-7.2.6)
16
id=6 (not connected, accepting connect from any host)
17
id=7 (not connected, accepting connect from any host)
18

19
ndb_mgm>

 

  6.測試   注意:與沒有使用Cluster的Mysql相比,在mysql cluster內操作數據的方式沒有太大的區別.操作時注意   1)表必須用engine=NDB或engine=NDBCLUSTER選項創建   2)每個NDB表必須有一個主鍵.如果在創建表時用戶未定義主鍵,NDB Cluster存儲引擎會自動生成隱含的主鍵.   該隱含鍵也將占用空間,就像任何其他的表索引一樣.由於沒有足夠的內存來容納這些自動創建的鍵,所以很容易出現問題.   在203 sql節點1上創建表  
01
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/mysql -uroot -p
02
mysql> use test;
03
mysql> create table dave (num int(10)) engine=ndb;
04
mysql> show create table dave\G;
05
*************************** 1. row ***************************
06
       Table: dave
07
Create Table: CREATE TABLE `dave` (
08
  `num` int(10) DEFAULT NULL
09
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
10
1 row in set (0.00 sec)
11

12
mysql> insert into dave
13
    -> values
14
    -> (100);
15
Query OK, 1 row affected (0.01 sec)
16
mysql> select * from dave;
17
+------+
18
| num  |
19
+------+
20
|  100 |
21
+------+
然後在205 sql節點2上查看該表
1
[email protected]:/usr/local/mysql# /usr/local/mysql/bin/mysql -uroot -p
2
mysql> use test
3
mysql> select * from dave;
4
+------+
5
| num  |
6
+------+
7
|  100 |
8
+------+
測試OK

關注一下表

1
mysql> select * from ndbinfo.memoryusage;
2
+---------+--------------+--------+------------+----------+-------------+
3
| node_id | memory_type  | used   | used_pages | total    | total_pages |
4
+---------+--------------+--------+------------+----------+-------------+
5
|       2 | Data memory  | 851968 |         26 | 83886080 |        2560 |
6
|       2 | Index memory | 212992 |         26 | 19136512 |        2336 |
7
|       3 | Data memory  | 851968 |         26 | 83886080 |        2560 |
8
|       3 | Index memory | 212992 |         26 | 19136512 |        2336 |
注意:使用量寫滿會訪問不了,這時需要調整配置DataMemory,IndexMemory參數.各配置文件都需調整重啟生效.


7.關閉cluster

1
[email protected]:/usr/local/mysql/bin#  /usr/local/mysql/bin/ndb_mgm -e shutdown
2
Connected to Management Server at: 10.1.6.205:1186
3
3 NDB Cluster node(s) have shutdown.
4
Disconnecting to allow management server to shutdown.
再關閉SQL節點mysqld服務


1
[email protected]:/usr/local/mysql/bin# /usr/local/mysql/bin/mysqladmin -uroot -p shutdown
2
Enter password:
3
130829 02:19:57 mysqld_safe mysqld from pid file /usr/local/mysql/data//debian.pid ended
4
[1]+  Done                    /usr/local/mysql/bin/mysqld_safe /etc/my.cnf

 

  以上就是mysql cluster初步部署, 之後會寫haproxy+keepalive 雙機高可用.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved