Mysql Cluster概述与部署

页面导航:首页 > 数据库 > Mysql > Mysql Cluster概述与部署

Mysql Cluster概述与部署

来源: 作者: 时间:2016-02-05 10:57 【

Mysql Cluster概述与部署 MySql Cluster最显著的优点就是高可用性,高实时性,高冗余,扩展性强。 它允许在无共享的系统中部署内存中数据库的Cluster.通过无共享体系结构,系统能够使用廉价的硬
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版本)
 
-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz 二进制包(里面包含ndb,mysql)

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

01
:/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
:/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
#设置存储节点N
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
:/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
:/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
:/usr/local/mysql/bin# /usr/local/mysql/bin/ndbd
3)启动SQL节点服务器
1
:/usr/local/mysql/bin# /usr/local/mysql/bin/mysqld_safe /etc/my.cnf &
5.查看各个节点情况

01
:/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
:/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
:/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
:/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
:/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 双机高可用.
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<