Chinaunix首页 | 论坛 | 博客
  • 博客访问: 272073
  • 博文数量: 188
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -30
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-29 11:17
文章分类
文章存档

2013年(8)

2012年(5)

2011年(13)

2010年(26)

2009年(63)

2008年(20)

2007年(32)

2006年(21)

分类: LINUX

2009-08-20 18:14:23

 

   一、概述

         MySQL是一种技术,该技术允许在无共享的系统中部署内存中数据库的簇。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。

         MySQL簇将标准的MySQL服务器与名为NDB内存中簇式存储引擎集成了起来。在我们的文档中,术语NDB指的是与存储引擎相关的设置部分,而术语MySQL指的是MySQLNDB存储引擎的组合。

          MySQL簇由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB簇的数据节点,管理服务器,以及(可能)专门的数据访问程序。

通过将MySQL簇引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性能和可缩放性的簇数据管理。

   二、名词解释

             NDB:是一种内存中存储引擎,它具有可用性高和数据一致性好的特点。

     管理(MGM)节点:这类节点的作用是管理MySQL簇内的其他节点,如提供配置数据、启动并停止节 

      点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。 

           MGM节点是用命令ndb_mgmd启动的。

     数据节点:这类节点用于保存簇的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对

     于两个副本,每个副本有两个片段,那么就有4个数据节点。没有必要有一个以上的副本。数据节点是用

      命令ndbd启动的。

           SQL节点:这是用来访问簇数据的节点。对于MySQL簇,客户端节点是使用NDB簇存储引擎的传统

           MySQL服务器。典型情况下,SQL节点是使用命令mysqld –ndbcluster启动的,或将ndbcluster添加到

           my.cnf后使用mysqld启动。

     标准MySQL客户端:对于MySQL簇,它们与标准的(非簇类)MySQL没有区别。换句话讲,能够从

      用 PHPPerlCC++JavaPythonRuby等编写的现有MySQL应用程序访问MySQL簇。

     管理客户端:这类客户端与管理服务器相连,并提供了优雅地启动和停止节点、启动和停止消息跟踪

     (仅对调试版本)、显示节点版本和状态、启动和停止备份等的命令。 

 

    这篇文档旨在介绍如何安装配置基于2台服务器的MySQL集群。并且实现任意一台服务器出现问题或宕机

    时MySQL依然能够继续运行。

 

三、集群配置

 

环境

Server1: Test5       192.168.30.88      管理(MGM)节点

 Server2: Redhat51 192.168.31.76       MySQL集群的服务器

 Server3: Redhat52 192.168.31.73      MySQL集群的服务器

 

1.       Server1Server2上安装MySQL

下载软件

注意:多数文档都说下载MySQL-max,但是在超过5.1版本中只提供了mysql-cluster 效果应该一样。

以下步骤需要在Server2Server3上各做一次

 # mv mysql-max-4.1.9-pc-linux-gnu-i686.tar.gz /usr/local/

 # cd /usr/local/

 # groupadd mysql

 # useradd -g mysql mysql

 # tar -zxvf mysql-cluster-gpl-7.0.6-linux-i686-glibc23.tar.gz

 # mv mysql-cluster-gpl-7.0.6-linux-i686-glibc23 mysql

 # cd mysql

 # scripts/mysql_install_db --user=mysql

 # chown -R root  .

 # chown -R mysql data

 # chgrp -R mysql .

 # cp support-files/mysql.server /etc/rc.d/init.d/mysqld

 # chmod +x /etc/rc.d/init.d/mysqld

 # chkconfig --add mysqld

# mysqladmin –u root  password “root123”         ;设置数据库密码

# rm   mysql-cluster-gpl-7.0.6-linux-i686-glibc23.tar.gz

此时不要启动MySQL

2.       安装并配置管理节点服务器(Server1)

2.1     作为管理节点服务器,Server1需要ndb_mgmndb_mgmd两个文件:

server2server3服务器中Copy一份。

# scp /usr/bin

 

2.2     现在开始为这台管理节点服务器建立配置文件:

# mkdir /var/lib/mysql-cluster

   # cd /var/lib/mysql-cluster

   # vi config.iniconfig.ini中添加如下内容:

 

[NDBD DEFAULT]

NoOfReplicas=2       # Number of replicas

DataMemory=80M       # How much memory to allocate for data storage

IndexMemory=18M      # 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.

 

[MYSQLD DEFAULT]

[NDB_MGMD DEFAULT]

[TCP DEFAULT]

# Managment Server

[NDB_MGMD]

HostName=192.168.30.88                     #管理节点服务器Server3IP地址

Datadir=/var/lib/mysql-cluster  # Directory for MGM node logfiles

# Storage Engines

[NDBD]

HostName=192.168.31.76              #MySQL集群Server1IP地址

DataDir= /usr/local/mysql/data

[NDBD]

HostName=192.168.31.73             #MySQL集群Server2IP地址

DataDir=/usr/local/mysql/data

# 以下2[MYSQLD]

[MYSQLD]

HostName=192.168.31.73

[MYSQLD]

HostName=192.168.31.76

 

2.3     保存退出后,启动管理节点服务器Server1

     # ndb_mgmd

   启动管理节点后应该注意,这只是管理节点服务,并不是管理终端。因而你看不到任何关于启动后的输出信息。

 

3.       配置集群服务器并启动MySQL

3.1     Server1Server2中都需要进行如下改动:

 

 # vi /etc/my.cnf

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

datadir = /usr/local/mysql/data

basedir = /usr/local/mysql

ndbcluster

ndb-connectstring=192.168.30.88

[MYSQL_CLUSTER]

ndb-connectstring=192.168.30.88

 

3.2     保存退出后启动MySQL并设置服务自启动:

 # /usr/local/mysql/bin/ndbd –initial

注意:只有在第一次启动ndbd时或者对Server1config.ini进行改动后才需要使用--initial参数

# /etc/rc.d/init.d/mysqld start

可以把/usr/local/mysql/bin/ndbd加到/etc/rc.local中实现开机启动。

 

4.       检查工作状态

4.1     回到管理节点服务器Server1上,并启动管理终端:

 # /usr/bin/ndb_mgm

键入show命令查看当前工作状态:(下面是一个状态输出示例)

[root@test5 mysql]# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

---------------------

[ndbd(NDB)]     2 node(s)

id=2    @192.168.31.76  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)

id=3    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0)

 

[ndb_mgmd(MGM)] 1 node(s)

id=1    @192.168.30.88  (mysql-5.1.34 ndb-7.0.6)

 

[mysqld(API)]   2 node(s)

id=4    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6)

id=5    @192.168.31.76  (mysql-5.1.34 ndb-7.0.6)

 

ndb_mgm>

如果上面没有问题,现在开始测试MySQL

  

4.2     Server2中:

mysql> use test;
Database changed
mysql> select * from ctest;
+------------+
| i          |
+------------+
|          1 |
|          3 |
| 2147483647 |
| 2147483647 |
|          1 |
|       4444 |
+------------+
6 rows in set (0.01 sec)

mysql>


如果上述正常,则换到
Server3上重复上面的测试,观察效果。如果成功,则在Server3中执行INSERT再换回到Server2观察是否工作正常。 如果都没有问题,那么恭喜成功!

 

5.       破坏性测试

5.1     Server2的网线拔掉,观察另外一台集群服务器工作是否正常(可以使用SELECT查询测试)。测试完毕后,重新插入网线即可。

之后在另一台集群服务器上使用SELECT查询测试。并且在管理节点服务器的管理终端中执行show命令会看到被破坏的那台服务器的状态。

 

 ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.31.76)
id=3    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.30.88  (mysql-5.1.34 ndb-7.0.6)

[mysqld(API)]   2 node(s)
id=4    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6)
id=5 (not connected, accepting connect from 192.168.31.76)

ndb_mgm>

 

5.2     server3上插入一条记录  INSERT INTO ctest () VALUES (2222222);

mysql> use test;
Database changed
mysql> INSERT INTO ctest () VALUES (2222222);
Query OK, 1 row affected (0.01 sec)

mysql>  SELECT * FROM ctest;
+------------+
| i          |
+------------+
|          1 |
|       4444 |
|    2222222 |
|          1 |
|          3 |
| 2147483647 |
| 2147483647 |
+------------+
7 rows in set (0.01 sec)

mysql>


 

5.3     启动server2,查询结果正常。

     mysql> use test;
     Database changed
     mysql> select * from ctest;
    +------------+
    | i          |
    +------------+
    |          1 |
    |       4444 |
    |    2222222 |
    |          1 |
    |          3 |
    | 2147483647 |
    | 2147483647 |
    +------------+
   7 rows in set (0.02 sec)

   mysql>


 

5.4      server1的管理控制台上可以看到服务已正常

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.31.76)
id=3    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6, Nodegroup: 0, Master)

     [ndb_mgmd(MGM)] 1 node(s)
     id=1    @192.168.30.88  (mysql-5.1.34 ndb-7.0.6)

     [mysqld(API)]   2 node(s)
     id=4    @192.168.31.73  (mysql-5.1.34 ndb-7.0.6)
     id=5    @192.168.31.76  (mysql-5.1.34 ndb-7.0.6)

ndb_mgm>

5.5  测试完成后,只需要重新启动被破坏服务器的ndbd进程即可:

      # ndbd

  注意!前面说过了,此时是不用加--inital参数的!

  至此,MySQL集群就配置完成了!

 

  取自

http://dev.mysql.com/doc/refman/5.1/zh/ndbcluster.html

http://kb.discuz.net/index.php?title=MySQL-Cluster%E9%9B%86%E7%BE%A4%E7%A0%94%E7%A9%B6

 

阅读(1517) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~