Mysql Cluster 7.6.10集群
准备工作
四台主机
MysqlCluster7.6.10安装包一份(如果是混合环境要准备多份)
解压时一定要在管理员权限下进行并且解压目录不能出现非英文数字字符,中文不行。
MysqlCluster包内集成的mysql-5.7.26
我的环境是一台Windows主机+三台CentOS7虚拟机
Windows7 64位 IP:192.168.84.1
CentOS7-1 64位 IP:192.168.84.132
CentOS7-2 64位 IP:192.168.84.133
CentOS7-3 64位 IP:192.168.84.134
四台主机必须可以互相ping通,同时关闭防火墙。最好都连着互联网。
集群上的节点不能存在 mysql 和 mariadb 数据库,如果有,请卸载干净。
// 列出安装的软件
# rpm -qa | grep mariadb 已经安装的软件包
// 删除已安装的软件包
# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
开始搭建集群
Web Auto Install安装方式
在安装主机上运行安装包内的 setup.bat 这个在Windows或者Linux方式一样的,选用哪个机器也没要求不过最好用的性能比较好的机器,我是方便演示所以用的Windows主机。
如果不是第一次打开应该会出现:
这时只要根据提示删除文件即可。
下面四个*.mcc是配置记录文件;不想要也可以删除。
好,此时再运行 setup.bat
这个状态会自动弹出游览器窗口
点击 Continue 继续
输入配置文件名称,点击确定
配置好了就右下角 save&next 下一步
上传可执行文件,每个主机都要有;
要将所有可执行文件开放权限:
# cd /usr/local/bin
# chmod 777 *
下一步
点击 Start cluster 之后会经历四个阶段:
1.创建目录 creating direcotry
2.分发配置文件 distribution configuration
3.启动 mgm 节点
4.启动 ndb和sql节点
如果上面某一步出错,那么请看下面的手工配置步骤来解决。
手工搭建集群
mgm节点配置
创建目录
/root/MySQL_Cluster/节点ID
Cluster核心配置文件 config.ini 内容:
#
# Configuration file for MysqlClusterConfig
#
[NDB_MGMD DEFAULT]
ArbitrationRank=1
HeartbeatIntervalMgmdMgmd=1500
Portnumber=1186
[NDB_MGMD]
NodeId=49
HostName=192.168.84.132
DataDir=/root/MySQL_Cluster/49/
Portnumber=1186
[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M
[NDBD DEFAULT]
NoOfReplicas=2
LateAlloc=1
StartNoNodeGroupTimeout=0
MaxBufferedEpochs=100
MaxBufferedEpochBytes=26214400
MaxDiskWriteSpeed=20M
MinDiskWriteSpeed=10M
MaxDiskWriteSpeedOtherNodeRestart=50M
MaxDiskWriteSpeedOwnRestart=200M
BackupMaxWriteSize=1024K
BackupWriteSize=256K
BackupDataBufferSize=1024K
BackupLogBufferSize=16M
BackupReportFrequency=10
BackupDiskWriteSpeedPct=50
CompressedBackup=true
CompressedLCP=false
MemReportFrequency=0
LogLevelStartup=1
LogLevelShutdown=0
LogLevelStatistic=0
LogLevelCheckpoint=0
LogLevelNodeRestart=0
LogLevelConnection=0
LogLevelError=0
LogLevelCongestion=0
LogLevelInfo=0
EventLogBufferSize=8K
StartupStatusReportFrequency=0
DataMemory=1M
IndexMemory=1M
MinFreePct=5
MaxNoOfAttributes=1000
MaxNoOfTables=128
MaxNoOfOrderedIndexes=128
MaxNoOfTriggers=768
MaxNoOfSubscriptions=0
MaxNoOfSubscribers=0
MaxNoOfConcurrentSubOperations=256
StringMemory=25
MaxAllocate=32M
MaxNoOfSavedMessages=25
LcpScanProgressTimeout=60
Diskless=false
LockPagesInMainMemory=1
Arbitration=Default
DiskPageBufferEntries=10
DiskPageBufferMemory=64M
SharedGlobalMemory=32M
DiskIOThreadPool=2
DiskSyncSize=4096K
LongMessageBuffer=64M
MaxParallelCopyInstances=0
MaxNoOfConcurrentTransactions=4096
MaxNoOfConcurrentOperations=131072
MaxDMLOperationsPerTransaction=4294967295
MaxNoOfConcurrentScans=256
MaxParallelScansPerFragment=256
BatchSizePerLocalScan=256
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
InitFragmentLogFiles=SPARSE
RedoBuffer=32M
RedoOverCommitCounter=3
RedoOverCommitLimit=20
TwoPassInitialNodeRestartCopy=false
BuildIndexThreads=0
MaxNoOfExecutionThreads=2
RealtimeScheduler=false
SchedulerResponsiveness=5
SchedulerSpinTimer=0
TimeBetweenLocalCheckpoints=20
TimeBetweenGlobalCheckpoints=2000
TimeBetweenGlobalCheckpointsTimeout=120000
TimeBetweenEpochs=100
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheck=6000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=4294967039
TransactionDeadlockDetectionTimeout=1200
TimeBetweenInactiveTransactionAbortCheck=1000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000
ConnectCheckIntervalDelay=0
StartPartialTimeout=30000
StartPartitionedTimeout=4294967039
StartFailureTimeout=0
ArbitrationTimeout=7500
RestartSubscriberConnectTimeout=12000
StopOnError=0
CrashOnCorruptedTuple=true
StartFailRetryDelay=0
MaxStartFailRetries=3
[NDBD]
NodeId=1
HostName=192.168.84.133
DataDir=/root/MySQL_Cluster/1/
ServerPort=11860
[NDBD]
NodeId=2
HostName=192.168.84.134
DataDir=/root/MySQL_Cluster/2/
ServerPort=11860
[MYSQLD DEFAULT]
AutoReconnect=false
BatchByteSize=16K
BatchSize=256
MaxScanBatchSize=256K
[MYSQLD]
NodeId=53
HostName=192.168.84.133
[MYSQLD]
NodeId=54
HostName=192.168.84.134
启动mgm节点:
# ndb_mgmd -f config.ini
// 集群管理程序查看节点状态
# ndb_mgm
-- NDB Cluster -- Management Client --
# show
到这个状态mgm节点就配置好了。
配置NDB节点
第一次启动
# ndbd --initial --ndb-nodeid=1 ndb-connectstring=192.168.84.132:1186
以后启动
# ndbd
启动完成之后回到mgm节点看状态
完成
配置SQL节点
/etc/my.cnf 配置文件
#
# Configuration file for MysqlClusterConfig
# Generated by mcc
#
[mysqld]
log-error=mysqld.54.err
datadir="/root/MySQL_Cluster/54/data"
tmpdir="/root/MySQL_Cluster/54/tmp"
basedir="/usr/local/bin/"
port=3306
ndbcluster=on
ndb-nodeid=54
ndb-connectstring=192.168.84.132:1186,
socket="/root/MySQL_Cluster/54/mysql.socket"
ndb-wait-setup=120
ndb-batch-size=32768
ndb-blob-read-batch-bytes=65536
ndb-blob-write-batch-bytes=65536
ndb-deferred-constraints=0
ndb-log-apply-status=0
ndb-log-empty-epochs=0
ndb-log-empty-update=0
ndb-log-exclusive-reads=0
将安装包里的 errmsg.sys 文件放到指定目录:
为了方便测试我就以免验证方式启动SQL节点
[root@node1 54]# mysqld --initialize
[root@node1 54]# mysqld_safe --skip-grant-tables
回到mgm节点查看节点状态:
所有节点状态正常。
测试
建的表engine需要指定为: ndb 不然无法发挥集群的功效,表里要建主键,没有的话系统会自建一个隐含的主键。
表引擎:
engine=ndbcluster;
// 任意sql节点
# mysql -h 127.0.0.1
# create database mcexample;
建一张表,插入几条数据;
create table if not exists mcexample.mctb1
(
name varchar(10) not null
primary key
)
engine=ndbcluster;
到另一个sql节点查看结果;
成功。
集群关闭
Mysql Cluster 关闭命令
# ndb_mgm -e shutdown
SQL 节点关闭命令
# mysqladmin -uroot -p shutdown