Agora chegamos em uma das partes principais do Cassandra relacionados a administração e monitoração. Vamos explicar como o JMX funciona e como o nodetool usa o framework JMX para interagir com o banco de dados. Espero que se divirta aqui.
Java Management Extensions é um framework que foi introduzido no Java 1.5 e traz ao Java uma variedade de novas opções de monitoramento e administração. Se você conhece um pouco desse mundo Java, você deve saber bem como isso funciona. No mundo Cassandra raramente precisamos usá-lo diretamente.
O JMX expõe alguns métodos que você pode invocar para obter alguma informação (GET) ou para mudar alguma coisa (SET). Por exemplo, quero saber quanto minha JVM está usando de memória. E quanto a mudar algo, você pode inclusive remover nodes usando essas extensões.
Por praticidade, nos métodos mais utilizados pelo Cassandra, a gente cria uma interface mais amigável e expõe como opção do nodetool.
Por exemplo, há algum tempo atrás quando precisávamos executar um compaction manualmente em determinada sstable a gente precisava invocar o seguinte método (copiei deste gist):
jmx_invoke -m org.apache.cassandra.db:type=CompactionManager \forceUserDefinedCompaction system-schema_columns-jb-3-Data.db
Ou esse para bulk load:
jmx_invoke -m org.apache.cassandra.db:type=StorageService \ bulkLoad /path/to/SSTables
Conforme o Cassandra vai evoluindo, as opções são incorporadas ao nodetool. No caso da compactação de sstables (chamada user defined, aqui você consegue ver detalhes), ela foi incluída no ticket CASSANDRA-10660, e agora podemos fazer isso com nodetool de forma mais amigável.
nodetool compact --user-defined demo_keyspace-demo_table-md-1290-Data.db
E isso resume o papel do nodetool: é criar uma interface amigável entre os administradores e os métodos expostos via JMX. Aí ao invés de executá-los manualmente, temos essa ferramenta com opções controladas e documentadas.
Falamos um pouco do JMX, como ele nos ajuda, através do nodetool, a interagir com nosso cluster. O nodetool é nosso companheiro de todo dia, embora eventualmente você acabe precisando invocar manualmente algum método.
Espero que tenham gostado do conteúdo.