Configurei um cluster ndb com 7 nós. 3 nós de dados em seus próprios servidores e 2 nós de gerenciamento, cada um com um nó sql em 2 servidores. Eu reduzi o que acho que é o meu problema. Meu cluster parece não conseguir eleger um nó de dados presidente, mas não tenho ideia de como definir as regras eleitorais. Alguém pode me ajudar com minha configuração? Minha configuração está errada? Obrigado. Abaixo estão todos os detalhes.
Aqui está a configuração do meu nó de gerenciamento:
[ndbd default]
NoOfReplicas=3
#DataMemory=2048M
#IndexMemory=512M
#Management Nodes
[ndb_mgmd]
hostname=192.168.0.1
NodeId=1
datadir=/var/lib/mysql-cluster
[ndb_mgmd]
hostname=192.168.0.2
NodeId=2
datadir=/var/lib/mysql-cluster
#Data Nodes
[ndbd]
hostname=192.168.0.3
NodeId=3
datadir=/usr/local/mysql/data
[ndbd]
hostname=192.168.0.4
NodeId=4
datadir=/usr/local/mysql/data
[ndbd]
hostname=192.168.0.5
NodeId=5
datadir=/usr/local/mysql/data
#front end servers
[mysqld]
hostname=192.168.0.1
#NodeId=11
[mysqld]
hostname=192.168.0.2
#NodeId=22
Aqui está minha configuração do nó sql - my.cnf
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
[mysqld]
ndbcluster
[mysql_cluster]
ndb-connectstring=192.168.0.1,192.168.0.2
Aqui está a string de conexão do nó de dados
[mysql_cluster]
# Options for NDB Cluster processes:
ndb-connectstring=192.168.0.1,192.168.0.2
Isto é o que ndb_mgm> show está dizendo
id=3 @192.168.0.3 (mysql-8.3.0 ndb-8.3.0, starting, Nodegroup: 0)
id=4 @192.168.0.4 (mysql-8.3.0 ndb-8.3.0, starting, Nodegroup: 0)
id=5 @192.168.0.5 (mysql-8.3.0 ndb-8.3.0, starting, Nodegroup: 0)
[ndb_mgmd(MGM)] 2 node(s)
id=1 @192.168.0.1 (mysql-8.3.0 ndb-8.3.0)
id=2 @192.168.0.2 (mysql-8.3.0 ndb-8.3.0)
[mysqld(API)] 2 node(s)
id=6 (not connected, accepting connect from 192.168.0.1)
id=7 (not connected, accepting connect from 192.168.0.2)
Os nós 3,4 e 5 estão presos no status
ndb_mgm> 3 status
Node 3: starting (Last completed phase 0) (mysql-8.3.0 ndb-8.3.0)
ndb_mgm> 4 status
Node 4: starting (Last completed phase 0) (mysql-8.3.0 ndb-8.3.0)
ndb_mgm> 5 status
Node 5: starting (Last completed phase 0) (mysql-8.3.0 ndb-8.3.0)
Os nós SQL 6 (11) e 7 (22) não serão conectados.
Os nós SQL e de dados não têm nada em seus logs de erros. O log do cluster para os nós de gerenciamento repete isso a cada minuto:
TIME [MgmtSrvr] INFO -- Alloc node id 6 rejected, no new president yet
TIME [MgmtSrvr] WARNING -- Unable to allocate nodeid for API at 192.168.0.1. Returned error: 'Cluster not ready for nodeid allocation.'
TIME [MgmtSrvr] INFO -- Node 3: Initial start, waiting for 4 and 5 to connect, nodes [ all: 3, 4 and 5 connected: 3 no-wait: ]
TIME [MgmtSrvr] INFO -- Node 5: Initial start, waiting for 3 and 4 to connect, nodes [ all: 3, 4 and 5 connected: 5 no-wait: ]
TIME [MgmtSrvr] INFO -- Node 4: Initial start, waiting for 3 and 5 to connect, nodes [ all: 3, 4 and 5 connected: 4 no-wait: ]
Parece que os nós de dados não conseguem se conectar uns aos outros, talvez firewalls estejam em uso?
Como os nós de dados conseguiram se conectar ao servidor de gerenciamento, a porta 1186 é aberta no firewall.
Mas todos os servidores MySQL e nós de dados também se conectarão a todos os nós de dados e, por padrão, os nós de dados escutam em portas alocadas dinamicamente que são publicadas em outros nós por meio do servidor de gerenciamento. Este modo de operação não é adequado para firewalls.
Ao usar firewalls também em hosts de nós de dados, é necessário configurar em qual porta o nó de dados deve escutar e abrir essa porta no firewall.
A porta de escuta do nó de dados é configurada pelo parâmetro ServerPort. Por exemplo:
Mude isso e reinicie todos os servidores de gerenciamento, lembre-se de usar
--reload
ao reiniciar o primeiro servidor de gerenciamento, mas não para o outro.Certifique-se de que a porta de escuta do nó de dados selecionado esteja aberta no firewall. E então reinicie todos os nós de dados.
Os servidores MySQL aparecerão como conectados
ndb_mgm
quando conseguirem se conectar aos nós de dados.