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的快速部署涉及到获取软件、安装、配置和启动服务等步骤。在开发环境中,这可以帮助你快速搭建一个测试环境,理解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只需将索引和部分索引数据放在内存中,而较旧版本则要求所有数据和索引都必须存放在内存中。 - **适用场景**:适用于高并发需求的应用,特别是那些对单个请求响应时间要求...
少儿编程scratch项目源代码文件案例素材-绝地求生.zip
嵌入式八股文面试题库资料知识宝典-文思创新面试题2010-04-08.zip
一种基于剪切波和特征信息检测的太阳斑点图融合算法.pdf
内容概要:本文详细介绍了并联型有源电力滤波器(APF)在Matlab/Simulink环境下的仿真研究。主要内容涵盖三个关键技术点:一是dq与αβ坐标系下的谐波和无功检测,利用dq变换和FBD技术实现实时检测;二是两相旋转坐标系(dq)与两相静止坐标系(αβ)下的PI控制,通过调整比例和积分环节实现精准控制;三是SVPWM调制方式的应用,通过优化开关时序提升系统效率和性能。文中还提供了详细的仿真介绍文档,包括模型搭建、参数设定以及结果分析。 适合人群:从事电力电子、自动化控制领域的研究人员和技术人员,尤其是对电力滤波器仿真感兴趣的读者。 使用场景及目标:适用于需要深入了解并联型APF工作原理和实现方式的研究人员,旨在通过仿真工具掌握谐波和无功检测、PI控制及SVPWM调制的具体应用。 其他说明:本文不仅提供了理论知识,还结合了实际操作步骤,使读者能够通过仿真模型加深对APF的理解。
Arduino KEY实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。
嵌入式八股文面试题库资料知识宝典-嵌入式C语言面试题汇总(66页带答案).zip
.archivetempdebug.zip
嵌入式系统开发_CH551单片机_USB_HID复合设备模拟_基于CH551单片机的USB键盘鼠标复合设备模拟器项目_用于通过CH551微控制器模拟USB键盘和鼠标输入设备_实现硬
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-火影.zip
内容概要:本文详细介绍了两极式单相光伏并网系统的组成及其仿真优化方法。前级采用Boost电路结合扰动观察法(P&O)进行最大功率点跟踪(MPPT),将光伏板输出电压提升至并网所需水平;后级利用全桥逆变加L型滤波以及电压外环电流内环控制,确保并网电流与电网电压同频同相,实现高效稳定的并网传输。文中还提供了具体的仿真技巧,如开关频率设置、L滤波参数计算和并网瞬间软启动等,最终实现了98.2%的系统效率和低于0.39%的总谐波失真率(THD)。 适合人群:从事光伏并网系统研究、设计和开发的技术人员,特别是对Boost电路、MPPT算法、逆变技术和双环控制系统感兴趣的工程师。 使用场景及目标:适用于希望深入了解两极式单相光伏并网系统的工作原理和技术细节的研究人员和工程师。目标是在实际项目中应用这些理论和技术,提高光伏并网系统的效率和稳定性。 其他说明:文中提供的仿真技巧和伪代码有助于读者更好地理解和实现相关算法,在实践中不断优化系统性能。同时,注意电网电压跌落时快速切换到孤岛模式的需求,确保系统的安全性和可靠性。
矢量边界,行政区域边界,精确到乡镇街道,可直接导入arcgis使用
嵌入式八股文面试题库资料知识宝典-嵌入式c面试.zip
嵌入式八股文面试题库资料知识宝典-I2C总线.zip
内容概要:本文详细介绍了三种注浆模型——随机裂隙网络注浆模型、基于两相达西定律的注浆模型、基于层流和水平集的注浆扩散模型。首先,随机裂隙网络注浆模型基于地质学原理,模拟裂隙网络发育的实际地质情况,在不同注浆压力下进行注浆作业,以增强地基稳定性和提高承载能力。其次,基于两相达西定律的注浆模型利用数学公式模拟裂隙网络中的流体输送过程,适用于裂隙网络地质条件下的注浆效果分析。最后,基于层流和水平集的注浆扩散模型通过引入层流特性和水平集方法,更准确地模拟注浆过程中的扩散过程。文中还讨论了不同注浆压力对注浆效果的影响,并提出了优化建议。 适合人群:从事岩土工程、地基加固等相关领域的工程师和技术人员。 使用场景及目标:①帮助工程师选择合适的注浆模型和注浆压力;②为实际工程项目提供理论支持和技术指导;③提升地基加固的效果和效率。 其他说明:文章强调了在实际应用中需要结合地质条件、裂隙网络特点等因素进行综合分析,以达到最佳注浆效果。同时,鼓励不断创新注浆工艺和方法,以满足日益增长的地基加固需求。
内容概要:本文详细比较了COMSOL Multiphysics软件5.5和6.0版本在模拟Ar棒板粗通道流注放电现象方面的异同。重点探讨了不同版本在处理电子密度、电子温度、电场强度以及三维视图等方面的优缺点。文中不仅介绍了各版本特有的操作方式和技术特点,还提供了具体的代码实例来展示如何进行精确的仿真设置。此外,文章还讨论了网格划分、三维数据提取和电场强度后处理等方面的技术难点及其解决方案。 适合人群:从事等离子体物理研究的专业人士,尤其是熟悉COMSOL Multiphysics软件并希望深入了解其最新特性的研究人员。 使用场景及目标:帮助用户选择合适的COMSOL版本进行高效、精确的等离子体仿真研究,特别是在处理复杂的Ar棒板粗通道流注放电现象时提供指导。 其他说明:文章强调了在实际应用中,选择COMSOL版本不仅要考虑便捷性和视觉效果,还需兼顾仿真精度和可控性。