MySQL群集数据节点在其双胞胎发生故障时重新启动

时间:2014-09-18 06:30:31

标签: mysql mysql-cluster

配置:

  • 服务器#1:1 mgm节点(#49),1个数据节点(#1),1个sql节点(Real IP 192.168.1.128)
  • 服务器#2:1 mgm节点(#50),1个数据节点(#2),1个sql节点(Real IP 192.168.1.130)
  • 虚拟IP:192.168.1.240(使用keepalived,服务器#1作为主服务器)

规格:

  • MySQL Cluster 7.3.6 x86_64
  • Debian 7.6 x86_64

使用MySQL Cluster Auto-Installer部署了它。一切都运作得很好。
但是,当我关闭一个节点时,另一台服务器上的数据节点将重新启动。 NDB_MGM显示它是"开始"。退出"开始"需要很长时间。状态。
正如我测试的那样,当有四个节点时,它不会发生 有谁知道重启的原因是什么? 提前谢谢。

更新:配置文件和命令行参数
1. NDB_MGMD#50的配置文件

#
# Configuration file for MyCluster NDB_MGMD #49
# /usr/local/mysql/data/49/config.ini

[NDB_MGMD DEFAULT]
Portnumber=1186

[NDB_MGMD]
NodeId=49
HostName=192.168.1.128
DataDir=/usr/local/mysql/data/49/
Portnumber=1186

[NDB_MGMD]
NodeId=50
HostName=192.168.1.130
DataDir=/usr/local/mysql/data/50/
Portnumber=1186

[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M

[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=1M
IndexMemory=1M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000

[NDBD]
NodeId=1
HostName=192.168.1.128
DataDir=/usr/local/mysql/data/1/

[NDBD]
NodeId=2
HostName=192.168.1.130
DataDir=/usr/local/mysql/data/2/

[MYSQLD DEFAULT]

[MYSQLD]
NodeId=53
HostName=192.168.1.128

[MYSQLD]
NodeId=54
HostName=192.168.1.130

2。 NDB_MGMD#50的配置文件

#
# Configuration file for MyCluster NDB_MGMD #50
# /usr/local/mysql/data/50/config.ini

[NDB_MGMD DEFAULT]
Portnumber=1186

[NDB_MGMD]
NodeId=49
HostName=192.168.1.128
DataDir=/usr/local/mysql/data/49/
Portnumber=1186

[NDB_MGMD]
NodeId=50
HostName=192.168.1.130
DataDir=/usr/local/mysql/data/50/
Portnumber=1186

[TCP DEFAULT]
SendBufferMemory=4M
ReceiveBufferMemory=4M

[NDBD DEFAULT]
BackupMaxWriteSize=1M
BackupDataBufferSize=16M
BackupLogBufferSize=4M
BackupMemory=20M
BackupReportFrequency=10
MemReportFrequency=30
LogLevelStartup=15
LogLevelShutdown=15
LogLevelCheckpoint=8
LogLevelNodeRestart=15
DataMemory=1M
IndexMemory=1M
MaxNoOfTables=4096
MaxNoOfTriggers=3500
NoOfReplicas=2
StringMemory=25
DiskPageBufferMemory=64M
SharedGlobalMemory=20M
LongMessageBuffer=32M
MaxNoOfConcurrentTransactions=16384
BatchSizePerLocalScan=512
FragmentLogFileSize=64M
NoOfFragmentLogFiles=16
RedoBuffer=32M
MaxNoOfExecutionThreads=2
StopOnError=false
LockPagesInMainMemory=1
TimeBetweenEpochsTimeout=32000
TimeBetweenWatchdogCheckInitial=60000
TransactionInactiveTimeout=60000
HeartbeatIntervalDbDb=15000
HeartbeatIntervalDbApi=15000

[NDBD]
NodeId=1
HostName=192.168.1.128
DataDir=/usr/local/mysql/data/1/

[NDBD]
NodeId=2
HostName=192.168.1.130
DataDir=/usr/local/mysql/data/2/

[MYSQLD DEFAULT]

[MYSQLD]
NodeId=53
HostName=192.168.1.128

[MYSQLD]
NodeId=54
HostName=192.168.1.130

命令行参数:
1.在服务器#1上启动ndb_mgmd

/usr/local/mysql/bin/ndb_mgmd --initial --ndb-nodeid=49 \
--config-dir=/usr/local/mysql/data/49/ \
--config-file=/usr/local/mysql/data/49/config.ini

2。在服务器#2上启动ndb_mgmd

/usr/local/mysql/bin/ndb_mgmd --initial --ndb-nodeid=50 \
--config-dir=/usr/local/mysql/data/50/ \
--config-file=/usr/local/mysql/data/50/config.ini

3。在服务器#1上启动ndbmtd

/usr/local/mysql/bin/ndbmtd --ndb-nodeid=1 --bind-address=192.168.1.128 \
--ndb-connectstring=192.168.1.240:1186,

4。在服务器#2上启动ndbmtd

/usr/local/mysql/bin/ndbmtd --ndb-nodeid=2 --bind-address=192.168.1.130 \
--ndb-connectstring=192.168.1.240:1186,

1 个答案:

答案 0 :(得分:0)

双节点设置时出现问题。如果您遇到网络问题(裂脑情况),两个节点都不会看到对方,然后他们会决定关机。 然后,他们将开始,但他们将不得不等待另一个节点,除非" nowaitfornodes"已指定。

使用4个节点,您可以拆分群集3/1,因此具有网络功能的节点将具有足够的法定数量来验证它的mgm节点作为仲裁者,并且将成为主节点。

你应该解决这个问题,要么将mgm节点放在第三台机器上(它是一个非常轻的过程,所以不需要特殊资源)或者使用Cluster和绑定mgm服务到VIP。如果没有,您将失去其中一个节点的网络故障服务

对于VIP配置数据,必须强制节点使用真实IP:

--bind-address=name

并且应将ArbitrationTimeout设置得足够高以允许群集迁移mgm服务

对于mgm节点,禁用配置缓存将使配置更改更容易

--config-cache=FALSE