MySQL 集群数据节点在其孪生失败时重新启动
Posted
技术标签:
【中文标题】MySQL 集群数据节点在其孪生失败时重新启动【英文标题】:MySQL cluster data node restarts when its twin fails 【发布时间】: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,
【问题讨论】:
【参考方案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,如已编辑 它仍然不断重启。我添加了我的配置文件和参数。请你看看他们。提前致谢。以上是关于MySQL 集群数据节点在其孪生失败时重新启动的主要内容,如果未能解决你的问题,请参考以下文章
超时错误重新启动 mysql (mariadb) 这是 3 节点 galera 集群中的节点之一