Guida alle tecnologie

Installare Apache Cassandra su CentOS 8

5 min read Database NoSQL Aggiornato 19 Oct 2025
Installare Apache Cassandra su CentOS 8
Installare Apache Cassandra su CentOS 8

Cluster Apache Cassandra: nodi e replica

Requisiti

  • Un server con CentOS 8 e almeno 2 GB di RAM.
  • Accesso root o un account con privilegi sudo configurato.

Importante: Cassandra richiede privilegi di sistema per creare utenti e directory di dati; eseguire i comandi come root o con sudo.

Prima di iniziare

Aggiorna il sistema alla versione stabile più recente prima di procedere:

dnf update

Dopo l’aggiornamento, riavvia il server per applicare i pacchetti aggiornati.

Installare Java e Python 2

Apache Cassandra richiede OpenJDK 8 e Python 2. Installa i pacchetti con:

dnf install java-1.8.0-openjdk-devel python2

Verifica la versione di Java:

java -version

Esempio di output atteso:

openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)

Nota: OpenJDK 8 è la versione compatibile con Cassandra 2.x/3.x. Se usi una release più recente di Cassandra, verifica la compatibilità della JVM.

Aggiungere il repository di Cassandra

Cassandra non è incluso nei repo standard di CentOS 8. Crea il file del repository:

nano /etc/yum.repos.d/cassandra.repo

Aggiungi queste righe:

[cassandra]
name = DataStax Repo for Apache Cassandra
baseurl = http://rpm.datastax.com/community
enabled = 1
gpgcheck = 0

Salva e chiudi il file.

Quindi installa il pacchetto indicato nel tutorial originale:

dnf install dsc20

Nota: il pacchetto installa i componenti DataStax Community necessari. Se utilizzi repository o pacchetti diversi, verifica la documentazione del fornitore.

Creare l’unità systemd per Cassandra

Il pacchetto può non creare automaticamente un servizio systemd; crea un file di servizio per gestire Cassandra:

nano /etc/systemd/system/cassandra.service

Contenuto consigliato del file (versione corretta per systemd):

[Unit]
Description=Apache Cassandra
After=network.target

[Service]
PIDFile=/var/run/cassandra/cassandra.pid
User=cassandra
Group=cassandra
ExecStart=/usr/sbin/cassandra -f -p /var/run/cassandra/cassandra.pid
Restart=always

[Install]
WantedBy=multi-user.target

Salva, ricarica systemd e avvia il servizio:

systemctl daemon-reload
systemctl start cassandra
systemctl enable cassandra

Verifica lo stato:

systemctl status cassandra

Esempio di output (ridotto):

? cassandra.service - Apache
   Loaded: loaded (/etc/systemd/system/cassandra.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-12-07 01:25:26 EST; 1min 51s ago
 Main PID: 1888 (java)
    Tasks: 53 (limit: 25044)
   Memory: 272.7M
   CGroup: /system.slice/cassandra.service
           ??1888 java -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5.jar -XX:+CMSClassUnloadingEnabled -XX:+UseThreadPriorities -XX:Threa>

Dec 07 01:25:29 centos8 cassandra[1888]:  INFO 01:25:29,054 Writing Memtable-local@1642973315(10104/101040 serialized/live bytes, 259 ops)
Dec 07 01:25:29 centos8 cassandra[1888]:  INFO 01:25:29,118 Completed flushing /var/lib/cassandra/data/system/local/system-local-jb-4-Data.db >
Dec 07 01:25:29 centos8 cassandra[1888]:  INFO 01:25:29,322 Starting listening for CQL clients on localhost/127.0.0.1:9042...
Dec 07 01:25:29 centos8 cassandra[1888]:  INFO 01:25:29,376 Using TFramedTransport with a max frame size of 15728640 bytes.

Verificare l’installazione

Controlla lo stato del nodo Cassandra con nodetool:

nodetool status

Esempio di output atteso:

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens  Owns (effective)  Host ID                               Rack
UN  127.0.0.1  46.11 KB   256     100.0%            2a680007-8c30-4bde-9a3f-9fa212b96d11  rack1

Accedi alla shell CQL con:

cqlsh

Dovresti vedere qualcosa di simile:

Connected to Test Cluster at localhost:9160.
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Use HELP for help.
cqlsh>

Configurare il nome del cluster

Per cambiare il nome del cluster da “Test Cluster” a un nome personalizzato:

  1. Accedi a cqlsh:
cqlsh
  1. Aggiorna il nome del cluster nel system.local:
cqlsh> UPDATE system.local SET cluster_name = 'HowtoForge Cluster' WHERE KEY = 'local';
  1. Esci dalla shell:
cqlsh> exit;
  1. Modifica il file di configurazione principale di Cassandra (per CentOS 8 la posizione indicata è quella del pacchetto):
nano /etc/cassandra/default.conf/cassandra.yaml

Cambia la riga:

cluster_name: 'HowtoForge Cluster'
  1. Svuota la cache del sistema e riavvia il servizio:
nodetool flush system
systemctl restart cassandra
  1. Riapri cqlsh per verificare il nuovo nome:
cqlsh

Dovresti vedere “Connected to HowtoForge Cluster at localhost:9160.” come conferma.

Configurazioni comuni e porte

  • Porta CQL predefinita: 9042 (client CQL)
  • Porta Thrift storica: 9160
  • Directory dati tipica: /var/lib/cassandra
  • Directory log tipica: /var/log/cassandra

Nota: il file cassandra.yaml contiene impostazioni chiave (listen_address, rpc_address, seeds, endpoint_snitch, data_file_directories). Modificale con cautela e riavvia il servizio dopo ogni cambiamento.

Controlli e test di accettazione (Criteri di verifica)

  • Il servizio systemd è attivo: systemctl status cassandra deve risultare active (running).
  • nodetool status deve mostrare lo stato UP e lo 0% di ownership non deve essere fuori soglia.
  • cqlsh si connette a 127.0.0.1:9042 o 9160 a seconda della configurazione.
  • I log in /var/log/cassandra non mostrano errori critici all’avvio.

Sicurezza e note GDPR

  • Abilitare autenticazione e autorizzazione (internally: PasswordAuthenticator e PermissionsAuthorizer) se il nodo è esposto in rete.
  • Limitare l’accesso alle porte 9042/9160 tramite firewall (firewalld/iptables): aprire le porte solo ai client e ai nodi del cluster.
  • Crittografia in transito: configurare SSL/TLS per CQL e i servizi inter-nodo se i dati sensibili transitano su reti non fidate.
  • GDPR: se memorizzi dati personali, definisci retention, pseudonimizzazione e procedure di cancellazione; Cassandra replica i dati e la cancellazione eventuale deve propagarsi su tutti i nodi.

Quando non usare Cassandra (controesempi)

  • Non usare Cassandra per carichi fortemente transazionali con molte join relazionali e vincoli ACID; un RDBMS è più adatto.
  • Non è l’ideale per dataset piccoli con bassa scala dove la complessità di gestione non è giustificata.

Alternative e approcci diversi

  • RDBMS: PostgreSQL o MySQL per dati relazionali e transazioni ACID.
  • Altri NoSQL: MongoDB per document store, ScyllaDB come alternativa compatibile con Cassandra con latenza ridotta.
  • Soluzioni gestite: usare servizi cloud (es. Amazon Keyspaces, Azure Managed Cassandra) per ridurre l’overhead operativo.

Checklist di deployment (ruoli)

Amministratore di sistema:

  • Aggiornare CentOS e installare dipendenze (Java, Python)
  • Creare repository e installare pacchetto
  • Creare unità systemd e abilitare il servizio

DevOps/DBA:

  • Verificare nodetool status e replica
  • Configurare seeds, listen_address, rpc_address
  • Definire politiche di backup e retention

Sicurezza:

  • Configurare autenticazione/autorizzazione
  • Abilitare TLS inter-nodo e client-server
  • Configurare firewall e monitoraggio

Runbook di rollback rapido (esempio)

  1. Se un nodo fallisce dopo modifiche di configurazione:
    • systemctl stop cassandra
    • ripristinare il file cassandra.yaml dalla copia di backup
    • systemctl start cassandra
  2. Se il nodo non rientra:
    • rimuoverlo dal cluster con nodetool removenode (solo se necessario)
    • ripristinare i dati da snapshot

Esempio decision flowchart per scegliere Cassandra

flowchart TD
  A[Hai bisogno di alta disponibilità e scalabilità orizzontale?] -->|Sì| B[Cassandra]
  A -->|No| C[RDBMS]
  B --> D{I dati richiedono molte join relazionali?}
  D -->|Sì| C
  D -->|No| E[Adotta Cassandra e progetta schema denormalizzato]

Piccolo glossario (1 riga ciascuno)

  • Nodo: singola istanza di Cassandra in esecuzione.
  • Cluster: insieme di nodi Cassandra che collaborano.
  • Seed: nodo usato per l’avvio e discovery del cluster.
  • Replication factor: numero di copie dei dati su nodi diversi.
  • CQL: Cassandra Query Language, linguaggio client simile a SQL.

Conclusione

Hai installato e configurato Apache Cassandra su CentOS 8. Ora puoi:

  • Verificare lo stato con nodetool e cqlsh.
  • Personalizzare cassandra.yaml per ambiente di produzione.
  • Pianificare backup, monitoraggio e sicurezza.

Se desideri, posso aiutarti a: creare uno schema di example keyspace/table, definire una strategia di replica per più datacenter o generare script di backup.

Domande frequenti

Come verifico rapidamente che Cassandra ascolti sulla porta 9042?

Usa netstat o ss: ss -ltnp | grep 9042 oppure prova a connetterti con cqlsh localhost 9042.

Posso usare una versione più recente di Java?

Dipende dalla versione di Cassandra. Alcune release moderne supportano Java 11+, ma con versioni legacy (2.x/3.x) è consigliato OpenJDK 8. Verifica la documentazione della versione di Cassandra che stai installando.

Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/