Sintomas
Um novo nó que está sendo adicionado a um cluster Cassandra é incapaz de fofocar com nós de propagação.
Outro sintoma é quando um existente que foi reiniciado não consegue fofocar com outros nós do cluster relatando o seguinte erro durante a inicialização:
ERROR [main] 2019-08-15 18:46:32,241 CassandraDaemon.java:749 - Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any peers
at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1435) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:566) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:823) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:683) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:632) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:388) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:620) ~[apache-cassandra-3.11.4.jar:3.11.4]
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:732) ~[apache-cassandra-3.11.4.jar:3.11.4]
Em alguns casos, outros nós são capazes de ver o nó afetado como operacional, mas um nó problemático é incapaz de fofocar com outros nós. Aqui está um exemplo de saída de nodetool gossipinfo
:
/10.1.2.4
generation:0
heartbeat:0
/10.1.2.3
generation:0
heartbeat:0
/10.1.2.6
generation:1444263348
heartbeat:6232
...
DC:DC1
STATUS:NORMAL,-1041938454866204344
...
/10.1.2.5
generation:0
heartbeat:0
Um outro sintoma é que o nó afetado vê os nós em outro controlador de domínio como "inativos" ( DN
ou inativos/normais), conforme mostrado neste exemplo nodetool status
de saída:
Datacenter: r1
==============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
DN 10.1.2.5 ? 256 9.0% 5279619a-550c-42b3-8150-61ad24f828f3 r1
DN 10.1.2.3 ? 256 9.1% 5d1fa459-cdac-4658-b68d-c6e0933afcee r1
DN 10.1.2.4 ? 256 10.5% a8f35c63-6a76-4e95-99f1-bef65d785366 r1
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 10.1.2.6 18.9 GB 256 9.5% 36fdcf57-0274-43b8-a501-c0e475e3e30b RAC1
Causa
Os motivos mais comuns para problemas de fofoca são:
REDE - O protocolo gossip é usado pelos nós para comunicar informações uns com os outros no cluster. Se não houver conectividade entre os nós, eles não poderão fofocar entre si.
RELÓGIOS - Cassandra usa a hora local de um servidor para gerar uma "geração de pulsação". Ao fofocar com outros nodos, Cassandra compara a geração de fofoca local com o outro nodo como forma de validar as informações da fofoca.
Se a geração de fofoca estiver muito distante, Cassandra rejeitará as informações de fofoca do outro nó como inválidas, o que significa que a fofoca falhou.
COMMIT LOG - Se o Cassandra não tiver permissões de gravação no
commitlog/
diretório ou nos arquivos, as descargas da tabela de memória serão bloqueadas e impedirão que os nós façam fofoca. Por exemplo, isso pode acontecer se o Cassandra foi acidentalmente iniciado comoroot
em vez decassandra
ou alguma outra conta de serviço.Solução
Para que o gossip funcione, os nós devem ser capazes de se comunicar entre si na porta TCP
7000
(porta7001
para SSL) em ambas as direções:iptables
oufirewalld
para configuração incorreta.Verifique a hora nos servidores. Certifique-se de que o NTP esteja configurado e de que não haja desvio de tempo.
Por fim, verifique as permissões de arquivo no
commitlog/
diretório e redefina a propriedade conforme apropriado. Saúde!