mysql cluster搭建

  1. 云栖社区>
  2. 博客>
  3. 正文

mysql cluster搭建

白及88 2016-02-24 13:35:00 浏览3999
展开阅读全文


安装要求

  • 安装环境:CentOS-6.4
  • 安装方式:源码编译安装
  • 软件名称:mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
  • 软件安装位置:/usr/local/mysql
  • 数据存放位置:/var/mysql/data
  • 日志存放位置:/var/mysql/logs

集群设计

首先设计集群的安装分配方式,我共需要5台服务器,服务器分配如下:

  • 管理节点:    172.16.172.133
  • sql节点1:    172.16.172.132
  • sql节点2:    172.16.172.134
  • 数据节点1:   172.16.172.130
  • 数据节点2:   172.16.172.131

设备的连接方式如


注意:目前这种设计存在的问题是管理节点是单点的。

管理节点

管理节点安装

安装管理节点(172.16.172.133)

[root@localhost /]# groupadd mysql[root@localhost /]#  useradd mysql -g mysql[root@localhost /]# cd /usr/local[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql[root@localhost local]# chown -R mysql:mysql mysql[root@localhost local]# cd mysql[root@localhost mysql]# scripts/mysql_install_db –user=mysql

管理节点配置

[root@localhost ~]#  mkdir /var/lib/mysql-cluster[root@localhost ~]# cd /var/lib/mysql-cluster[root@localhost mysql-cluster]# vi + /var/lib/mysql-cluster/config.ini

在config.ini 中添加以下内容:

[NDBD DEFAULT]NoOfReplicas=1[TCP DEFAULT]portnumber=3306 [NDB_MGMD]#设置管理节点服务器HostName=172.16.172.133DataDir=/var/mysql/data[NDBD]#设置存储节点服务器(NDB节点)HostName=172.16.172.130DataDir=/var/mysql/data[NDBD]#第二个NDB节点HostName=172.16.172.131DataDir=/var/mysql/data[MYSQLD]#设置SQL节点服务器 HostName=172.16.172.132[MYSQLD]#第二个SQL节点 HostName=172.16.172.134

管理节点启动

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini[root@localhost ~]# mkdir /var/mysql/logs[root@localhost ~]# netstat -lntpu

看到tcp 0 0 0.0.0.0:1186开放说明启动正常
开启管理节点服务器的1186端口

管理节点检验

执行以下操作:

[root@localhost /]# ndb_mgm     // 管理节点 -- NDB Cluster -- Management Client -- ndb_mgm> showConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)]     2 node(s)id=2 (not connected, accepting connect from 172.16.172.130)id=3 (not connected, accepting connect from 172.16.172.131)[ndb_mgmd(MGM)] 1 node(s)id=1    @192.168.15.231  (mysql-5.5.22 ndb-7.2.6)[mysqld(API)]   2 node(s)id=4 (not connected, accepting connect from 172.16.172.132)id=5 (not connected, accepting connect from 172.16.172.134)

管理节点关闭

[root@localhost /]# /usr/local/mysql/bin/ndb_mgm -e shutdown#成功后终端打印出以下信息Connected to Management Server at: 172.16.172.133:11863 NDB Cluster node(s) have shutdown.Disconnecting to allow management server to shutdown.

数据节点

数据节点安装

数据节点1: 172.16.172.130
数据节点2: 172.16.172.131

[root@localhost /]# groupadd mysql[root@localhost /]# useradd mysql -g mysql[root@localhost /]# cd /usr/local[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql[root@localhost local]# chown -R mysql:mysql mysql[root@localhost local]# cd mysql[root@localhost mysql]# scripts/mysql_install_db --user=mysql[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

数据节点配置

对数据节点进行配置,执行以下操作:

[root@localhost mysql]# mkdir /var/mysql/data[root@localhost mysql]# mkdir /var/mysql/logs[root@localhost mysql]# vi /etc/my.cnf

向文件追加以下内容:

[MYSQLD]ndbclusterndb-connectstring=172.16.172.133[MYSQL_CLUSTER]ndb-connectstring=172.16.172.133[NDB_MGM]connect-string=172.16.172.133

数据节点启动

启动此处时,管理节点服务器防火墙必须开启1186,3306端口。
注意:只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!
第一次启动如下:

[root@localhost mysql]# /usr/local/mysql/bin/ndbd --initial2013-01-30 13:43:53 [ndbd] INFO     -- Angel connected to '172.16.172.133:1186'2013-01-30 13:43:53 [ndbd] INFO     -- Angel allocated nodeid: 2

正常启动方式:

[root@localhost mysql]# /usr/local/mysql/bin/ndbd

数据节点关闭

[root@localhost /]# /etc/rc.d/init.d/mysqld stop

或者

[root@localhost mysql]# /etc/init.d/mysql stopShutting down MySQL.. SUCCESS!/usr/local/mysql/bin/mysqladmin -uroot shutdown

SQL节点安装

SQL节点安装

SQL节点和存储节点(NDB节点)安装相同,都执行以下操作;
sql节点1: 172.16.172.132
sql节点2: 172.16.172.134

SQL节点配置

[root@localhost /]# groupadd mysql[root@localhost /]# useradd mysql -g mysql[root@localhost /]# cd /usr/local[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql[root@localhost local]# chown -R mysql:mysql mysql[root@localhost local]# cd mysql[root@localhost mysql]# scripts/mysql_install_db --user=mysql[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

执行以下操作:

[root@localhost mysql]# mkdir /var/mysql/data     //创建存储数据的文件夹[root@localhost mysql]# mkdir /var/mysql/logs     //创建存储日志的文件夹[root@localhost mysql]# vi /usr/local/mysql/my.cnf  //修改配置文件

追加以下内容:

[MYSQLD]ndbclusterndb-connectstring=172.16.172.133[MYSQL_CLUSTER]ndb-connectstring=172.16.172.133[NDB_MGM]connect-string=172.16.172.133

SQL节点启动

执行以下操作:

[root@localhost mysql]# service mysqld startStarting MySQL.. SUCCESS!

SQL节点关闭

最直接的方式:

[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -uroot shutdown[root@localhost /]# /etc/rc.d/init.d/mysqld stop

或者

[root@localhost mysql]# /etc/init.d/mysql stopShutting down MySQL.. SUCCESS!

功能测试

在管理节点(172.16.172.133)上查看服务状态

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgm-- NDB Cluster -- Management Client --ndb_mgm> showCluster Configuration ---------------------[ndbd(NDB)]     2 node(s)id=2    @172.16.172.130  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 0, Master)id=3    @172.16.172.131  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 1)   [ndb_mgmd(MGM)] 1 node(s)id=1    @172.16.172.133  (mysql-5.5.22 ndb-7.2.6)   [mysqld(API)]   2 node(s)id=4    @172.16.172.132  (mysql-5.5.22 ndb-7.2.6)id=5    @172.16.172.134  (mysql-5.5.22 ndb-7.2.6)

可以看到这里的数据节点、管理节点、sql节点都是正常的。
注意:

  1. 在建表的时候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群存储引擎,或用ALTER TABLE选项更改表的存储引擎。
  2. NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。
  3. Sql节点的用户权限表仍然采用MYISAM存储引擎保存的,所以在一个Sql节点创建的MySql用户只能访问这个节点,如果要用同样的用户访 问别的Sql节点,需要在对应的Sql节点追加用户。虽然在MySql Cluster7.2版本开始提供了”用户权限共享”。

数据同步性测试

在一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步。

第1步:

SQL节点1(172.16.172.132)上增加数据:

SQL节点1(172.16.172.132)上增加数据:[root@localhost mysql]#  /etc/rc.d/init.d/mysqld status                //检验mysql是否运行[root@localhost mysql]# /etc/rc.d/init.d/mysqld start                   //启动mysql[root@localhost mysql]# /usr/local/mysql/bin/mysql -u root -pEnter password:mysql> show databases;mysql> create database testdb2;mysql> use testdb2;mysql> CREATE TABLE td_test2 (i INT) ENGINE=NDB;//这里必须指定数据库表的引擎为NDBCLUSTER,与配置文件中的名称相同mysql> INSERT INTO td_test2() VALUES (1);mysql> INSERT INTO td_test2() VALUES (152);mysql> SELECT * FROM td_test2;

第2步:

进入到SQL节点2(172.16.172.134)上查看数据

mysql> use testdb2;Database changedmysql> SELECT * FROM td_test2;+------+| i    |+------+|  126 ||    1 |+------+2 rows in set (0.01 sec)

查看表的引擎是不是NDB:

mysql> show create table td_test2;

第3步:

反向测试,SQL节点2(172.16.172.134)上增加数据:

mysql> create database bb;mysql> use bb;mysql> CREATE TABLE td_test3 (i INT) ENGINE=NDB;mysql> INSERT INTO td_test3 () VALUES (98);mysql> SELECT * FROM td_test3;

SQL节点1(172.16.172.132)上查看数据:

mysql>  use bb;Database changedmysql>  SELECT * FROM td_test3;+------+| i    |+------+|   98 |+------+1 row in set (0.00 sec)

关闭集群

先关闭管理节点,然后关闭SQL节点和数据节点。

集群启动操作顺序

要再次启动集群,按照以下顺序执行:
管理节点 ->数据节点 –> SQL节点

注意:此次启动数据节点时不要加”–initial”参数。


MySQL双主 + Keepalived主备自动切换方案一

MySQL双主 + Keepalived主备自动切换方案二

MySQL主从 + Keepalived主从自动切换方案

MySQL双主 + 多从高可用方案---MMM

MySQL + Pecemaker(Heartbeat) + DRBD主高可用

MySQL + RHCS 高可用方案

MySQL + Cluser 集群架构

Percona Xtradb Cluster 集群高可用性解决方案

管理节点 

172.16.14.145 mgm1 

172.16.14.150  mgm2

172.16.14.146 ndb1

172.16.14.147 ndb2

172.16.14.148  sql1

172.16.14.149 sql2

集群配置概述:

安装版本:mysql cluster 7.3.5

操作系统 :centos6.5(X64)

软件名称 

管理节点IP

数据节点

SQL节点IP:

数据节点

SQL节点IP:

配置ssh等效不要密码登录

配置hosts解析

配置本地yum源 6.5

安装依赖包:yum install -y glibc perl libaio-devel

x32位系统要安装兼容库组:yum -y groupinstall "Compatibility libraries"

1. mysql旧版本清除:

首先使用如下命令来清理之前操作系统自带的mysql安装:

yum -y remove mysql

然后使用如下命令:

rpm -qa | grep mysql*

对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:

rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

每个节点都要那么做

关闭 /etc/init.d/iptables stop 

/etc/init.d/ip6tables stop

chkconfig iptables off 

chkconfig ip6tables off

vim /etc/selinux/config 

SELINUX=disabled 

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

#SELINUXTYPE=targeted  注释掉这行 

软件安装位置:/opt/local/mysql

数据存放位置:/opt/mysql/data SQL节点存储数据的路径

日志存放位置:/opt/mysql/logs

/opt/local/cluster 管理集群时收集的集群信息的存放路径





http://www.cnblogs.com/wangyanhong/p/3324411.html


机器描述:

  192.168.100.1 : 管理节点

  192.168.100.2 : SQL节点1

  192.168.100.3 : SQL节点2

  192.168.100.4 : 数据节点1

  192.168.100.5 : 数据节点2

软件需求:Linux下64位MySQL:mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz

 

1、安装管理节点:192.168.100.1

(1)把mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/myql 下

(2)在mysql目录下创建文件夹:mkdir  /usr/local/myql/mysql-cluster

(3)在mysql目录下创建文件夹:mkdir  /usr/local/myql/cluster-conf

(4)编辑config.ini文件:vi /usr/local/mysql/cluster-conf/config.ini 内容如下:

[ndbd default] 
NoOfReplicas=2
DataMemory=200M
IndexMemory=100M

[ndb_mgmd]
id=1
hostname=192.168.100.1
DataDir=/usr/local/mysql/mysql-cluster

[ndbd]
id=2
HostName=192.168.100.4
DataDir=/usr/local/mysql/ndbdata

[ndbd] 
id=5
HostName=192.168.100.5
DataDir=/usr/local/mysql/ndbdata

[mysqld]
id=6
HostName=192.168.100.2

[mysqld]
id=7
HostName=192.168.100.3

 

2、安装SQL节点  192.168.100.4 & 192.168.100.5

(1)把mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/myql 下

(2)添加mysql用户

  groupadd mysql

  useradd -g mysql mysql

(3)添加权限

  chown -R mysql:mysql /usr/local/mysql

(4)拷贝配置文件

  cp /usr/local/mysql/support-files/my-large.cnf   /etc/my.cnf 

(5)初始化数据库

  cd /usr/local/mysql

  scripts/mysql_install_db --user=mysql

(6)拷贝守护进程所需文件

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

(7)配置守护进程

  chkconfig –add mysqld

  chkconfig –level 35 mysqld on

(8)更改配置文件 vi /etc/my.cnf 内容如下:

  [mysqld]

  port = 3306

  socket = /tmp/mysql.sock

  ndbcluster

  ndb-connectstring=192.168.100.1  #管理节点的IP

 

3、安装数据节点

(1)把mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/mysql 下

(2)在mysql目录下创建文件:mkdir  /usr/local/mysql/ndbdata

(3)编辑my.cnf: vi /etc/my.cnf 在文件末尾添加如下内容:

  [mysql_cluster]

  ndb-connectstring=192.168.100.1  #管理节点IP

 

4、配置环境变量:

  #config mysql

  export MYSQL_HOME=/usr/local/mysql

  export PATH=$MYSQL_HOME/bin:$PATH

 

5、启动集群

启动顺序:管理服务器->存储节点->SQL节点

(1)启动管理节点

  rm mysql/mysql-cluster/ndb_1_config.bin.1  #如果config.ini有改动则要加上

  ndb_mgmd -f /usr/local/mysql/cluster-conf/config.ini

(2)启动存储节点

  ndbd --initial #(第一次启动必须添加选项)

  ndbd    #不是第一次启动需要执行的命令

(3)启动SQL节点

  /etc/rc.d/init.d/mysqld start 或 service mysqld start

 

6、关闭集群

(1)关闭SQL节点

  /etc/rc.d/init.d/mysqld stop 或service mysqld stop

(2)关闭管理节点

  ndb_mgm〉 shutdown

7、验证配置的正确性

  在管理节点执行:ndb_mgm -> show

8、创建表

创建表需要以 ndbcluster 作为存储引擎

CREATE TABLE `test`.`test` (

  `id`  VARCHAR(45) NOT NULL,

  `name`        VARCHAR(9),

  PRIMARY KEY (`id`)

)  ENGINE = ndbcluster;  

 

参考:http://www.cnblogs.com/bigshuai/archive/2012/02/29/2373865.html

 


8. 关闭集群服务

关闭sql节点等同于停止mysql服务,此时外界数据不将再进来。然后关闭管理节点

~/mysql/bin/ndb_mgm -e shutdownrm ~/mysql/mysql-cluster/ndb_1_config.bin.1 #不是必须的,如果config.ini有改动则要加上

这样操作后,管理节点和数据节点都将停止服务

Notes:

1:如果发现关闭一台机器的ndbd进程,另一台机器的ndbd的进程也关闭,则需要修改参数NoOfReplicas。2:./ndbd --initial 不能同时在所有数据节点机器上执行,如执行,会删除所有数据3:可以像操作非簇类型的数据库那样,操作mysqld节点4:每次修改config.ini文件,重启ndb_mgmd时,需要删除mysql-cluster文件下的ndb_1_config.bin.1文件,因为他默认调用此文件5:NDB 簇不支持自动发现数据库的功能,这点很重要,一旦在一个数据节点上创建了世界(world)数据库和它的表,在簇中的每个SQL节点上还需要发出命令 CREATE DATABASE world,后跟FLUSH TABLES。这样,节点就能识别数据库并读取其表定义。(在本版本MySQL Cluster 7.1.5下数据库也会自动同步的)6:如果在相关节点服务器启动时,注意查看~/mysql/mysql-cluster目录内的相关日志文件以获取错误信息.7:在管理节点的配置文件里各[mysqld],[ndbd]和[ndb_mgmd]配置的选项值顺序应该如下:[mysqld]Id=4HostName=192.168.208.3Id在顶端紧跟其后的是HostName,如果顺序错了,当SQL或数据节点连接管理节点时,管理节点无法正确的定位到其对应的节点配置上.因为无法定位到对应的节点配置,当没有剩余的[空节点]时,客户端节点启动时(./mysqld or ./ndbd)还会报:Configuration error: Error : Could not alloc node id at 192.168.0.231 port 1186: No freenode id found for mysqld(API).Failed to initialize consumers8:[空节点]是没有指定HostName选项的节点配置均为空节点,空节点可以用来动态配置一些动态IP的节点,一般管理节点的 配置文件要预留3个以上的空节点,因为备份时需要连接一个节点,如下:[mysqld]Id=6

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

体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。

The management (MGM) node

管理节点,用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用, 所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。

通过 ndb_mgmd 命令启动,使用 config.ini 配置文件

The storage or database (DB) node:

数据库节点,用来存储数据,可以和管理节点(MGM) , 用户端节点(API) 可以处在 不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。

通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。

例如: bin/ndbd –ndb-connectstring=ndb_mgmd.mysqlcluster.net –initial

The client (API) node:

客户端节点,通过他实现 cluster DB 的访问,这个节点也就是普通的 mysqld 进程, 需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。

通过 mysqld_safe 命令启动,

这3类节点可以分布在不同的主机上,比如 DB 可以是多台专用的服务器,也可以 每个DB都有一个API,当然也可以把API分布在Web前端的服务器上去,通常来说, API越多cluster的性能会越好。

Mysql集群探索与实践

1. 准备好3台机器,从官网下载最新的mysql集群版本,此处用到mysql-cluster-gpl-7.1.5.tar.gz源码包, 配置并安装,记得加上

–with-plugins=innobase,ndbcluster (innobase可选)

3台机器分别是192.168.207.153,192.168.208.3,192.168.208.9,具体分配如下

管理节点(ndb_mgmd):192.168.207.153

数据节点(ndbd): 192.168.208.3

数据节点(ndbd): 192.168.208.9

SQL节点(mysqld): 192.168.208.3

SQL节点(mysqld): 192.168.208.9

2. 在mysql目录下新建mysql-cluster文件夹,切换到mysql-cluster,新建config.ini

[NDBD DEFAULT]NoOfReplicas=2       #备份,副本,这样的话2台数据节点的数据就会同步DataMemory=200MIndexMemory=100M[TCP DEFAULT]portnumber=2202[NDB_MGMD]   #管理节点id=1hostname=192.168.207.153datadir=/home/taozi/mysql/mysql-cluster[NDBD]    #数据节点id=2hostname=192.168.208.3datadir=/home/taozi/mysql/data[NDBD]   #数据节点id=3hostname=192.168.208.9datadir=/home/taozi/mysql/data[MySQLD]   #sql节点id=4hostname=192.168.208.3[MySQLD]    #sql节点id=5hostname=192.168.208.9[MySQLD]     #sql节点id=6

3. 在管理节点服务器上启动管理节点服务 (如果不存在ndb_mgmd那么要从libexec下面复制过来)

~/mysql/bin/ndb_mgmd -f ~/mysql/mysql-cluster/config.ini

4. 进入2台数据节点服务器,分别启动数据节点服务

~/mysql/bin/ndbd     (第一次启动使用  ~/mysql/bin/ndbd --initial)

5. 最后分别进入sql节点服务器,修改my.cnf,加入

[MYSQL_CLUSTER]ndb-connectstring=192.168.207.153[MYSQLD]ndbclusterndb-connectstring=192.168.207.153

启动mysql服务

/home/taozi/mysql/bin/mysqld_safe --ledir=/home/taozi/mysql/bin /--log-error=/home/taozi/mysql/data/t.err --datadir=/home/taozi/mysql/data /--socket=/home/taozi/mysql/tmp/mysql.sock --pid-file=/home/taozi/mysql/data/mysqld.pid &

6. 此时回到管理节点

~/mysql/bin/ndb_mgm -e show

可以看到显示如下

[taozi@search153 mysql]$ ./show.shConnected to Management Server at: localhost:1186Cluster Configuration---------------------[ndbd(NDB)]     2 node(s)id=2    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0, Master)id=3    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0)[ndb_mgmd(MGM)] 1 node(s)id=1    @192.168.207.153  (mysql-5.1.47 ndb-7.1.5)[mysqld(API)]   3 node(s)id=4    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5)id=5    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5)id=6 (not connected, accepting connect from any host)

7. 进入sql节点,在test数据库创建表

CREATE TABLE `t1` (  `id` int(11) NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=ndbcluster  DEFAULT CHARSET=gbk

切换到2台数据节点服务器~/mysql/data/ndb_2_fs和~/mysql/data/ndb_3_fs看看,

或者直接去数据库查,数据已经同步了!

3.2    管理节点

主机xp1的C:\mysql-cluster\bin下新建一个文件config.ini,其中内容如下: 

 

Xml代码  
  1. [ndbd default]  
  2. # Options affecting ndbd processes on all data nodes:  
  3. NoOfReplicas=2                      #复本数量,此例采用默认值2  
  4. DataDir=C:/mysql-cluster/bin/cluster-data   # 数据节点存储目录  
  5. DataMemory=80M    # 数据存储分配的内存,酌情设置  
  6. IndexMemory=18M   # 索引存储分配的内存,酌情设置  
  7.   
  8. [ndb_mgmd]  
  9. # Management process options:  
  10. HostName=192.168.109.130               # 管理节点所在主机IP  
  11. DataDir=C:/mysql-cluster/bin/cluster-logs   # 管理节点日志目录  
  12.   
  13. [ndbd]  
  14. # Options for data node "A":  
  15. # (one [ndbd] section per data node)  
  16. HostName=192.168.109.132           # 节点所在主机IP  
  17. datadir=C:/mysql-cluster/data   # 数据存储目录  
  18.   
  19. [ndbd]  
  20. # Options for data node "B":  
  21. HostName=192.168.109.133           # 节点所在主机IP  
  22. datadir=C:/mysql-cluster/data  
  23.   
  24. [mysqld]  
  25. # SQL node options:  
  26. HostName=192.168.109.130           # SQL节点所在主机IP  

 

这些为集群整体的配置信息,其中[ndbd default]为全局数据节点的默认配置模块。[ndb_mgmd]为管理节点配置模块。[ndbd]为数据节点配置模块。[mysqld]为sql节点配置模块。#后面为注释内容,实际文件可以将这些注释去掉,以防止因为中文的存在导致mysql解析文件失败。启动管理节点直接调用bin目录下的ndb_mgmd.exe即可,但是我们在命令后指定我们上述的配置文件和集群配置的缓存目录,所以命令为

 

Java代码  
  1. ndb_mgmd.exe --config-file=C:\\mysql-cluster\\bin\\config.ini --configdir=C:\mysql-cluster\bin\config-cache  

 

为了方便起见,我们在c:\mysql-cluster\bin目录下新建一个文件ndb_mgmd_start.bat,将上述管理节点启动的命令写入该批处理文件中作为启动命令。

3.3    数据节点

我们以数据节点1为例介绍,节点2与此类似。在主机xp2的c:\mysql-cluster下新建文件my.ini。键入如下内容

 

Xml代码  
  1. [mysql_cluster]  
  2. # Options for data node process:  
  3. ndb-connectstring=192.168.109.130  # location of management server  

 

 

3.4    SQL节点

在xp1节点的c:\mysql-cluster目录下新建文件my.ini,键入如下内容

 

Xml代码  
  1. [mysqld]  
  2. ndbcluster                      # run NDB storage engine  
  3. ndb-connectstring=192.168.109.130  # location of management serve  

 

其中ndbcluster指定了存储引擎为集群环境,ndb-connectstring指定了管理节点的地址。

         到此为止所有节点配置工作就完成了。

4.      节点管理

4.1    ndb_mgm介绍

mysql cluster提供了ndb_mgm.exe来对集群进行管理,在xp1主机的c:\mysql-cluster\bin目录下。我们可以直接在命令行执行该命令进入管理控制台。(注:该程序需要在管理节点启动后才能执行)

常用的命令包括:

show: 显示集群中所有节点的状态。如图-04

 

图-04

Node_id status: 查看node_id对应的节点的状态

shutdown –e: 停止管理节点和所有数据节点。SQL节点不会被停掉。

笔者就简单用了这几个,其他命令还很多,可以通过HELP命令来查看。

4.2    节点启停

Mysql cluster启动有顺序要求,管理节点要最先启动。

启动管理节点:在命令行中进到c:\mysql-cluster\bin目录下,执行我们之前编辑的批处理文件ndb_mgmd_start.bat.如果启动正常,我们此时可以执行ndb_mgm程序,通过管理控制台查看节点状态了。

启动数据节点:依次在各个数据节点主机的命令行中进到c:\mysql-cluster\bin目录下,执行ndbd.exe 即可。通过ndb_mgm的管理控制台查看启动状态。

启动SQL节点:在SQL节点的命令行中进到c:\mysql-cluster\bin目录下,执行mysqld.exe即可。通过ndb_mgm的管理控制台查看启动状态。

                   节点停止:在ndb_mgm的管理控制台中执行shutdown –e 则管理节点和数据节点均会停止。另外SQL节点需要手动停止。

5.      验证

集群环境搭建完成我们可以对其进行验证。此处偷偷懒,直接引用一个官网的图,如图-05

 

图-05

注意图中建表语句中的ENGINE=NDBCLUSTER。

如果有兴致还以通过外部程序验证一下。注意外部程序访问URL还是SQL节点。

好了,这样我们的mysql 集群环境就搭建完成了。

安装要求

  • 安装环境:CentOS-6.4
  • 安装方式:源码编译安装
  • 软件名称:mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
  • 软件安装位置:/usr/local/mysql
  • 数据存放位置:/var/mysql/data
  • 日志存放位置:/var/mysql/logs

集群设计

首先设计集群的安装分配方式,我共需要5台服务器,服务器分配如下:

  • 管理节点:    172.16.172.133
  • sql节点1:    172.16.172.132
  • sql节点2:    172.16.172.134
  • 数据节点1:   172.16.172.130
  • 数据节点2:   172.16.172.131

设备的连接方式如


注意:目前这种设计存在的问题是管理节点是单点的。

管理节点

管理节点安装

安装管理节点(172.16.172.133)

[root@localhost /]# groupadd mysql
[root@localhost /]#  useradd mysql -g mysql
[root@localhost /]# cd /usr/local
[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql
[root@localhost local]# chown -R mysql:mysql mysql
[root@localhost local]# cd mysql
[root@localhost mysql]# scripts/mysql_install_db –user=mysql

管理节点配置

[root@localhost ~]#  mkdir /var/lib/mysql-cluster
[root@localhost ~]# cd /var/lib/mysql-cluster
[root@localhost mysql-cluster]# vi + /var/lib/mysql-cluster/config.ini

config.ini 中添加以下内容:

[NDBD DEFAULT]
NoOfReplicas=1
[TCP DEFAULT]
portnumber=3306 
[NDB_MGMD]
#设置管理节点服务器
HostName=172.16.172.133
DataDir=/var/mysql/data
[NDBD]
#设置存储节点服务器(NDB节点)
HostName=172.16.172.130
DataDir=/var/mysql/data
[NDBD]
#第二个NDB节点
HostName=172.16.172.131
DataDir=/var/mysql/data
[MYSQLD]
#设置SQL节点服务器 
HostName=172.16.172.132
[MYSQLD]
#第二个SQL节点 
HostName=172.16.172.134

管理节点启动

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
[root@localhost ~]# mkdir /var/mysql/logs
[root@localhost ~]# netstat -lntpu

看到tcp 0 0 0.0.0.0:1186开放说明启动正常
开启管理节点服务器的1186端口

管理节点检验

执行以下操作:

[root@localhost /]# 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 (not connected, accepting connect from 172.16.172.130)
id=3 (not connected, accepting connect from 172.16.172.131)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.15.231  (mysql-5.5.22 ndb-7.2.6)
[mysqld(API)]   2 node(s)
id=4 (not connected, accepting connect from 172.16.172.132)
id=5 (not connected, accepting connect from 172.16.172.134)

管理节点关闭

[root@localhost /]# /usr/local/mysql/bin/ndb_mgm -e shutdown
#成功后终端打印出以下信息
Connected to Management Server at: 172.16.172.133:1186
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.

数据节点

数据节点安装

数据节点1: 172.16.172.130
数据节点2: 172.16.172.131

[root@localhost /]# groupadd mysql
[root@localhost /]# useradd mysql -g mysql
[root@localhost /]# cd /usr/local
[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql
[root@localhost local]# chown -R mysql:mysql mysql
[root@localhost local]# cd mysql
[root@localhost mysql]# scripts/mysql_install_db --user=mysql
[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

数据节点配置

对数据节点进行配置,执行以下操作:

[root@localhost mysql]# mkdir /var/mysql/data
[root@localhost mysql]# mkdir /var/mysql/logs
[root@localhost mysql]# vi /etc/my.cnf

向文件追加以下内容:

[MYSQLD]
ndbcluster
ndb-connectstring=172.16.172.133
[MYSQL_CLUSTER]
ndb-connectstring=172.16.172.133
[NDB_MGM]
connect-string=172.16.172.133

数据节点启动

启动此处时,管理节点服务器防火墙必须开启1186,3306端口。
注意:只是在第一次启动或在备份/恢复或配置变化后重启ndbd时,才加–initial参数!
第一次启动如下:

[root@localhost mysql]# /usr/local/mysql/bin/ndbd --initial
2013-01-30 13:43:53 [ndbd] INFO     -- Angel connected to '172.16.172.133
:1186'
2013-01-30 13:43:53 [ndbd] INFO     -- Angel allocated nodeid: 2

正常启动方式:

[root@localhost mysql]# /usr/local/mysql/bin/ndbd

数据节点关闭

[root@localhost /]# /etc/rc.d/init.d/mysqld stop

或者

[root@localhost mysql]# /etc/init.d/mysql stop
Shutting down MySQL.. SUCCESS!

/usr/local/mysql/bin/mysqladmin -uroot shutdown

SQL节点安装

SQL节点安装

SQL节点和存储节点(NDB节点)安装相同,都执行以下操作;
sql节点1: 172.16.172.132
sql节点2: 172.16.172.134

SQL节点配置

[root@localhost /]# groupadd mysql
[root@localhost /]# useradd mysql -g mysql
[root@localhost /]# cd /usr/local
[root@localhost local]# tar -zxv -f mysql-cluster-gpl-7.2.6-linux2.6-x86_64.tar.gz
[root@localhost local]# mv mysql-cluster-gpl-7.2.6-linux2.6-x86_64 mysql
[root@localhost local]# chown -R mysql:mysql mysql
[root@localhost local]# cd mysql
[root@localhost mysql]# scripts/mysql_install_db --user=mysql
[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

执行以下操作:

[root@localhost mysql]# mkdir /var/mysql/data     //创建存储数据的文件夹
[root@localhost mysql]# mkdir /var/mysql/logs     //创建存储日志的文件夹
[root@localhost mysql]# vi /usr/local/mysql/my.cnf  //修改配置文件

追加以下内容:

[MYSQLD]
ndbcluster
ndb-connectstring=172.16.172.133
[MYSQL_CLUSTER]
ndb-connectstring=172.16.172.133
[NDB_MGM]
connect-string=172.16.172.133

SQL节点启动

执行以下操作:

[root@localhost mysql]# service mysqld start
Starting MySQL.. SUCCESS!

SQL节点关闭

最直接的方式:

[root@localhost mysql]# /usr/local/mysql/bin/mysqladmin -uroot shutdown

[root@localhost /]# /etc/rc.d/init.d/mysqld stop

或者

[root@localhost mysql]# /etc/init.d/mysql stop
Shutting down MySQL.. SUCCESS!

功能测试

在管理节点(172.16.172.133)上查看服务状态

[root@localhost ~]# /usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Cluster Configuration
 ---------------------
[ndbd(NDB)]     2 node(s)
id=2    @172.16.172.130  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 0, Master)
id=3    @172.16.172.131  (mysql-5.5.22 ndb-7.2.6, Nodegroup: 1)
   [ndb_mgmd(MGM)] 1 node(s)
id=1    @172.16.172.133  (mysql-5.5.22 ndb-7.2.6)
   [mysqld(API)]   2 node(s)
id=4    @172.16.172.132  (mysql-5.5.22 ndb-7.2.6)
id=5    @172.16.172.134  (mysql-5.5.22 ndb-7.2.6)

可以看到这里的数据节点、管理节点、sql节点都是正常的。
注意:

  1. 在建表的时候一定要用ENGINE=NDBENGINE=NDBCLUSTER指定使用NDB集群存储引擎,或用ALTER TABLE选项更改表的存储引擎。
  2. NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动生成隐含的主键。
  3. Sql节点的用户权限表仍然采用MYISAM存储引擎保存的,所以在一个Sql节点创建的MySql用户只能访问这个节点,如果要用同样的用户访 问别的Sql节点,需要在对应的Sql节点追加用户。虽然在MySql Cluster7.2版本开始提供了用户权限共享

数据同步性测试

在一个数据节点上进行相关数据库的创建,然后到另外一个数据节点上看看数据是否同步。

1步:

SQL节点1172.16.172.132)上增加数据:

SQL节点1(172.16.172.132)上增加数据:
[root@localhost mysql]#  /etc/rc.d/init.d/mysqld status                //检验mysql是否运行
[root@localhost mysql]# /etc/rc.d/init.d/mysqld start                   //启动mysql
[root@localhost mysql]# /usr/local/mysql/bin/mysql -u root -p
Enter password:
mysql> show databases;
mysql> create database testdb2;
mysql> use testdb2;
mysql> CREATE TABLE td_test2 (i INT) ENGINE=NDB;
//这里必须指定数据库表的引擎为NDBCLUSTER,与配置文件中的名称相同
mysql> INSERT INTO td_test2() VALUES (1);
mysql> INSERT INTO td_test2() VALUES (152);
mysql> SELECT * FROM td_test2;

2步:

进入到SQL节点2172.16.172.134)上查看数据

mysql> use testdb2;
Database changed
mysql> SELECT * FROM td_test2;
+------+
| i    |
+------+
|  126 |
|    1 |
+------+
2 rows in set (0.01 sec)

查看表的引擎是不是NDB

mysql> show create table td_test2;

3步:

反向测试,SQL节点2172.16.172.134)上增加数据:

mysql> create database bb;
mysql> use bb;
mysql> CREATE TABLE td_test3 (i INT) ENGINE=NDB;
mysql> INSERT INTO td_test3 () VALUES (98);
mysql> SELECT * FROM td_test3;

SQL节点1172.16.172.132)上查看数据:

mysql>  use bb;
Database changed
mysql>  SELECT * FROM td_test3;
+------+
| i    |
+------+
|   98 |
+------+
1 row in set (0.00 sec)

关闭集群

先关闭管理节点,然后关闭SQL节点和数据节点。

集群启动操作顺序

要再次启动集群,按照以下顺序执行:
管理节点 ->数据节点 –> SQL节点

注意:此次启动数据节点时不要加”–initial”参数。


MySQL双主 + Keepalived主备自动切换方案一

MySQL双主 + Keepalived主备自动切换方案二

MySQL主从 + Keepalived主从自动切换方案

MySQL双主 + 多从高可用方案---MMM

MySQL + Pecemaker(Heartbeat) + DRBD主高可用

MySQL + RHCS 高可用方案

MySQL + Cluser 集群架构

Percona Xtradb Cluster 集群高可用性解决方案

管理节点 

172.16.14.145 mgm1 

172.16.14.150  mgm2

172.16.14.146 ndb1

172.16.14.147 ndb2

172.16.14.148  sql1

172.16.14.149 sql2

集群配置概述:

安装版本:mysql cluster 7.3.5

操作系统 :centos6.5(X64)

软件名称 

管理节点IP

数据节点

SQL节点IP:

数据节点

SQL节点IP:

配置ssh等效不要密码登录

配置hosts解析

配置本地yum源 6.5

安装依赖包:yum install -y glibc perl libaio-devel

x32位系统要安装兼容库组:yum -y groupinstall "Compatibility libraries"

1. mysql旧版本清除:

首先使用如下命令来清理之前操作系统自带的mysql安装:

yum -y remove mysql

然后使用如下命令:

rpm -qa | grep mysql*

对于找到的2个剩余mysql包,请按照如下的命令格式予以删除:

rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64

每个节点都要那么做

关闭 /etc/init.d/iptables stop 

/etc/init.d/ip6tables stop

chkconfig iptables off 

chkconfig ip6tables off

vim /etc/selinux/config 

SELINUX=disabled 

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

#SELINUXTYPE=targeted  注释掉这行 

软件安装位置:/opt/local/mysql

数据存放位置:/opt/mysql/data SQL节点存储数据的路径

日志存放位置:/opt/mysql/logs

/opt/local/cluster 管理集群时收集的集群信息的存放路径





http://www.cnblogs.com/wangyanhong/p/3324411.html


机器描述:

  192.168.100.1 : 管理节点

  192.168.100.2 : SQL节点1

  192.168.100.3 : SQL节点2

  192.168.100.4 : 数据节点1

  192.168.100.5 : 数据节点2

软件需求:Linux下64位MySQL:mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz

 

1、安装管理节点:192.168.100.1

(1)mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/myql 

(2)mysql目录下创建文件夹:mkdir  /usr/local/myql/mysql-cluster

(3)mysql目录下创建文件mkdir  /usr/local/myql/cluster-conf

(4)编辑config.ini文件:vi /usr/local/mysql/cluster-conf/config.ini 内容如下:


[ndbd default] 
NoOfReplicas=2
DataMemory=200M
IndexMemory=100M


[ndb_mgmd]
id=1
hostname=192.168.100.1
DataDir=/usr/local/mysql/mysql-cluster


[ndbd]
id=2
HostName=192.168.100.4
DataDir=/usr/local/mysql/ndbdata


[ndbd] 
id=5
HostName=192.168.100.5
DataDir=/usr/local/mysql/ndbdata


[mysqld]
id=6
HostName=192.168.100.2


[mysqld]
id=7
HostName=192.168.100.3

 

2、安装SQL节点  192.168.100.4 & 192.168.100.5

(1)mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/myql 

(2)添加mysql用户

  groupadd mysql

  useradd -g mysql mysql

(3)添加权限

  chown -R mysql:mysql /usr/local/mysql

(4)拷贝配置文件

  cp /usr/local/mysql/support-files/my-large.cnf   /etc/my.cnf 

(5)初始化数据库

  cd /usr/local/mysql

  scripts/mysql_install_db --user=mysql

(6)拷贝守护进程所需文件

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

(7)配置守护进程

  chkconfig add mysqld

  chkconfig level 35 mysqld on

(8)更改配置文件 vi /etc/my.cnf 内容如下:

  [mysqld]

  port = 3306

  socket = /tmp/mysql.sock

  ndbcluster

  ndb-connectstring=192.168.100.1  #管理节点的IP

 

3、安装数据节点

(1)mysql-cluster-gpl-7.2.8-linux2.6-x86_64.tar.gz 解压到 /usr/local/mysql 

(2)mysql目录下创建文件:mkdir  /usr/local/mysql/ndbdata

(3)编辑my.cnf: vi /etc/my.cnf 在文件末尾添加如下内容:

  [mysql_cluster]

  ndb-connectstring=192.168.100.1  #管理节点IP

 

4、配置环境变量:

  #config mysql

  export MYSQL_HOME=/usr/local/mysql

  export PATH=$MYSQL_HOME/bin:$PATH

 

5、启动集群

启动顺序:管理服务器->存储节点->SQL节点

(1)启动管理节点

  rm mysql/mysql-cluster/ndb_1_config.bin.1  #如果config.ini有改动则要加上

  ndb_mgmd -f /usr/local/mysql/cluster-conf/config.ini

(2)启动存储节点

  ndbd --initial #(第一次启动必须添加选项)

  ndbd    #不是第一次启动需要执行的命令

(3)启动SQL节点

  /etc/rc.d/init.d/mysqld start 或 service mysqld start

 

6、关闭集群

(1)关闭SQL节点

  /etc/rc.d/init.d/mysqld stop service mysqld stop

(2)关闭管理节点

  ndb_mgm〉 shutdown

7、验证配置的正确性

  在管理节点执行:ndb_mgm -> show

8、创建表

创建表需要以 ndbcluster 作为存储引擎

CREATE TABLE `test`.`test` (

  `id`  VARCHAR(45) NOT NULL,

  `name`        VARCHAR(9),

  PRIMARY KEY (`id`)

)  ENGINE = ndbcluster;  

 

参考:http://www.cnblogs.com/bigshuai/archive/2012/02/29/2373865.html

 


8. 关闭集群服务

关闭sql节点等同于停止mysql服务,此时外界数据不将再进来。然后关闭管理节点

~/mysql/bin/ndb_mgm -e shutdown
rm ~/mysql/mysql-cluster/ndb_1_config.bin.1 #不是必须的,如果config.ini有改动则要加上

这样操作后,管理节点和数据节点都将停止服务

Notes:

1:如果发现关闭一台机器的ndbd进程,另一台机器的ndbd的进程也关闭,则需要修改参数NoOfReplicas。
2:./ndbd --initial 不能同时在所有数据节点机器上执行,如执行,会删除所有数据
3:可以像操作非簇类型的数据库那样,操作mysqld节点
4:每次修改config.ini文件,重启ndb_mgmd时,需要删除mysql-cluster文件下的ndb_1_config.bin.1文件,
因为他默认调用此文件
5:NDB 簇不支持自动发现数据库的功能,这点很重要,一旦在一个数据节点上创建了世界(world)数据库和它的表,
在簇中的每个SQL节点上还需要发出命令 CREATE DATABASE world,后跟FLUSH TABLES。这样,节点就能
识别数据库并读取其表定义。(在本版本MySQL Cluster 7.1.5下数据库也会自动同步的)
6:如果在相关节点服务器启动时,注意查看~/mysql/mysql-cluster目录内的相关日志文件以获取错误信息.
7:在管理节点的配置文件里各[mysqld],[ndbd]和[ndb_mgmd]配置的选项值顺序应该如下:
[mysqld]
Id=4
HostName=192.168.208.3
Id在顶端紧跟其后的是HostName,如果顺序错了,当SQL或数据节点连接管理节点时,管理节点无法正确的定位
到其对应的节点配置上.
因为无法定位到对应的节点配置,当没有剩余的[空节点]时,客户端节点启动时(./mysqld or ./ndbd)
还会报:
Configuration error: Error : Could not alloc node id at 192.168.0.231 port 1186: No free
node id found for mysqld
(API).Failed to initialize consumers
8:[空节点]是没有指定HostName选项的节点配置均为空节点,空节点可以用来动态配置一些动态IP的节点,
一般管理节点的 配置文件要预留3个以上的空节点,因为备份时需要连接一个节点,如下:
[mysqld]
Id=6

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

体系结构

MySQL Cluster 由3个不同功能的服务构成,每个服务由一个专用的守护进程提供,一项 服务也叫做一个节点,下面来介绍每个节点的功能。

The management (MGM) node

管理节点,用来实现整个集群的管理,理论上一般只启动一个,而且宕机也不影响 cluster 的服务,这个进程只在cluster 启动以及节点加入集群时起作用, 所以这个节点不是很需要冗余,理论上通过一台服务器提供服务就可以了。

通过 ndb_mgmd 命令启动,使用 config.ini 配置文件

The storage or database (DB) node:

数据库节点,用来存储数据,可以和管理节点(MGM) , 用户端节点(API) 可以处在 不同的机器上,也可以在同一个机器上面,集群中至少要有一个DB节点,2个以上 时就能实现集群的高可用保证,DB节点增加时,集群的处理速度会变慢。

通过 ndbd 命令启动,第一次创建好cluster DB 节点时,需要使用 –init参数初始化。

例如: bin/ndbd –ndb-connectstring=ndb_mgmd.mysqlcluster.net –initial

The client (API) node:

客户端节点,通过他实现 cluster DB 的访问,这个节点也就是普通的 mysqld 进程, 需要在配置文件中配置ndbcluster 指令打开 NDB Cluster storage engine 存储引擎,增加 API 节点会提高整个集群的并发访问速度和整体的吞吐量,该节点 可以部署在Web应用服务器上,也可以部署在专用的服务器上,也开以和DB部署在 同一台服务器上。

通过 mysqld_safe 命令启动,

这3类节点可以分布在不同的主机上,比如 DB 可以是多台专用的服务器,也可以 每个DB都有一个API,当然也可以把API分布在Web前端的服务器上去,通常来说, API越多cluster的性能会越好。

Mysql集群探索与实践

1. 准备好3台机器,从官网下载最新的mysql集群版本,此处用到mysql-cluster-gpl-7.1.5.tar.gz源码包, 配置并安装,记得加上

–with-plugins=innobase,ndbcluster (innobase可选)

3台机器分别是192.168.207.153,192.168.208.3,192.168.208.9,具体分配如下

管理节点(ndb_mgmd):192.168.207.153

数据节点(ndbd): 192.168.208.3

数据节点(ndbd): 192.168.208.9

SQL节点(mysqld): 192.168.208.3

SQL节点(mysqld): 192.168.208.9

2. 在mysql目录下新建mysql-cluster文件夹,切换到mysql-cluster,新建config.ini

[NDBD DEFAULT]
NoOfReplicas=2       #备份,副本,这样的话2台数据节点的数据就会同步
DataMemory=200M
IndexMemory=100M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]   #管理节点
id=1
hostname=192.168.207.153
datadir=/home/taozi/mysql/mysql-cluster
[NDBD]    #数据节点
id=2
hostname=192.168.208.3
datadir=/home/taozi/mysql/data
[NDBD]   #数据节点
id=3
hostname=192.168.208.9
datadir=/home/taozi/mysql/data
[MySQLD]   #sql节点
id=4
hostname=192.168.208.3
[MySQLD]    #sql节点
id=5
hostname=192.168.208.9
[MySQLD]     #sql节点
id=6

3. 在管理节点服务器上启动管理节点服务 (如果不存在ndb_mgmd那么要从libexec下面复制过来)

~/mysql/bin/ndb_mgmd -f ~/mysql/mysql-cluster/config.ini

4. 进入2台数据节点服务器,分别启动数据节点服务

~/mysql/bin/ndbd     (第一次启动使用  ~/mysql/bin/ndbd --initial)

5. 最后分别进入sql节点服务器,修改my.cnf,加入

[MYSQL_CLUSTER]
ndb-connectstring=192.168.207.153
[MYSQLD]
ndbcluster
ndb-connectstring=192.168.207.153

启动mysql服务

/home/taozi/mysql/bin/mysqld_safe --ledir=/home/taozi/mysql/bin /
--log-error=/home/taozi/mysql/data/t.err --datadir=/home/taozi/mysql/data /
--socket=/home/taozi/mysql/tmp/mysql.sock --pid-file=/home/taozi/mysql/data/mysqld.pid &

6. 此时回到管理节点

~/mysql/bin/ndb_mgm -e show

可以看到显示如下

[taozi@search153 mysql]$ ./show.sh
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0, Master)
id=3    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.207.153  (mysql-5.1.47 ndb-7.1.5)
[mysqld(API)]   3 node(s)
id=4    @192.168.208.3  (mysql-5.1.47 ndb-7.1.5)
id=5    @192.168.208.9  (mysql-5.1.47 ndb-7.1.5)
id=6 (not connected, accepting connect from any host)

7. 进入sql节点,在test数据库创建表

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=ndbcluster  DEFAULT CHARSET=gbk

切换到2台数据节点服务器~/mysql/data/ndb_2_fs和~/mysql/data/ndb_3_fs看看,

或者直接去数据库查,数据已经同步了!

3.2    管理节点

主机xp1C:\mysql-cluster\bin下新建一个文件config.ini,其中内容如下: 

 

Xml代码  
  1. [ndbd default]  
  2. # Options affecting ndbd processes on all data nodes:  
  3. NoOfReplicas=2                      #复本数量,此例采用默认值2  
  4. DataDir=C:/mysql-cluster/bin/cluster-data   # 数据节点存储目录  
  5. DataMemory=80M    # 数据存储分配的内存,酌情设置  
  6. IndexMemory=18M   # 索引存储分配的内存,酌情设置  
  7.   
  8. [ndb_mgmd]  
  9. # Management process options:  
  10. HostName=192.168.109.130               # 管理节点所在主机IP  
  11. DataDir=C:/mysql-cluster/bin/cluster-logs   # 管理节点日志目录  
  12.   
  13. [ndbd]  
  14. # Options for data node "A":  
  15. # (one [ndbd] section per data node)  
  16. HostName=192.168.109.132           # 节点所在主机IP  
  17. datadir=C:/mysql-cluster/data   # 数据存储目录  
  18.   
  19. [ndbd]  
  20. # Options for data node "B":  
  21. HostName=192.168.109.133           # 节点所在主机IP  
  22. datadir=C:/mysql-cluster/data  
  23.   
  24. [mysqld]  
  25. # SQL node options:  
  26. HostName=192.168.109.130           # SQL节点所在主机IP  

 

这些为集群整体的配置信息,其中[ndbd default]为全局数据节点的默认配置模块。[ndb_mgmd]为管理节点配置模块。[ndbd]为数据节点配置模块。[mysqld]sql节点配置模块。#后面为注释内容,实际文件可以将这些注释去掉,以防止因为中文的存在导致mysql解析文件失败。启动管理节点直接调用bin目录下的ndb_mgmd.exe即可,但是我们在命令后指定我们上述的配置文件和集群配置的缓存目录,所以命令为

 

Java代码  
  1. ndb_mgmd.exe --config-file=C:\\mysql-cluster\\bin\\config.ini --configdir=C:\mysql-cluster\bin\config-cache  

 

为了方便起见,我们在c:\mysql-cluster\bin目录下新建一个文件ndb_mgmd_start.bat,将上述管理节点启动的命令写入该批处理文件中作为启动命令。

3.3    数据节点

我们以数据节点1为例介绍,节点2与此类似。在主机xp2c:\mysql-cluster下新建文件my.ini。键入如下内容

 

Xml代码  
  1. [mysql_cluster]  
  2. # Options for data node process:  
  3. ndb-connectstring=192.168.109.130  # location of management server  

 

 

3.4    SQL节点

xp1节点的c:\mysql-cluster目录下新建文件my.ini,键入如下内容

 

Xml代码  
  1. [mysqld]  
  2. ndbcluster                      # run NDB storage engine  
  3. ndb-connectstring=192.168.109.130  # location of management serve  

 

其中ndbcluster指定了存储引擎为集群环境,ndb-connectstring指定了管理节点的地址。

         到此为止所有节点配置工作就完成了。

4.      节点管理

4.1    ndb_mgm介绍

mysql cluster提供了ndb_mgm.exe来对集群进行管理,在xp1主机的c:\mysql-cluster\bin目录下。我们可以直接在命令行执行该命令进入管理控制台。(注:该程序需要在管理节点启动后才能执行)

常用的命令包括:

show: 显示集群中所有节点的状态。如图-04

 

-04

Node_id status: 查看node_id对应的节点的状态

shutdown –e: 停止管理节点和所有数据节点。SQL节点不会被停掉。

笔者就简单用了这几个,其他命令还很多,可以通过HELP命令来查看。

4.2    节点启停

Mysql cluster启动有顺序要求,管理节点要最先启动。

启动管理节点:在命令行中进到c:\mysql-cluster\bin目录下,执行我们之前编辑的批处理文件ndb_mgmd_start.bat.如果启动正常,我们此时可以执行ndb_mgm程序,通过管理控制台查看节点状态了。

启动数据节点:依次在各个数据节点主机的命令行中进到c:\mysql-cluster\bin目录下,执行ndbd.exe 即可。通过ndb_mgm的管理控制台查看启动状态。

启动SQL节点:在SQL节点的命令行中进到c:\mysql-cluster\bin目录下,执行mysqld.exe即可。通过ndb_mgm的管理控制台查看启动状态。

                   节点停止:在ndb_mgm的管理控制台中执行shutdown –e 则管理节点和数据节点均会停止。另外SQL节点需要手动停止。

5.      验证

集群环境搭建完成我们可以对其进行验证。此处偷偷懒,直接引用一个官网的图,如图-05

 

-05

注意图中建表语句中的ENGINE=NDBCLUSTER

如果有兴致还以通过外部程序验证一下。注意外部程序访问URL还是SQL节点。

好了,这样我们的mysql 集群环境就搭建完成了。

网友评论

登录后评论
0/500
评论
白及88
+ 关注