【问题标题】:MySQL cluster data node restarts when its twin failsMySQL 集群数据节点在其孪生失败时重新启动
【发布时间】:2014-09-18 06:30:31
【问题描述】:

配置:

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

规格:

  • MySQL 集群 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,

【问题讨论】:

    标签: mysql mysql-cluster


    【解决方案1】:

    你的两个节点设置有问题。如果您有网络问题(脑裂情况),两个节点将无法看到对方,然后,他们将决定关闭。 然后,它们将启动,但必须等待另一个节点,除非指定了“nowaitfornodes”。

    如果有 4 个节点,您将 3/1 拆分集群,因此具有网络的节点将有足够的仲裁来验证其作为仲裁者的 mgm 节点,并将成为主节点。

    您应该将 mgm 节点放置在第三台机器中(这是一个非常轻量级的进程,因此不需要特殊资源)或使用集群并将 mgm 服务绑定到 VIP 来解决此问题。否则,您将因其中一个节点的网络故障而失去服务

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

    --bind-address=name
    

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

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

    --config-cache=FALSE
    

    【讨论】:

    • 感谢您的回答。为了清楚起见:你指的是哪个节点?顺便说一句,为什么它不会发生在四个节点上?正如我所意识到的,断开连接的服务器(接口已关闭)上的数据节点已关闭。但是另一个会重新启动。即使 mgm 节点在同一台服务器上运行,它也不会发生在四个节点上。顺便说一句,我无法更改设计。
    • 我尝试使用“nowait-nodes”参数但没有成功(对于两种类型的节点)。它只防止一个节点重新启动。我找到了一些关于 MGM 节点的“ArbitrationRank”的信息,这也没有帮助。我还尝试将 VIP 用于服务器上的两个 MGM 节点。它不起作用,因为位于同一台机器上的数据节点(正在运行 MGM 节点)无法连接到 MGM 节点。 MGM 节点看到的是从虚拟 IP 而非真实 IP 进行通信的数据节点。你有什么想法可以解决吗?谢谢
    • 我们解决了 VIP 问题,强制数据节点使用真实 IP,如已编辑
    • 它仍然不断重启。我添加了我的配置文件和参数。请你看看他们。提前致谢。
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    相关资源
    最近更新 更多