MySQL NDB Cluster简介及环境搭建

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

本文主要描述MySQL NDB Cluster简介及环境搭建。


欢迎转载,请注明作者、出处。
作者:张正
blog:http://space.itpub.net/26355921 
QQ:176036317
如有疑问,欢迎联系。


MySQL Cluster的组成有:
1.MySQL Server
2.NDB:管理数据storage
NDB 节点被组织成一个一个的NDB Group,一个NDB Group 实际上就是一组
存有完全相同的物理数据的NDB 节点群。
管理节点中有一个非常重要的参数叫NoOfReplicas,这个参数
指定了每一份数据被冗余存储在不同节点上面的份数,该参数一般至少应该被设置成2,
3.MGMT,管理节点需要最先被启动
ndb_mgm -e SHOW 查看各个节点状态是否正常,是否都已经连接到了管理节点上面。
MySQL Cluster配置:
管理节点的配置:
1.PortNumber:管理节点端口,默认为1186
2.LogDestination:管理节点上cluster日志处理方式
a) 可以写入文件如:LogDestination=FILE:filename=mycluster.
log,maxsize=500000,maxfiles=4;
b) 也可以通过标准输出来打印出来如:LogDestination=CONSOLE;
c) 还可以计入syslog 里面如:LogDestination=SYSLOG:facility=syslog;
d) 甚至多种方式共存:
LogDestination=CONSOLE;SYSLOG:facility=syslog;FILE:filename=/var/log/clusterlog
3.Datadir:设置管理节点存放文件输出的位置。
4.ArbitrationRank:配置各节点在处理某些事件出现分歧的时候的级别。有0,1,2三个值可以选择。
a) 0 代表本节点完全听其他节点的,不参与决策
b) 1 代表本节点有最高优先权,“一切由我来决策”
c) 2 代表本节点参与决策,但是优先权较1 低,但是比0 高
ArbitrationRank 参数不仅仅管理节点有,MySQL 节点也有。而且一般来说,所有
的管理节点一般都应该设置成1,所有SQL 节点都设置成2。
NDB_MGMD的配置:
1. ID为节点指定一个唯一的ID号,要求在整个Cluster环境中唯一。
2. hostname:该节点的IP地址或主机名
NDB节点配置:
NDBD_DEFAULT中的配置:
1.NoOfReplicas:每一份数据存放的份数(类似于Oracle ASM中的Redundancy)
2.DataDir:指定本地的pid 文件,trace 文件,日志文件以及错误日志子等存放的
路径,无系统默认地址,所以必须设定;
3.DataMemory:设定用于存放数据和主键索引的内存段的大小,默认值80M
4.IndexMemory:设定用于存放索引(非主键)数据的内存段大小,默认值为18M
注意:DataMemory 和IndexMemory参数设置的约束,两者任何一个达到限制数量后,
都无法再增加能存储的数据量。如果继续存入数据系统会报错“table is full”。
5.FileSystemPath:指定redo 日志,undo 日志,数据文件以及meta 数据等的存放
位置,默认位置为DataDir 的设置
6.BackupDataDir:设置备份目录路径,默认为FileSystemPath/BACKUP。
与并行事务数和其他一些并行限制有关的参数设置:
*1.MaxNoOfConcurrentTransactions:设置在一个节点上面的最大并行事务数目,默认为4096,
*2.MaxNoOfConcurrentOperations:设置同时能够被更新(或者锁定)的记录数量。其值应该设置为:总记录数,除以NDB
节点数,所得到的值
*3.MaxNoOfLocalOperations:此参数默认是MaxNoOfConcurrentOperations * 1.1
的大小,也就是说,每个节点一般可以处理超过平均值的10%的操作记录数量。但是一般来
说,MySQL 建议单独设置此参数而不要使用默认值,并且将此参数设置得更较大一些;
*4.MaxNoOfConcurrentIndexOperations:这个参数和MaxNoOfConcurrentOperations
参数比较类似,只不过所针对的是Index 的record 而已。其默认值为8192,
*5.MaxNoOfFiredTriggers
*6.TransactionBufferMemory
系统做table scan 或者range scan 的时候使用的一些buffer 的相关设置:
1.MaxNoOfConcurrentScans:这个参数主要控制在Cluster 环境中并发的table scan
和range scan 的总数量平均分配到每一个节点后的平均值。参数默认大小为256,最大只能设置为500
2.MaxNoOfLocalScans
3.BatchSizePerLocalScan
4.LongMessageBuffer
与log相关的参数配置:
log level 有从0 到15,也就是共16 种。如果设定为0,则表示不记录任何log。如果设置为最
高level,也就是15,则表示所有的信息都会通过标准输出来记录log。由于这里的所有信
息实际上都会传递到管理节点的cluster log 中,所以,一般来说,除了启动时候的log
级别需要设置为1 之外,其他所有的log level 都只需要设置为0 就可以了。
1.NoOfFragmentLogFiles 相同于Oracle的redo log的group,默认为8
2.MaxNoOfSavedMessages:这个参数设定了可以保留的trace 文件(在节点crash
的时候参数)的最大个数,文档上面说此参数默认值为25。
3.LogLevelStartup:设定启动ndb 节点时候需要记录的信息的级别(不同级别所记
录的信息的详细程度不一样),默认级别为1;
4.LogLevelShutdown:设定关闭ndb 节点时候记录日志的信息的级别,默认为0;
5.LogLevelStatistic:这个参数是针对于统计相关的日志的,就像更新数量,插入
数量,buffer 使用情况,主键数量等等统计信息。默认日志级别为0;
6.LogLevelCheckpoint:checkpoint 日志记录级别(包括local 和global 的),默认为0;
7.LogLevelNodeRestart:ndb 节点重启过程日志级别,默认为0;
8.LogLevelConnection:各节点之间连接相关日志记录的级别,默认0;
9.LogLevelError:在整个Cluster 中错误或者警告信息的日志记录级别,默认0;
10.LogLevelInfo:普通信息的日志记录级别,默认为0。
11.UndoIndexBuffer
12.UndoDataBuffer
13.RedoBuffer
SQL节点相关配置说明:
1.ArbitrationDelay:默认为0,裁定者在开始裁定之前需要被delay 多久,单位为毫秒。一般不需要更改默认值。
2.BatchByteSize:在做全表扫描或者索引范围扫描的时候,每一次fatch 的数据量,默认为32KB;
3.BatchSize:类似BatchByteSize 参数,只不过BatchSize 所设定的是每一次fetch
  的record 数量,而不是物理总量,默认为64,最大为992
4.MaxScanBatchSize:在Cluster 环境中,进行并行处理的情况下,所有节点的
  BatchSize 总和的最大值。默认值为256KB,最大值为16MB。
5.[MySQLD]参数组,仅有id 和hostname




MySQL Cluster搭建

下载地址:http://dev.mysql.com/downloads/cluster/#downloads
三台主机安装MySQL Cluster RPM包

/etc/hosts
192.168.119.128  host1    #管理节点ndb_mgm
192.169.119.129  host2  #SQL节点1、NDB节点1
192.168.119.130  host3  #SQL节点2、NDB节点2

Notes:1.其中SQL节点与NDB节点是独立的,可位于不同的主机上
       2.MySQL Cluster的RPM包安装后,ndbd、ndb_mgm等程序都在/usr/bin下,因此我将/usr作为basedir

三台主机上创建mysql用户和组、并创建目录:
groupadd mysql
useradd -g mysql mysql
mkdir -p /opt/cluster/data
chown -R mysql:mysql /opt/cluster

一、管理节点(host1)
管理节点的配置文件
vi /opt/cluster/config.ini
[ndbd default]
DataMemory=40M
NoOfReplicas=2
IndexMemory=10M

[ndb_mgmd]
id=1
hostname=host1
DataDir=/opt/cluster

[ndbd]
id=2
HostName=host2
DataDir=/opt/cluster   #实际的Cluster数据文件存放位置

[ndbd]
id=3
HostName=host3
DataDir=/opt/cluster   #实际的Cluster数据文件存放位置

[mysqld]
id=4
HostName=host2

[mysqld]
id=5
HostName=host3

二、NDB和SQL节点(host2和host3)
配置文件:vi /etc/my.cnf
[mysqld]  #针对MySQL Server
port = 3306 #(SQL节点2为:3307)
socket = /tmp/mysql.sock
datadir=/opt/cluster/data       #MySQL节点中,系统数据文件存放的位置
basedir=/usr
ndbcluster
ndb-connectstring=host1
#default_storage_engine=ndb     #可在整个环境搭建好后,再加上这两个参数,
#default_tmp_storage_engine=ndb #否则在初始化启动SQL节点时会报错。

[mysql_cluster]    #针对NDB
ndb-connectstring=host1

[client]
socket=/tmp/mysql.sock

三、SQL节点数据库系统文件初始化(host2和host3)
mysql_install_db --datadir=/opt/cluster/data --basedir=/usr --user=mysql

四、启动
1.启动管理节点(host1)
ndb_mgmd --initial -f /opt/cluster/config.ini
2.分别启动NDB节点(host2和host3)
ndbd --initial
3.分别启动SQL节点(host2和host3)      #此步骤经常会报各种错误,需要查看localhost.err的[ERROR]记录逐个解决
mysqld_safe --defaults-file=/etc/my.cnf --datadir=/opt/cluster/data --user=mysql &
4.查看各节点状态:
ndb_mgm -e show
如下:
[root@host2 cluster]# ndb_mgm -e show
Connected to Management Server at: host1:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.119.129  (mysql-5.6.11 ndb-7.3.2, Nodegroup: 0, Master)
id=3    @192.168.119.130  (mysql-5.6.11 ndb-7.3.2, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.119.128  (mysql-5.6.11 ndb-7.3.2)

[mysqld(API)]   2 node(s)
id=4    @192.168.119.129  (mysql-5.6.11 ndb-7.3.2)
id=5    @192.168.119.130  (mysql-5.6.11 ndb-7.3.2)

5.如果root用户无法从host2连接到host3的MySQL Server,则需增加root从host2访问host3 的权限:
在host3上:grant usage on *.* to root@host2;

6.可以修改MySQL Server的默认参数:
default_storage_engine=ndb    
default_tmp_storage_engine=ndb
本文转自ITPUB博客84223932的博客,原文链接:MySQL NDB Cluster简介及环境搭建,如需转载请自行联系原博主。
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
5351
分享
相关文章
MySQL原理简介—6.简单的生产优化案例
本文介绍了数据库和存储系统的几个主题: 1. **MySQL日志的顺序写和数据文件的随机读指标**:解释了磁盘随机读和顺序写的原理及对数据库性能的影响。 2. **Linux存储系统软件层原理及IO调度优化原理**:解析了Linux存储系统的分层架构,包括VFS、Page Cache、IO调度等,并推荐使用deadline算法优化IO调度。 3. **数据库服务器使用的RAID存储架构**:介绍了RAID技术的基本概念及其如何通过多磁盘阵列提高存储容量和数据冗余性。 4. **数据库Too many connections故障定位**:分析了MySQL连接数限制问题的原因及解决方法。
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
148 72
MySQL原理简介—1.SQL的执行流程
本文介绍了MySQL驱动、数据库连接池及SQL执行流程的关键组件和作用。主要内容包括:MySQL驱动用于建立Java系统与数据库的网络连接;数据库连接池提高多线程并发访问效率;MySQL中的连接池维护多个数据库连接并进行权限验证;网络连接由线程处理,监听请求并读取数据;SQL接口负责执行SQL语句;查询解析器将SQL语句解析为可执行逻辑;查询优化器选择最优查询路径;存储引擎接口负责实际的数据操作;执行器根据优化后的执行计划调用存储引擎接口完成SQL语句的执行。整个流程确保了高效、安全地处理SQL请求。
229 76
MySQL原理简介—9.MySQL索引原理
本文详细介绍了MySQL索引的设计与使用原则,涵盖磁盘数据页的存储结构、页分裂机制、主键索引设计及查询过程、聚簇索引和二级索引的原理、B+树索引的维护、联合索引的使用规则、SQL排序和分组时如何利用索引、回表查询对性能的影响以及索引覆盖的概念。此外还讨论了索引设计的案例,包括如何处理where筛选和order by排序之间的冲突、低基数字段的处理方式、范围查询字段的位置安排,以及通过辅助索引来优化特定查询场景。总结了设计索引的原则,如尽量包含where、order by、group by中的字段,选择离散度高的字段作为索引,限制索引数量,并针对频繁查询的低基数字段进行特殊处理等。
MySQL原理简介—9.MySQL索引原理
MySQL原理简介—12.MySQL主从同步
本文介绍了四种为MySQL搭建主从复制架构的方法:异步复制、半同步复制、GTID复制和并行复制。异步复制通过配置主库和从库实现简单的主从架构,但存在数据丢失风险;半同步复制确保日志复制到从库后再提交事务,提高了数据安全性;GTID复制简化了配置过程,增强了复制的可靠性和管理性;并行复制通过多线程技术降低主从同步延迟,保证数据一致性。此外,还讨论了如何使用工具监控主从延迟及应对策略,如强制读主库以确保即时读取最新数据。
MySQL原理简介—12.MySQL主从同步
MySQL原理简介—7.redo日志的底层原理
本文介绍了MySQL中redo日志和undo日志的主要内容: 1. redo日志的意义:确保事务提交后数据不丢失,通过记录修改操作并在系统宕机后重做日志恢复数据。 2. redo日志文件构成:记录表空间号、数据页号、偏移量及修改内容。 3. redo日志写入机制:redo日志先写入Redo Log Buffer,再批量刷入磁盘文件,减少随机写以提高性能。 4. Redo Log Buffer解析:描述Redo Log Buffer的内存结构及刷盘时机,如事务提交、Buffer过半或后台线程定时刷新。 5. undo日志原理:用于事务回滚,记录插入、删除和更新前的数据状态,确保事务可完整回滚。
135 22
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
MySQL原理简介—8.MySQL并发事务处理
这段内容深入探讨了SQL语句执行原理、事务并发问题、MySQL事务隔离级别及其实现机制、锁机制以及数据库性能优化等多个方面。
MySQL原理简介—2.InnoDB架构原理和执行流程
本文介绍了MySQL中更新语句的执行流程及其背后的机制,主要包括: 1. **更新语句的执行流程**:从SQL解析到执行器调用InnoDB存储引擎接口。 2. **Buffer Pool缓冲池**:缓存磁盘数据,减少磁盘I/O。 3. **Undo日志**:记录更新前的数据,支持事务回滚。 4. **Redo日志**:确保事务持久性,防止宕机导致的数据丢失。 5. **Binlog日志**:记录逻辑操作,用于数据恢复和主从复制。 6. **事务提交机制**:包括redo日志和binlog日志的刷盘策略,确保数据一致性。 7. **后台IO线程**:将内存中的脏数据异步刷入磁盘。
105 12
MySQL原理简介—11.优化案例介绍
本文介绍了四个SQL性能优化案例,涵盖不同场景下的问题分析与解决方案: 1. 禁止或改写SQL避免自动半连接优化。 2. 指定索引避免按聚簇索引全表扫描大表。 3. 按聚簇索引扫描小表减少回表次数。 4. 避免产生长事务长时间执行。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等