1.1 mysql-cluster简介
简单的说,MySQLCluster实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDBCluster(简称NDB)存储引擎来实现。
MySQLCluster刚刚诞生的时候可以说是一个可以对数据进行持久化的内存数据库,所有数据和索引都必须装载在内存中才能够正常运 行,但是最新的MySQLCluster版本已经可以做到仅仅将所有索引和索引数据装载在内存中即可,实际的数据可以不用全部装载到内存中,架构如下图所 示:
1.2 请看Cluster结构图
1.3 Cluster主要结构
这类节点的作用是管理MySQLCluster内的其他节点,如提供配 置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启 动这类节点。MGM节点是用命令“ndb_mgmd”启动的。
对硬件没什么要求,差一点的机器完全能够胜任。默认端口1186。
这类节点用于保存Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。
可以选择大内存,cpu也相对来讲不错的,尤其是以后ndbmtd对多核Cpu的支持。默认端口2202
这是用来访问Cluster数据的节点。对于MySQLCluster,客户端节点是使用NDBCluster存储引擎的传统MySQL服务器。通 常,SQL节点是使用命令“mysqld–ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启 动。
对cpu要求较高,选择多核,高频CPU较好
1.4 Cluster特性
支持事务:和Innodb一样,支持事务
可与mysqld不在一台主机:可以和mysqld分开存在于独立的主机上,然后通过网络和mysqld通信交互。
内存需求量巨大:新版本索引以及被索引的数据必须存放在内存中,老版本所有数据和索引必须存在与内存中
具有非常高的并发需求
对单个请求的响应并不是非常的critical
查询简单,过滤条件较为固定,每次请求数据量较少,又不希望自己进行水平Sharding
尽可能让查询简单,避免数据的跨节点传输;尽可能满足SQL节点的计算性能,大一点的集群SQL节点会明显多余Data节点;在各节点之间尽可能使用万兆网络环境互联,以减少数据在网络层传输过程中的延时
1.5 mysql-cluster的优缺点
1) 99.999 %的高可用性
2) 快速的自动失效切换
3) 灵活的分布式体系结构,没有单点故障
4) 高吞吐量和低延迟
5) 可扩展性强,支持在线扩容
1) 存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)
2) 部署、管理、配置很复杂
3) 占用磁盘空间大,内存大
4) 备份和恢复不方便
5) 复杂的sql查询性能一般
2 安装
2.1 环境介绍
shell> tar -xvfmysql-cluster-gpl-7.2.4-linux2.6-x86_64.tar.gz
shell> mkdir-p /usr/local/mysql/bin
shell> mkdir-p /usr/local/mysql/ndbdata
shell> vi ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
shell> cdmysql-cluster-gpl-7.2.4-linux2.6-x86_64
shell> cp bin/ndb_mgmd/usr/local/mysql/bin
shell> cp bin/ndb_mgm/usr/local/mysql/bin
shell> mkdir/var/lib/mysql-cluster
shell> mkdir/usr/local/mysql/cluster-conf
shell> vi /usr/local/mysql/cluster-conf/config.ini
2.2 管理节点配置文件
[NDBDDEFAULT]
#TotalSendBufferMemory= 256M
NoOfReplicas=2
DataMemory=2500M
IndexMemory=256M
DataDir=/var/lib/mysql-cluster
#FileSystemPath=/data/dbdata
#Redolog
FragmentLogFileSize=32M
InitFragmentLogFiles=SPARSE
NoOfFragmentLogFiles=8
RedoBuffer=1024M
StringMemory=25
LockPagesInMainMemory=1
MaxNoOfTables=4096
MaxNoOfOrderedIndexes=2048
MaxNoOfUniqueHashIndexes=1024
MaxNoOfAttributes=24576
MaxNoOfTriggers=14336
ODirect=1
MaxNoOfConcurrentTransactions=10000
MaxNoOfConcurrentOperations=50000
MaxNoOfLocalOperations=55000
TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=100
TimeBetweenWatchdogCheckInitial=60000
TransactionBufferMemory=10M
DiskCheckpointSpeed=10M
DiskCheckpointSpeedInRestart=100M
TimeBetweenLocalCheckpoints=20
SchedulerSpinTimer=400
SchedulerExecutionTimer=100
RealTimeScheduler=1
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
MaxNoOfExecutionThreads=4
TransactionDeadLockDetectionTimeOut=10000
BatchSizePerLocalScan=512
###Increasing the LongMessageBufferb/c of a bug (20090903)
LongMessageBuffer=8M
###Heartbeating
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
[MGMDEFAULT]
PortNumber:1186
DataDir:/var/lib/mysql-cluster1
[TCPDEFAULT]
SendBufferMemory:64M
#######################################
#Change HOST1 to the name of the NDB_MGMD host
#Change HOST8 to the name of the NDBD host
#Change HOST9 to the name of the NDBD host
#######################################
[NDB_MGMD]
NodeId:1
HostName:10.100.200.36
ArbitrationRank:1
[NDBD]
NodeId:4
HostName:10.100.200.37
[NDBD]
NodeId:5
HostName:10.100.200.38
######################################################
#Note: The following can be MySQLDconnections or #
# NDB API application connecting to thecluster #
######################################################
[API]
NodeId:10
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:11
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:12
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:13
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:14
HostName:10.100.200.39
ArbitrationRank:2
[API]
NodeId:15
HostName:10.100.200.41
ArbitrationRank:2
[API]
NodeId:16
HostName:10.100.200.41
ArbitrationRank:2
[API]
NodeId:17
HostName:10.100.200.41
ArbitrationRank:2
[root@banggocluster-conf]#ndb_mgmd-f /usr/local/mysql/cluster-conf/config.ini
ndbd–initial #(第一次启动必须添加选项,另外备份/恢复,修改配置文件也需要执行)
ndbd #不是第一次启动需要执行的命令
/etc/rc.d/init.d/mysqldstart或servicemysqldstart
启动后可以用mysql-uroot -p验证mysql服务状态
/etc/rc.d/init.d/mysqldstop或servicemysqld stop
ndbdstop
ndb_mgm〉shutdown
验证配置的正确性
1、在管理节点执行:ndb_mgm-> show
[root@banggo~]# ndb_mgm
--NDB Cluster -- Management Client --
ndb_mgm>show
Connectedto Management Server at: localhost:1186
ClusterConfiguration
---------------------
[ndbd(NDB)] 2 node(s)
id=4 @10.100.200.37 (mysql-5.5.19 ndb-7.2.4, Nodegroup:0, Master)
id=5 @10.100.200.38 (mysql-5.5.19 ndb-7.2.4, Nodegroup:0)
[ndb_mgmd(MGM)]1 node(s)
id=1 @10.100.200.36 (mysql-5.5.19 ndb-7.2.4)
[mysqld(API)] 2 node(s)
id=10 @10.100.200.39 (mysql-5.5.19 ndb-7.2.4)
………
id=14 @10.100.200.41 (mysql-5.5.19 ndb-7.2.4)
………
7 ndbcluster存储引擎功能测试(与innoDB对比)
8 MySQLClster备份与恢复
备份
采用ndb_mgm管理客户端来备份,在管理节点执行ndb_mgm即可进入管理命令行,输入startbackup开始备份所有节点,如果后面还跟着对应数据节点的id就只备份对应的数据节点
恢复(参考:http://xxtianxiaxing.iteye.com/blog/563063)
使用命令ndb_restore进行恢复,具体过程如下:
启动管理节点
/usr/bin/ndb_mgmd-f /usr/local/mysql/mysql-cluster/config.ini--reload
启动数据节点:
/usr/bin/ndbd --initial
第一个节点恢复的时候
在第一个节点恢复表结构(恢复的时候如果不涉及到表结构的变更,不用使用参数-m)
/usr/bin/ndb_restore -c 10.100.200.37-n 11 -b 1 -m --backup_path=/data/backup/backup-1/
恢复数据,恢复数据的时候可以几个ndb节点一起执行,速度会快一点!
/usr/bin/ndb_restore -c 10.100.200.37-n 11 -b 1 -r --backup_path=/data/backup/backup-1/
其他节点恢复的时候(以后的节点不需要加-m参数)
/usr/bin/ndb_restore -c 192.168.100.223 -n 11 -b 1 -r --backup_path=/data/dbdata1/BACKUP/BACKUP-1/
9 MySQLClster在线添加节点1
[NDBD]
id=21
HostName=10.100.200.37
[NDBD]
id=22
HostName=10.100.200.38
10 MySQLClster用户权限共享
mysql>CALLmysql.mysql_cluster_move_privileges();
shell>mysqldumpmysql userdbtables_privcolumns_privprocs_priv>backup_file.sql
mysql>show create tablemysql.user;看engine是否为ndbcluster。
mysql>grant all on *.* to test@'10.100.200.%' identified by 'test123';
[root@banggo~]#mysql-h10.100.200.39 -utest-ptest123 -P3307;
OK,能连上,测试成功!
11.1 MySQLClster备份与恢复扩展(操作见No8)
备份指的是在给定时间对数据库的快照。备份包含三个主要部分:
(1)Metadata(元数据):所有数据库表的名称和定义。
(2)Tablerecords(表记录):执行备份时实际保存在数据库表中的数据。
(3)Transactionlog(事务日志):指明如何以及何时将数据保存在数据库中的连续记录。
每一部分(这三部分)均会保存在参与备份的所有数据节点上。在备份过程中,每个节点均会将这三个部分保存在磁盘上的三个文件中(意思是说,有几个节点,将会把相同的数据,保存几份.例如,2个数据节点,那么就会分别在2个节点上,保存2次,保存目录默认为
[NDBD]
DateDir=/usr/local/mysql/BACKUP
(4)BACKUP-backup_id.node_id.ctl
包含控制信息和元数据的控制文件。每个节点均会将相同的表定义(对于簇中的所有表)保存在自己的该文件中
(5)BACKUP-backup_id-0.node_id.data
包含表记录的数据文件,它是按片段保存的,也就是说,在备份过程中,不同的节点会保存不同的片段。每个节点保存的文件以指明了记录所属表的标题开始。在记录清单后面有一个包含关于所有记录校验和的脚注。
(6)BACKUP-backup_id.node_id.log
包含已提交事务的记录的日志文件。在日志中,仅保存已在备份中保存的表上的事务。参与备份的节点将保存不同的记录,这是因为,不同的节点容纳了不同的数据库片段。
在上面所列的内容中,backup_id指的是备份ID,node_id是创建文件的节点的唯一ID。
使用管理服务器创建备份开始备份前,请确保已为备份操作恰当地配置了簇。
本节讨论的参数定义了与在线备份执行有关的内存缓冲集。
(1)BackupDataBufferSize
在创建备份的过程中,为了将数据发送到磁盘,将使用两类缓冲。备份数据缓冲用于填充由扫描节点的表而记录的数据。一旦将该缓冲填充到了指定的水平 BackupWriteSize(请参见下面的介绍),就会将页发送至磁盘。在将页写入磁盘的同时,备份进程能够继续填充该缓冲,直至其空间消耗完为止。 出现该情况时,备份进程将暂停扫描,直至一些磁盘写入操作完成并释放了内存为止,然后扫描继续。
该参数的默认值为2MB。
(2)BackupLogBufferSize
备份日志缓冲扮演的角色类似于备份数据缓冲,不同之处在于,它用于生成备份执行期间进行的所有表写入的日志。相同的原理也适用于备份数据缓冲情形下的页写 入,不同之处在于,当备份日志缓冲中没有多余空间时,备份将失败。出于该原因,备份日志缓冲的大小应足以处理执行备份时产生的负载。
该参数的默认值对于大多数应用程序均是适当的。事实上,备份失败的原因更可能是因为磁盘写入速度不够,而不是备份日志缓冲变满。如果没有为应用程序产生的 写负载配置磁盘子系统,簇很可能无法执行所需的操作。最好按恰当的方式配置簇,使得处理器成为瓶颈而不是磁盘或网络连接。默认值是2MB。
(3)BackupMemory
该参数是BackupDataBufferSize和BackupLogBufferSize之和。默认值是2MB+ 2MB = 4MB。
(4)BackupWriteSize
该参数指定了由备份日志缓冲和备份数据缓冲写入磁盘的消息大小。默认值是32KB.
(5)BackupDataDir
#可更改默认的备份目录,BackupDataDir=/mysqlback
#当然前提,mkdir/mysqlback,需要在所有数据节点上运行
也能指定存放备份的目录。默认情况下,该目录是FileSystemPath/BACKUP
(6)FileSystemPath
该参数指定了存放为元数据创建的所有文件、REDO日志、UNDO日志和数据文件的目录。默认目录是由DataDir指定的。注意,启动ndbd进程之前,该目录必须已存在。
(7)DataDir
该参数指定了存放跟踪文件、日志文件、pid文件以及错误日志的目录。
12.1 Join的改进1
我们知道在7.2之前的版本都是将jion在mysqld节点执行,这样就需要从数据节点进行交互传输数据,造成join的性能非常差。现在7.2版本将join放到了数据节点执行,并行处理,较少了数据在sql节点的交互,因此性能大幅提升。
点击(此处)折叠或打开
- mysql>set ndb_join_pushdown=0;
- mysql>show variables like \'%ndb_join_pushdown%\';
- +-------------------+-------+
- | Variable_name | Value |
- +-------------------+-------+
- | ndb_join_pushdown | OFF |
- +-------------------+-------+
- mysql>SELECT sql_no_cacheCOUNT(*) FROM residents,postcodesWHERE residents.postcode=postcodes.postcodeAND postcodes.town=\"MAIDENHEAD\";
- +----------+
- |COUNT(*) |
- +----------+
- | 20000 |
- +----------+
- 1row in set (17.68 sec)
- mysql>set ndb_join_pushdown=1;
- mysql>show variables like \'%ndb_join_pushdown%\';
- +-------------------+-------+
- |Variable_name | Value |
- +-------------------+-------+
- |ndb_join_pushdown| ON |
- +-------------------+-------+
- mysql>SELECT sql_no_cacheCOUNT(*) FROM residents,postcodesWHERE residents.postcode=postcodes.postcodeAND postcodes.town=\"MAIDENHEAD\";
- +----------+
- |COUNT(*) |
- +----------+
- | 20000 |
- +----------+
- 1row in set (1.72 sec)
13.1 磁盘存储表
点击(此处)折叠或打开
- CREATELOGFILE GROUP lg_2
- ADD UNDOFILE \'undo_2.log\'
- INITIAL_SIZE 536870912
- UNDO_BUFFER_SIZE 67108864
- ENGINE NDBCLUSTER;
#创建表空间,并添加数据文件
点击(此处)折叠或打开
- CREATETABLESPACE ts_2
- ADDDATAFILE \'data_2.dat\'
- USE LOGFILE GROUP lg_2
- INITIAL_SIZE 536870912
- ENGINE NDBCLUSTER;
- CREATETABLE `bgtdisk`( #创建使用磁盘存储的表:
- `Name` varchar(50) NOT NULL,
- `ProviderName`varchar(200) NOT NULL,
- PRIMARY KEY (`Name`)
- ) tablespace ts_2 storage disk ENGINE=ndbcluster DEFAULT CHARSET=utf8;
点击(此处)折叠或打开
- mysql>insert intobgtdiskselect * from postcodes;
- Query OK, 100000 rows affected (9.68 sec)
- Records: 100000 Duplicates: 0 Warnings: 0
Query OK, 1000000 rows affected (1 min 55.28sec) Records: 1000000 Duplicates: 0 Warnings: 0
点击(此处)折叠或打开
- mysql>SELECT TABLESPACE_NAME, FILE_NAME, EXTENT_SIZE*TOTAL_EXTENTS/1024/1024 ASTOTAL_MB, EXTENT_SIZE*FREE_EXTENTS/1024/1024 AS FREE_MB, EXTRA FROMinformation_schema.FILESWHERE FILE_TYPE=\"DATAFILE\";
- +-----------------+------------+--------------+--------------+----------------+
- |TABLESPACE_NAME | FILE_NAME |TOTAL_MB | FREE_MB | EXTRA |
- +-----------------+------------+--------------+--------------+----------------+
- |ts_1 | data_1.dat |512.00000000 | 301.00000000 | CLUSTER_NODE=4 |
- |ts_1 | data_1.dat |512.00000000 | 301.00000000 | CLUSTER_NODE=5 |
- |ts_1 | data_1.dat |512.00000000 | 300.00000000 | CLUSTER_NODE=6 |
- +-----------------+------------+--------------+--------------+----------------+
- 3rows in set (0.05 sec)
相关推荐
本文档将详细介绍如何在三台服务器上部署一个 MySQL Cluster 7.2.4 的集群环境。MySQL Cluster 是一种高可用性解决方案,它允许数据在多台计算机之间进行复制,从而实现数据冗余和负载均衡。本配置适用于希望快速...
MySQL Cluster GPL 7.2.4-win32是一款专为Windows 32位操作系统设计的高性能、高可用性的数据库集群解决方案。MySQL Cluster以其分布式架构、数据复制和自动故障切换等功能,为企业提供了强大的数据库服务保障。 ...
在"MySQL-Cluster-test-gpl-7.2.4-1.sles11.x86_64.rar"这个压缩包中,我们主要关注的是MySQL Cluster的7.2.4版本,这是一个专为SUSE Linux Enterprise Server 11 (SLES11)的64位架构优化的测试版。 MySQL Cluster...
- **内存需求**:较新版本的MySQL Cluster只需将索引和部分索引数据放在内存中,而较旧版本则要求所有数据和索引都必须存放在内存中。 - **适用场景**:适用于高并发需求的应用,特别是那些对单个请求响应时间要求...
MySQL-Cluster-embedded-gpl-7.2.4-1.sles11.x86_64.rarMySQL-Cluster-embedded-gpl-7.2.4-1.sles11.x86_64.rar
Redis-7.2.4 是 Redis 的最新版本,相较于之前的版本,它可能包含了一些新的特性、性能优化以及安全增强。 在 Redis 7.2.4 中,我们可以期待以下关键知识点: 1. **新特性**:每个新版本的 Redis 都会引入一些新...
3. 语法改进:引入了新的语法特性,如非捕获组的命名支持,使得代码可读性和可维护性得到提高。 4. 错误处理:PHP 7.2.4引入了更友好的错误报告机制,提供了更好的错误处理方式,便于开发者调试和定位问题。 二、...
总之,“redis-windows-7.2.4.zip”提供了一个便捷的方式来在Windows系统上部署和使用Redis,无论是开发测试还是生产环境,都能享受到Redis带来的高效数据处理体验。用户只需简单几步,就可以利用这个免安装版本开始...
在最新的v7.2.4版本中,WoodMart继续提升了用户体验,优化了性能,并引入了一些新的特性。 一、主题特性 1. **响应式设计**:WoodMart主题采用响应式布局,确保无论是在桌面、平板还是手机上,网站都能呈现出良好...
7.2.4是Redis的一个稳定版本,包含了修复错误、性能优化以及新功能的更新。解压这个压缩包后,你会得到Redis的Windows构建,包括可执行文件和服务脚本等。 1. **Redis的核心特性**: - **键值存储**:Redis基于...
1. 性能优化:每个新版本都会针对特定场景进行性能优化,7.2.4也不例外,可能包括命令执行速度提升、内存管理改进等。 2. 新增命令:可能会有新的命令添加,以满足更多数据操作需求。 3. 安全性增强:可能会引入新的...
PowerShell 7.2.4是该平台的最新64位版本,相较于早期的PowerShell 5,它带来了许多显著的改进和增强,旨在提高效率、性能和兼容性。 首先,PowerShell 7引入了跨平台支持,这意味着它不仅能在Windows上运行,还能...
fortigate7.2.4
系统当前共安装有 203570 个文件和目录。) 准备解压 .../ca-certificates-java_20190405ubuntu1_all.deb ... 正在解压 ca-certificates-java (20190405ubuntu1) ... 正在选中未选择的软件包 java-common。 准备解压...
1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. ...
1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. ...
10. **文档更新**:与新版本一同发布的还有详尽的更新文档,指导用户如何升级到 7.2.4 版本,以及新特性的使用方法。 安装 Redis 7.2.4 时,首先解压 `redis-7.2.4.tar.gz` 文件,然后按照官方文档的编译和配置步骤...
3. **MySQL-Cluster-shared-compat-gpl-7.2.4-1.sles11.x86_64.rpm** 和 **MySQL-Cluster-gpl-shared-compat-7.2.4-1.sles11.x86_64.rpm**:这两个包可能提供了与旧版本MySQL兼容的共享库。"compat"通常意味着这些库...