2014-09-18 2 views
0

구성 :MySQL 클러스터 데이터 노드가 다시 시작 쌍둥이가 실패

  • 서버 # 1 : 1 개 MGM 노드 (# 49), 1 개 데이터 노드 (# 1), 1 개 SQL 노드 (리얼 IP 192.168.1.128)
  • 서버 # 1 : 1 mgm 노드 (# 50), 1 데이터 노드 (# 2), 1 sql 노드 (실제 IP 192.168.1.130)
  • 가상 IP : 192.168.1.240 (keepalived를 사용하여 서버 # 1을 마스터)

사양 :

,451,515,
  • MySQL 클러스터 7.3.6 x86_64의
  • 데비안 7.6 x86_64의는

그것은 MySQL 클러스터 자동 설치 프로그램을 사용하여 배포되었습니다. 모든 것은 잘 작동합니다.
그러나 하나의 노드를 종료하면 다른 서버의 데이터 노드가 다시 시작됩니다. NDB_MGM은 그것이 "시작"되었음을 보여줍니다. 그리고 "시작"상태를 종료하는 데 시간이 오래 걸립니다.
테스트 한 결과 노드가 4 개인 경우에는 발생하지 않습니다.
Doe 누구든지이 재시작의 이유를 알고 있습니까?
미리 감사드립니다.

업데이트 :
: 구성 파일 및 명령 줄
NDB_MGMD 번호 1. 구성 파일 (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 

NDB_MGMD 번호 2. 구성 파일 (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 
,210

2. 2

/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

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

4. 서버에 # ndbmtd 시작하려면 서버에 # ndbmtd 시작하려면 서버에 # ndb_mgmd 시작하려면 2

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

답변

0

두 노드 설정이 문제가됩니다. 네트워크 문제 (스플릿 브레인 상태)가 발생하면 두 노드가 서로 보이지 않게되고 종료 될 것입니다. 그런 다음 시작될 것이지만 "nowaitfornodes"가 지정되어 있지 않으면 다른 노드를 기다려야합니다.

노드가 4 개인 경우 클러스터 3/1을 분할하므로 네트워크가 연결된 노드는 중재자로서 mgm 노드의 유효성을 검사하기에 충분한 쿼럼을 가지며 마스터가됩니다.

mgm 노드를 세 번째 시스템에 배치하면 (정말 가벼운 프로세스이므로 특별한 리소스가 필요하지 않음) 또는 클러스터 및 바인딩 mgm 서비스를 VIP에 사용해야합니다. 그렇지 않은 경우 노드 중 하나에서 네트워크 장애가 발생할 경우 서비스을 잃게됩니다.귀빈의 구성 데이터 노드에 대한

실제 IP를 사용하도록 강제해야합니다

--bind-address=name 

그리고 ArbitrationTimeout는 설정 캐시를 비활성화 클러스터가 MGM 노드의 MGM 서비스

를 마이그레이션 할 수 있도록 충분히 높게 설정해야합니다 구성 변경을 더 쉽게 할 수 있습니다.

--config-cache=FALSE 
+0

답장을 보내 주셔서 감사합니다. 그것을 명확하게 이해하려면 어느 노드를 의미합니까? 그리고 그런데 왜 4 개의 노드에서 이런 일이 일어나지 않을까요? 내가 깨달은 것처럼, 연결이 끊긴 서버 (인터페이스가 다운 됨)에있는 데이터 노드가 다운됩니다. 그러나 다른 하나는 다시 시작됩니다. 그리고 mgm 노드가 동일한 서버에서 실행 중이더라도 4 개의 노드에서 다시는 발생하지 않습니다. 그건 그렇고, 나는 디자인을 바꿀 수 없다. – Rad

+0

"nowait-nodes"매개 변수를 아무런 성공없이 사용하려고 시도했습니다 (두 노드 유형 모두에 대해). 하나의 노드 만 다시 시작되는 것을 방지합니다. MGM 노드에 대해 "ArbitrationRank"에 대한 정보를 찾았습니다. 어느 정보도 도움이되지 않았습니다. 또한 서버에서 두 개의 MGM 노드에 VIP를 사용하려고했습니다. MGM 노드가 실행중인 동일한 시스템에있는 데이터 노드가 MGM 노드에 연결할 수 없으므로 작동하지 않습니다. MGM 노드는 실제 IP가 아닌 가상 IP에서 통신하는 데이터 노드를 봅니다. 어떻게 해결할 수있는 아이디어가 있습니까? 감사합니다 – Rad

+0

우리는 수정 된대로 데이터 노드가 실제 IP를 사용하도록 강제하는 VIP 문제를 해결합니다. –