ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MySQL Cluster配置step by step

MySQL Cluster配置step by step

原创 Linux操作系统 作者:viadeazhu 时间:2009-11-28 19:42:57 1 删除 编辑

    公司有个项目是测试distributed DB,其中一项是针对MySQL Cluster的测试。

于是花了两天时间装机器和配置MySQL Cluster。整个过程还是比较顺利的,当然如果对MySQL常用命令比较熟悉的话会更顺利。

留下step by step配置方案,以防忘记。

    MySQL Cluster是一种share nothing的机制,跟Oracle的RAC需要共享存储方案是不一样的。

    他包含三种节点(node):

Data node:用来存放数据的节点,数据类型是NDB Cluster,放在该节点的内存里。

SQL  node:mysql服务器/客户端节点。

MGM node:管理节点,纵观全局的一个配置节点。

    所谓的节点,其实也就是相应的进程而已,所以我们可以将不同节点放在同一个机器上。所以理论上,我们只需要一台物理机器就可以玩MySQL Cluster了。

稍微了解了一点理论知识,就可以轻松配置好一个Cluster环境,但其他知识需要在以后的运维和测试过程中自己发掘。MySQL也是一个很庞大的知识体系,不逊于Oracle。

接下来Step by Step讲解如何配置MySQL Cluster,即使你只有0基础,相信也能够很轻松的配置。

 

1.    准备硬件资源

我拿到了四台普通PC机作为测试机,并全部装好RedHat EL5操作系统。

四台机器全部通过DHCP获得4个外部IP地址。但为了节点之间内部稳定,又给每台机器设定了一个子网静态IP地址,节点之间的通信就可以通过这个静态地址联系了。

这四台机器hostname取名为mysql1/2/3/4,静态地址为:

 mysql1  192.168.123.1
 mysql2  192.168.123.2
 mysql3  192.168.123.3
 mysql4  192.168.123.4

2.    部署节点

我们采用1个MGM node,2个SQL node,2个data node的分布方式。

其中由于资源限制,MGM node和一个SQL node部署在同一台机器上。

部署如下:

 节点类型  所在物理机器
 MGM node  mysql4
 SQL node 1  mysql3
 SQL node 2  mysql4
 Data node 1  mysql1
 Data node 2  mysql2

3.    安装MySQL软件

在所有节点上安装mysql-5.0.88-linux-i686-icc-glibc23.tar.gz

下载地址:

http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.88-linux-i686-icc-glibc23.tar.gz/from/pick#mirrors

直接gunzip and tar -xvf解压就可以用了。 

我们解压后放在/home/oracle/mysql

4.    建立OS user用来run mysql

在这里我们使用oracle用户(oracle组)。

5.    MGM node的配置和启动

登入mysql4 as oracle user。

cd /home/oracle/mysql

mkdir mgmdata

建立全局配置文件mgmd.cnf,内容为:(只需特别注意红色部分的配置)

 

# Options affecting ndbd processes on all data nodes:  
[NDBD DEFAULT]      
NoOfReplicas=1    # Number of replicas  
DataMemory=500M    # How much memory to allocate for data storage  
IndexMemory=100M   # How much memory to allocate for index storage  
                   # For DataMemory and IndexMemory, we have used the  
                   # default values. Since the "world" database takes up  
                   # only about 500KB, this should be more than enough for 
                   # this example Cluster setup.  
# TCP/IP options:  
[TCP DEFAULT]       
portnumber=2222   # 各个节点之间通信的端口号
 
# Management process options:  
[NDB_MGMD]                        
hostname=192.168.123.4              # MGM node的IP
datadir=/home/oracle/mysql/mgmdata  # MGM node的日志地址 
PortNumber=2001                     #MGM node使用的端口号

 
# Options for data node "A":  
[NDBD]                            
                                     # (one [NDBD] section per data node)  
hostname=192.168.123.1               # Data node 1的IP
datadir=/home/oracle/mysql/ndbdata   #Data node 1存放数据的地址

 
# Options for data node "B":  
[NDBD]                            
hostname=192.168.123.2               # Data node 2的IP
datadir=/home/oracle/mysql/ndbdata   # Data node 2存放数据的地址

 
[MYSQLD]                          
hostname=192.168.123.3          # SQL node 1的IP                  
hostname=192.168.123.4          # SQL node 2的IP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

启动MGM node:

ndb_mgmd -f mgmd.cnf

ps -ef|grep mgmd|grep -v grep查看MGM node 进程是否已经起来。

[oracle@mysql4 mysql]$ ps -ef|grep mgmd|grep -v grep
oracle   22939     1  0 Nov27 ?        00:00:00 ndb_mgmd -f mgmd.cnf

再登入MGM控制台(ndb_mgm 192.168.123.4 2001),用show命令查看各个节点的状态。

(以下结果是所有配置完全后的状态,刚配好MGM node后应该看到所有其他节点都是not connected)

[oracle@mysql4 mysql]$ ndb_mgm 192.168.123.4 2001
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.123.4:2001
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.123.1  (Version: 5.0.88, Nodegroup: 0, Master)
id=3    @192.168.123.2  (Version: 5.0.88, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.123.4  (Version: 5.0.88)

[mysqld(API)]   2 node(s)
id=4    @192.168.123.3  (Version: 5.0.88)
id=5    @192.168.123.4  (Version: 5.0.88)

6.    Data node的配置和启动。

登入mysql1和mysql2 as oracle user。

cd /home/oracle/mysql

mkdir ndbdata

以下以配置Data node 1为例:

建立ndbd1.cnf文件,内容为:(只需特别注意红色部分的配置)

[mysqld]  
DataDir=/home/oracle/mysql/ndbdata 
skip-locking   

 
ndbcluster  
ndb-connectstring=192.168.123.4:2001  #MGM节点IP地址和端口号
[mysql_cluster]  
ndb-connectstring=192.168.123.4:2001  #MGM节点IP地址和端口号

 

 

 

 

 

启动Data node 1:

ndbd --defaults-file=ndbd1.cnf --initial
(注意:--initial只需在第一次启动时加该参数)

查看ndb进程启动了:

[oracle@mysql1 mysql]$ ps -ef|grep ndb|grep -v grep
oracle    5864     1  0 Nov27 ?        00:00:00 ndbd --defaults-file=ndbd1.cnf
oracle    5865  5864  0 Nov27 ?        00:03:51 ndbd --defaults-file=ndbd1.cnf

并且在MGM node的控制台中show命令可以看到Data node不再是not connected状态了


同理配置Data node 2.

7.    SQL node的配置和启动。

登入mysql3和mysql4 as oracle user。

以配置SQL node 1为例。

cd /home/oracle/mysql

mkdir data1

建立my.cnf,内容为:

[client]
port = 3001
socket = /home/oracle/mysql/data1/mysql1.sock
default-character-set=utf8
[mysqld]  
 
port            = 3001  #这里我使用3001端口跑MySQL server进程
socket          = /home/oracle/mysql/data1/mysql1.sock  
datadir         = /home/oracle/mysql/data1  
ndbcluster                            # run NDB engine  
ndb-connectstring=192.168.123.4:2001  # MGM node的IP和端口
  

 

 

 

 

 

 

建立一个新库:

scripts/mysql_install_db  --datadir=/home/oracle/mysql/data1
启动MySQL Server:

mysqld_safe &

同理配置和启动SQL node 2。

当一切都顺利完工后,登入MGM node,确保所有的节点都连接上:

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.123.1  (Version: 5.0.88, Nodegroup: 0, Master)
id=3    @192.168.123.2  (Version: 5.0.88, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.123.4  (Version: 5.0.88)

[mysqld(API)]   2 node(s)
id=4    @192.168.123.3  (Version: 5.0.88)
id=5    @192.168.123.4  (Version: 5.0.88)

8.    建个表测试一下:

在SQL node 1上建个表:

create table testbyhao(
id mediumint unsigned not null auto_increment primary key,
name varchar(20) not null default ''
) engine = ndbcluster default charset utf8;

insert into testbyhao values(1, '11');
insert into testbyhao values(2, '22');

在SQL node 2上能看到此表即可。

 

至此,一个简单的MySQL Cluster环境就搭建成功了。

有几点需要记住:

1.启动各个节点的顺序永远是:MGM node,Data Node,SQL node。

2.engine=ndbcluster或者engine=ndb的表才能使用Data node所存储。其他engine即放在SQL node本地,就像单机版一样。

3.多个节点放在一台机器上时,需要给每个节点分配不同端口号以此区分。

(以后奉上其他MySQL Cluster知识点。)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15415488/viewspace-620903/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Tanel's blog
请登录后发表评论 登录
全部评论

注册时间:2008-08-22

  • 博文量
    79
  • 访问量
    392350