MySQL Cluster简介和搭建例子

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上:

mysql> grant usage on *.* to root@host2;

另外一个例子是

对于GRANT USAGE ON,查看手册有如下介绍和实例:

mysql> GRANT USAGE ON *.* TO ‘zhangkh’@'localhost’;

一个账户有用户名zhangkh,没有密码。该账户只用于从本机连接。未授予权限。通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。它可以将所有全局权限设为’N'。假定你将在以后将具体权限授予该账户。



6.可以修改MySQL Server的默认参数:
default_storage_engine=ndb    
default_tmp_storage_engine=ndb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值