MYSQL集群的搭建

按照此配置完全可以配置成功!!

一、介绍
========
测试环境:
Server1:ndbd 192.168.1.225
Server2:ndbd 192.168.1.226
Server3:mysqld --ndb-cluster 192.168.1.224 (ndbd_mgm ndbd_mgmd也在本机)
Server4:LVS 192.168.1.111 (调度主服务器,利用此服务器进行MYSQL的负载均衡,否则MYSQL CLUSTER只做到了数据同步的作用,好像在机制内部MYSQL NDB的各各节点上也会有负载均衡这一说!)
操作系统均为
RH AS4

所需软件包:
mysql-5.1.23-ndb-6.2.15-linux-i686-glibc23.tar.gz
下载地址:http://dev.mysql.com/downloads/mysql/5.0.html

首先,明确几个概念(参照下图):
ndbd: 数据库节点,需要更大的内存。
mysqld --ndb-cluster: MySQL服务器节点,程序直接访问的是这台机器的IP。默认端口仍是3306,。
ndbd_mgm ndbd_mgmd:管理节点。管理/查看各库节点和服务器节点的状态,最好自己单独一台服务器,测试发现只要ndbd_mgmd程序死掉,所有的节点全部停止工作.

二、在Server1、Server2、Server3上安装MySQL
=================================
1.安装:
# mv mysql-5.1.23-ndb-6.2.15-linux-i686-glibc23.tar.gz /usr/local/
# cd /usr/local/
# tar -zxvf mysql-5.1.23-ndb-6.2.15-linux-i686-glibc23.tar.gz
# ln -s mysql-5.1.23-ndb-6.2.15-linux-i686-glibc23.tar.gz mysql
# groupadd mysql
# useradd -g mysql mysql
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R mysql:mysql .

2.编辑配置文件:
# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf 在文件尾加入
............................................................
............................................................
# Options for mysqld process:
[MYSQLD]
ndbcluster                      # run NDB engine
ndb-connectstring=192.168.1.224  # location of MGM node

# Options for ndbd process:
[MYSQL_CLUSTER]
ndb-connectstring=192.168.1.224  # location of MGM node
保存&退出
............................................................
............................................................
3.在Server1、Server2上创建日志文件夹,默认
# mkdir /var/lib/mysql-cluster

4.在Server3上创建ndb_mgmd启动配置文件:
# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini
内容如下:
 Options affecting ndbd processes on all data nodes:
[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.
 
# TCP/IP options:
[TCP DEFAULT]    
portnumber=2202   # This the default; however, you can use any
                  # port that is free for all the hosts in cluster
                  # Note: It is recommended beginning with MySQL 5.0 that
                  # you do not specify the portnumber at all and simply allow
                  # the default value to be used instead
 
# Management process options:
[NDB_MGMD]                     
hostname=192.168.1.224         # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster  # Directory for MGM node logfiles
 
# Options for data node "A":
[NDBD]                         
                                # (one [NDBD] section per data node)
hostname=192.168.1.225         # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node‘s datafiles
 
# Options for data node "B":
[NDBD]                         
hostname=192.168.1.226         # Hostname or IP address
datadir=/usr/local/mysql/data   # Directory for this data node‘s datafiles
 
# SQL node options:
[MYSQLD]              
[MYSQLD]
[MYSQLD]         
#hostname=192.168.1.224           # Hostname or IP address
                                # (additional mysqld connections can be
                                # specified for this node for various
                                # purposes such as running ndb_restore)

保存&退出

[MYSQLD]
[MYSQLD]
[MYSQLD]
表示允许有三台MySQL服务器从任何IP访问数据库结点。

各参数功能,请参考http://dev.mysql.com/doc/refman/ ... config-example.html

三、启动服务
============
Server3 /usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Server1 /usr/local/mysql/bin/ndbd --initial (只在第一次启动ndbd时使用--initial参数,通知ndbd执行初始化启动。初始化启动将删除以前ndbd实例为恢复目的创建的任何文件。它还能重新创建恢复用日志文件。注意,在某些操作系统上,该进程可能会占用较长的时间)
Server2 /usr/local/mysql/bin/ndbd --initial
Server3 /usr/local/mysql/support-files/mysql.Server start

四、检查工作状态
================
回到管理节点服务器Server3上,并启动管理终端:

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

ndb_mgm> show
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2 (not connected, accepting connect from 192.168.1.225)
id=3    @192.168.1.226  (Version: 5.0.22, Nodegroup: 0, Master)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.1.224  (Version: 5.0.22)

[mysqld(API)]   3 node(s)
id=4    @192.168.1.224  (Version: 5.0.22)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)

mysqld(API)即mysqld --ndb-cluster,MySQL服务器节点。当前只有Server3 MySQL启动。

如果上面没有问题,现在开始测试MySQL:
注意,这篇文档对于MySQL并没有设置root密码,推荐你自己设置Server1、Server2、Server3的MySQL root密码。

在Server3中:
# /usr/local/mysql/bin/mysql
> use test;
> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;(一定要加上ENGINE=NDBCLUSTER或ENGINE=NDB,否则各主机无法同步数据!!)
> INSERT INTO ctest () VALUES (1);
> SELECT * FROM ctest;

应该可以看到1 row returned信息(返回数值1)。

如果上述正常,则换到Server1、Server2上重复上面的测试,观察效果,数据库应该是同步刷新的。但首先要启动这两台机器的MySQL服务
# /usr/local/mysql/support-files/mysql.Server start
如果都没有问题,那么恭喜成功!

FAQ:
失败原因,可能是启动顺序不对。
查找所有ndb和sql相关进程,杀掉,重新按顺序来。
ps -aux |grep ndb
ps -aux |grep sql
kill -9 <PID> <PID> ...<PID>
/usr/local/mysql/bin/ndb_mgm -e shutdown(此命令会关闭所有主机节点)

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

如果你接触不到物理服务器,也就是说不能拔掉网线,那也可以这样测试:
在Server1或Server2上:
ifconfig eth0 down  #如果只有一块网卡,默认是eth0

之后在Server3上使用SELECT查询测试。并且在管理节点服务器的管理终端中执行show命令会看到被破坏的那台服务器的状态。
测试完成后,只需要重新启动被破坏服务器的ndbd进程即可:
# ndbd
注意!前面说过了,此时是不用加--inital参数的!
至此,MySQL集群就配置完成,MySQL负载均衡功能完成!

===============================================
六.注意事项:
1.ndb_mgmd管理服务器,防火墙勿忘开1186端口.
2.ndb数据服务器,防火墙勿忘开2202端口.
3.LVS主服务器应该打开3306端口.
4.创建表时注意,在表后一定要加上ENGINE=NDBCLUSTER或ENGINE=NDB,否则各主机无法同步数据!!
===============================================
七:用于MySQL簇进程的命令选项
1.ndb_mgm -e show (查看各节点状态)

2. --skip-ndbcluster        (禁止NDB簇存储引擎。对于包含该功能的二进制版本,在默认情况下,该功能是被禁止的,换句话讲,NDB簇存储引擎处于禁止状态,直至使用“—ndbcluster”选项激活了它为止。仅当所编译的服务器支持NDB簇存储引擎时,才能使用该选项。)

--ndb-connectstring=connect_string (使用NDB存储引擎时,通过设置该选项,能够指定分配簇配置数据的管理服务器)

3.ndb>

·         SHOW
在使用多个管理节点的簇中,该命令仅显示与当前管理服务器实际相连的数据节点的信息

·         node_id START

启动由node_id标识的数据节点(或所有数据节点)。

·         node_id STOP

停止由node_id标识的数据节点(或所有数据节点)。

·         node_id RESTART [-N] [-I]

重启由node_id标识的数据节点(或所有数据节点)。

·         node_id STATUS

显示由node_id标识的数据节点(或所有数据节点)的状态信息。

·         ENTER SINGLE USER MODE node_id

进入单用户模式,仅允许由节点ID“node_id”标识的MySQL服务器访问数据库。

·         EXIT SINGLE USER MODE

退出单用户模式,允许所有的SQL节点(即所有运行的mysqld进程)访问数据库。

·         QUIT

中止管理客户端。

·         SHUTDOWN

关闭除SQL节点之外的所有簇节点,并退出。

4.用单用户模式,数据库管理员能够将对数据库系统的访问限制在1个MySQL服务器(SQL节点)。进入单用户模式时,与所有其他MySQL服务器的所有连接均将恰当关闭,而且所有正在运行的事务均将被放弃。不允许启动任何新事务.
NDB> ENTER SINGLE USER MODE 5
执行该命令而且簇进入单用户模式后,节点ID为5的SQL节点将成为簇中唯一允许的用户
  NDB> EXIT SINGLE USER MODE
退出单用户模式
八.MYSQL CLUSTER 备份与恢复
1、在管理节点上进行备份。
ndb_mgm> start backup nowait
ndb_mgm> Node 3: Backup 4 started from node 1
Node 3: Backup 4 started from node 1 completed
 StartGCP: 43010 StopGCP: 43013
 #Records: 2138 #LogRecords: 0
 Data: 53068 bytes Log: 0 bytes
 
ndb_mgm> shutdown
Node 3: Cluster shutdown initiated
Node 4: Cluster shutdown initiated
Node 4: Node shutdown completed.
Node 3: Node shutdown completed.
2 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
ndb_mgm> exit
2、删掉SQL节点的数据。
   DROP DATABASE TEST_CLUSTER;
3、关闭MYSQLD服务器。
[[email protected] bin]# service mysqld stop
Shutting down MySQL… SUCCESS!
4、重新顺序启动所有节点。
[[email protected] mysql]# /usr/local/mysql/ndb_mgmd -f /etc/config.ini
[[email protected] data]# /usr/local/mysql/bin/ndbd –initial
我发现如果不带这个 –initial选项的话,恢复会失败。

[[email protected] bin]# service mysqld start
Starting MySQL SUCCESS!

4、在NDBD节点上进行恢复。(每个节点都得执行一次,因为数据分散在两个节点上)
第一个节点:
[[email protected] BACKUP]#
/usr/local/mysql/bin/ndb_restore -n3 -b4 -r -m \
–backup_path=/usr/local/mysql/data/BACKUP/BACKUP-4/

-r开关是记录集合。
-m是元数据。就是表和库的SCHEMA。
Nodeid = 3
Backup Id = 4
backup path = /usr/local/mysql/data/BACKUP/BACKUP-4/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
Successfully restored table `test_cluster/def/lk4_test`

Successfully created index `PRIMARY` on `lk4_test`

_____________________________________________________
Processing data in table: test_cluster/def/lk4_test54) fragment 1
_____________________________________________________

Restored 37 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK
第二个节点:
[[email protected] BACKUP-1]#
/usr/local/mysql/bin/ndb_restore -n4 -b4  -r \
–backup_path=/usr/local/mysql/data/BACKUP/BACKUP-4/

Nodeid = 4
Backup Id = 4
backup path = /usr/local/mysql/data/BACKUP/BACKUP-4/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 1
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 1
_____________________________________________________
Processing data in table: test/def/t11(5) fragment 1
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 1
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 1
Restored 2 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK
这里完成。
5、查看一下有没有数据,为了安全起见。
mysql> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| mysql              |
| test               |
+——————–+
3 rows in set (0.00 sec)
没有恢复的数据库?
MYSQL现在必须重新建立SCHEMA。

mysql> create database test_cluster;
Query OK, 1 row affected (0.33 sec)

mysql> use test_cluster;
Database changed
mysql> show tables;
+——————————+
| Tables_in_test_cluster       |
+——————————+
| lk4_test                     |
| …                          |
+——————————+
27 rows in set (0.11 sec)

mysql> select * from cs_comment;
Empty set (0.00 sec)

不过MYSQL的backup 程序现在还只能进行完全备份。

[[email protected] BACKUP]# du -h
76K     ./BACKUP-2
96K     ./BACKUP-6
180K    ./BACKUP-4
172K    ./BACKUP-3
76K     ./BACKUP-1
60K     ./BACKUP-5
668K    .

6、在NDBD节点上进行恢复的时候有一个要注意的问题。
因为NDBD节点以 –initial 方式启动的时候不会自动删除undo 和 data 文件(即保存到磁盘上的表数据),所以得手动在每个NDBD节点上进行RM操作:

[[email protected] ndb_6_fs]# rm -rf *.dat

然后开始备份。
在MASTER上备份的时候要加 -m 开关。
在SLAVE上要加-d 而且不要-m开关。

具体步骤如下:
MASTER :

[[email protected] ndb_3_fs]# /usr/local/mysql/bin/ndb_restore -n3 -b1 -r -m –backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/
Nodeid = 3
Backup Id = 1
backup path = /usr/local/mysql/data/BACKUP/BACKUP-1/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
Creating logfile group: lg_1…done
Creating tablespace: ts_1…done
Creating datafile “data_1.dat”…done
Creating undofile “undo_1.dat”…done
Successfully restored table `test/def/t11`
Successfully restored table event REPL$test/t11
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 0
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 0
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 0
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 0
_____________________________________________________
Processing data in table: test/def/t11(10) fragment 0
Restored 26 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

其他的SLAVE上的操作:

[[email protected] ndb_6_fs]# /usr/local/mysql/bin/ndb_restore -n6 -b1 -r -d –backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/                                                                                                              
Nodeid = 6
Backup Id = 1
backup path = /usr/local/mysql/data/BACKUP/BACKUP-1/
Ndb version in backup files: Version 5.1.21
Connected to ndb!!
_____________________________________________________
Processing data in table: sys/def/NDB$EVENTS_0(1) fragment 3
_____________________________________________________
Processing data in table: mysql/def/NDB$BLOB_2_3(3) fragment 3
_____________________________________________________
Processing data in table: sys/def/SYSTAB_0(0) fragment 3
_____________________________________________________
Processing data in table: mysql/def/ndb_schema(2) fragment 3
_____________________________________________________
Processing data in table: mysql/def/ndb_apply_status(4) fragment 3
_____________________________________________________
Processing data in table: test/def/t11(10) fragment 3
Restored 20 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

-d 开关的意思即:
 -d, –no-restore-disk-objects
                      Dont restore disk objects (tablespace/logfilegroups etc)
既忽略表空间和分组空间

时间: 2024-10-11 17:46:52

MYSQL集群的搭建的相关文章

五、mysql集群-MHA搭建

简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:MHA Manager(管理节

Mysql 集群环境搭建

在上一篇文章中已经详细的写了关于Mysql的安装步骤.这一篇文章在上一篇文章的基础之上接着写集群的安装与部署. 安装地址:https://www.cnblogs.com/ming-blogs/p/10962554.html MySQL主从复制配置 主节点服务器 地址 192.168.0.105 从节点服务器 地址 192.168.0.107 主节点服务器安装好之后,直接clone 一个即可,不需要重复安装2次. 主节点服务器配置 1.进入配置页面命令 vi /etc/my.cnf 2.配置服务器

mysql 集群的搭建

参考:http://blog.csdn.net/zklth/article/details/7522677 一.环境准备: 注:所有节点需要将其防墙关闭 /etc/init.d/iptables status  #查看防火墙状态 /etc/init.d/iptables stop    #关闭防火墙 1. 软件下载: ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-Cluster-7.1/ 选择 mysql-cluster-gpl-7.1.

数据切分——Atlas读写分离Mysql集群的搭建

关于数据切分的原理可以参见博客: http://blog.csdn.net/jhq0113/article/details/44226789 关于Atlas的介绍可以参见博客: http://blog.csdn.net/jhq0113/article/details/44239823 Atlas源代码用C语言编写,它对于Web Server相当于是DB,相对于DB相当于是Client,如果把Atlas的逻辑放到Web Server程序里去处理,这样会大大增加Web Server程序的复杂度,同时

项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点MySQL集群和多管理节点MySQL集群 上一篇的博客中,我们搭建的MySQL集群架构中,只存在一个管理节点,这样搭建的集群可以用如下所示的结构表示. 仔细分析上图就会发现,上图所示的单管理节点MySQL集群存在当唯一的管理节点由于网络.断电.压力过大等各种原因宕机后,数据节点和SQL节点将会各自为

MySQL集群---②Windows平台搭建MySQL CLUSTER集群

本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. MySQL集群支持多台电脑,本文搭建的MySQL集群以两台机子为例,其中一台(IP为192.168.24.33)部署管理节点.数据节点和SQL节点,另一台(IP为192.168.24.82)部署数据节点和SQL节点. 实际应用中,不要将管理节点跟数据节点部署到一台机子上,因为如果数据节点宕机会导致管理节点不可用,同时整个MySQL群集也就都不可用了.所以一个MySQL群集理想情况下至少有三台服务器,将管理节点单独放到一台

window平台如何搭建Mysql集群

为了提高系统的可用性实现系统7*24小时运行的目标,我们的项目搭建了一个mysql集群来增加系统的可靠性,下面说一下项目中mysql集群的搭建过程. 先谈谈对于搭建各种集群.分布式.负载均衡的理解,一个高可用.高性能.伸缩性强的分布式系统并不是一蹴而就,一下搭出这样的架构也有点不可能,至少个人觉得对于系统的运行状况没有一个可靠地保证,你不能保证架构中不会出现什么纰漏之处,因此架构师也是一点一点成长起来的,在小的架构解决不了目前的问题时.在不断的高并发.每年的双十一等这样的问题中成长起来的. 在我

在Windows环境下配置MySQL集群

前言 最近在项目中用到了MySQL集群,所以就和小伙伴们研究了两天.下面给大家分享一下成果. 小编始终觉得对新事物的学习,没有比看图这种方式更好地理解了.所以先来看一张mysql集群的架构图(摘自百度百科-MySQL Cluster): 上图一共分了四层:Applications.SQL.Storage.Management. 如果您的英语不是体育老师教的的话,那么您肯定已经猜出来每一层的职责了: -–Applications主要是指需要连接数据库的应用程序: -–SQL中每一个mysqld都是

CentOS-7安装Mysql集群

安装要求 安装环境:CentOS-7安装方式:源码编译安装 软件名称:mysql-cluster-gpl-7.3.7-linux2.6-x86_64.tar.gz下载地址:http://mysql.mirror.kangaroot.net/Downloads/软件安装位置:/usr/local/mysql数据存放位置:/var/mysql/data日志存放位置:/var/mysql/logs 集群设计 首先设计集群的安装分配方式,我共需要5台服务器,服务器分配如下: 管理节点:    192.1