Installation Guide - PRODUCTION READY

Install Cassandra on Linux

The BEST platform for Cassandra - Perfect for development AND production!

🐧 Linux: The BEST Platform for Cassandra!

✅ Why Linux is #1 for Cassandra

  • 🚀 Best Performance: 30-50% faster than Windows/macOS
  • 🏭 Production Standard: 99% of Cassandra deployments use Linux
  • 💰 Free & Open Source: No licensing costs
  • 🛠️ Superior Tools: All monitoring/management tools built for Linux
  • ⚡ Better Memory Management: JVM optimized for Linux
  • 📊 Kernel Tuning: Fine-grained performance optimization
  • 🔒 Stable & Secure: Battle-tested in production

💼 Who Uses Linux for Cassandra?

  • 📺 Netflix: Ubuntu 20.04 LTS - thousands of nodes
  • 📱 Instagram: CentOS 7 - petabytes of data
  • 💳 Apple: RHEL 8 - 75,000+ nodes!
  • 🎵 Spotify: Debian - millions of queries/second
  • 🛒 eBay: Ubuntu - multi-datacenter clusters

🎯 Perfect For:

  • ✅ Production Deployments: The ONLY recommended OS
  • ✅ Development: Environment matches production
  • ✅ Learning: Industry-standard environment
  • ✅ Performance Testing: Accurate benchmarks
  • ✅ Enterprise: Support from DataStax/vendors

🚀 Let's install Cassandra the RIGHT way - on Linux!

🎯 Choose Your Linux Distribution

Different installation methods for different distros.

🟠

Ubuntu / Debian

Most Popular

  • ✅ Easy setup
  • ✅ APT package manager
  • ✅ Great community support
  • ✅ LTS versions
  • 📦 Package install or manual

→ Ubuntu/Debian Guide

🔴

RHEL / CentOS / Rocky

Enterprise Choice

  • ✅ Enterprise support
  • ✅ YUM/DNF package manager
  • ✅ Rock-solid stability
  • ✅ Long support cycles
  • 📦 Package install or manual

→ RHEL/CentOS Guide

📦

Manual Installation

Any Linux Distro

  • ⚙️ Full control
  • ⚙️ Works on any distro
  • ⚙️ Multiple versions
  • ⚙️ Custom configuration
  • 📦 Tarball installation

→ Manual Guide

Which Should You Choose?

Choose Ubuntu if:

  • You want the easiest installation
  • You're new to Linux
  • You want the latest packages
  • You're setting up a dev environment

Choose RHEL/CentOS if:

  • You need enterprise support
  • You work in a corporate environment
  • Your company standardizes on Red Hat
  • You need maximum stability

Use Manual Installation if:

  • You're on a less common distro (Arch, Gentoo, etc.)
  • You need multiple Cassandra versions
  • You want complete control

🟠 Method 1: Ubuntu / Debian Installation

Easy installation using APT package manager.

Supported Versions

  • Ubuntu: 20.04 LTS, 22.04 LTS, 24.04 LTS
  • Debian: 11 (Bullseye), 12 (Bookworm)
  • Not recommended: Non-LTS versions
1

Install Java 11

# Update package list sudo apt update # Install OpenJDK 11 sudo apt install -y openjdk-11-jdk # Verify installation java -version # Expected output: # openjdk version "11.0.x"
2

Add Apache Cassandra Repository

# Add Cassandra repository key wget -q -O - https://downloads.apache.org/cassandra/KEYS | sudo gpg --dearmor -o /usr/share/keyrings/cassandra-archive-keyring.gpg # Add repository (Cassandra 4.1) echo "deb [signed-by=/usr/share/keyrings/cassandra-archive-keyring.gpg] https://debian.cassandra.apache.org 41x main" | sudo tee /etc/apt/sources.list.d/cassandra.sources.list # Update package list sudo apt update
3

Install Cassandra

# Install Cassandra sudo apt install -y cassandra # This will: # - Install Cassandra binaries # - Create cassandra user and group # - Set up systemd service # - Create default configuration
4

Start Cassandra Service

# Start Cassandra sudo systemctl start cassandra # Enable auto-start on boot sudo systemctl enable cassandra # Check status sudo systemctl status cassandra # Expected: "active (running)"
5

Verify Installation

# Wait 30-60 seconds, then check node status nodetool status # Expected output: # UN 127.0.0.1 ... # UN = Up and Normal ✅ # Connect with cqlsh cqlsh # Test query SELECT release_version FROM system.local;

Ubuntu/Debian Installation Complete!

Important Locations:

  • Config: /etc/cassandra/cassandra.yaml
  • Data: /var/lib/cassandra/data
  • Logs: /var/log/cassandra/system.log
  • Binaries: /usr/sbin/cassandra

Useful Commands:

  • sudo systemctl start cassandra - Start
  • sudo systemctl stop cassandra - Stop
  • sudo systemctl restart cassandra - Restart
  • sudo systemctl status cassandra - Check status

🔴 Method 2: RHEL / CentOS / Rocky Installation

Enterprise-grade installation using YUM/DNF package manager.

Supported Versions

  • RHEL: 8, 9
  • CentOS Stream: 8, 9
  • Rocky Linux: 8, 9
  • AlmaLinux: 8, 9
1

Install Java 11

# Install OpenJDK 11 sudo dnf install -y java-11-openjdk java-11-openjdk-devel # Or if using yum (older versions) sudo yum install -y java-11-openjdk java-11-openjdk-devel # Verify java -version
2

Add Apache Cassandra Repository

# Create repository file sudo tee /etc/yum.repos.d/cassandra.repo <<EOF [cassandra] name=Apache Cassandra baseurl=https://redhat.cassandra.apache.org/41x/ gpgcheck=1 repo_gpgcheck=1 gpgkey=https://downloads.apache.org/cassandra/KEYS EOF
3

Install Cassandra

# Install Cassandra sudo dnf install -y cassandra # Or with yum sudo yum install -y cassandra
4

Start Cassandra Service

# Start Cassandra sudo systemctl start cassandra # Enable auto-start sudo systemctl enable cassandra # Check status sudo systemctl status cassandra
5

Configure Firewall

RHEL/CentOS has firewalld enabled by default. Open required ports:

# Open CQL port (clients) sudo firewall-cmd --permanent --add-port=9042/tcp # Open inter-node communication (if multi-node) sudo firewall-cmd --permanent --add-port=7000/tcp sudo firewall-cmd --permanent --add-port=7001/tcp # Open JMX port (monitoring) sudo firewall-cmd --permanent --add-port=7199/tcp # Reload firewall sudo firewall-cmd --reload # Verify sudo firewall-cmd --list-ports

RHEL/CentOS Installation Complete!

Important Locations:

  • Config: /etc/cassandra/default.conf/cassandra.yaml
  • Data: /var/lib/cassandra/data
  • Logs: /var/log/cassandra/system.log

📦 Method 3: Manual Installation (Any Linux)

Works on any Linux distribution.

1

Install Java

# Ubuntu/Debian sudo apt install -y openjdk-11-jdk # RHEL/CentOS sudo dnf install -y java-11-openjdk-devel # Verify java -version
2

Download and Extract Cassandra

# Download Cassandra cd /opt sudo wget https://dlcdn.apache.org/cassandra/4.1.4/apache-cassandra-4.1.4-bin.tar.gz # Extract sudo tar -xzf apache-cassandra-4.1.4-bin.tar.gz # Create symlink sudo ln -s apache-cassandra-4.1.4 cassandra # Set ownership sudo useradd -r -s /bin/false cassandra sudo chown -R cassandra:cassandra /opt/apache-cassandra-4.1.4
3

Create Data Directories

# Create directories sudo mkdir -p /var/lib/cassandra/data sudo mkdir -p /var/lib/cassandra/commitlog sudo mkdir -p /var/lib/cassandra/saved_caches sudo mkdir -p /var/lib/cassandra/hints sudo mkdir -p /var/log/cassandra # Set ownership sudo chown -R cassandra:cassandra /var/lib/cassandra sudo chown -R cassandra:cassandra /var/log/cassandra
4

Configure Environment Variables

# Add to /etc/environment sudo tee -a /etc/environment <<EOF CASSANDRA_HOME="/opt/cassandra" PATH="$PATH:/opt/cassandra/bin" EOF # Apply changes source /etc/environment
5

Start Cassandra

# Start as cassandra user sudo -u cassandra /opt/cassandra/bin/cassandra # Check if running nodetool status

⚙️ Configuration

Essential configuration for optimal performance.

Edit cassandra.yaml

# Ubuntu/Debian sudo nano /etc/cassandra/cassandra.yaml # RHEL/CentOS sudo nano /etc/cassandra/default.conf/cassandra.yaml # Manual install sudo nano /opt/cassandra/conf/cassandra.yaml

Key settings to review:

# Cluster name cluster_name: 'My Cluster' # Listen address (change for multi-node) listen_address: localhost rpc_address: localhost # Data directories data_file_directories: - /var/lib/cassandra/data commitlog_directory: /var/lib/cassandra/commitlog

Configure JVM Heap

Edit JVM options for your server's RAM:

# Edit jvm-server.options or jvm11-server.options sudo nano /etc/cassandra/jvm-server.options # For 16GB RAM server: -Xms4G -Xmx4G # For 32GB RAM server: -Xms8G -Xmx8G # Rule: Heap = 1/4 of RAM, max 16GB

System Limits (CRITICAL!)

Linux requires these limits for Cassandra:

# Edit limits sudo nano /etc/security/limits.conf # Add these lines: cassandra soft nofile 100000 cassandra hard nofile 100000 cassandra soft nproc 32768 cassandra hard nproc 32768 cassandra soft as unlimited cassandra hard as unlimited # Edit sysctl sudo nano /etc/sysctl.conf # Add: vm.max_map_count = 1048575 # Apply sudo sysctl -p

🔧 Systemd Service Setup (Manual Install)

Create systemd service for manual installations.

1

Create Service File

# Create service file sudo nano /etc/systemd/system/cassandra.service # Add this content: [Unit] Description=Apache Cassandra After=network.target [Service] Type=forking User=cassandra Group=cassandra Environment="CASSANDRA_HOME=/opt/cassandra" ExecStart=/opt/cassandra/bin/cassandra Restart=on-failure LimitNOFILE=100000 LimitNPROC=32768 [Install] WantedBy=multi-user.target
2

Enable and Start Service

# Reload systemd sudo systemctl daemon-reload # Enable service sudo systemctl enable cassandra # Start service sudo systemctl start cassandra # Check status sudo systemctl status cassandra

✅ Verify Installation

Make sure everything works!

1

Check Cassandra Status

# Check systemd service sudo systemctl status cassandra # Check node status nodetool status # Check logs sudo tail -f /var/log/cassandra/system.log
2

Connect and Test

# Connect with cqlsh cqlsh # Run test queries SELECT release_version FROM system.local; CREATE KEYSPACE test_ks WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': 1 }; USE test_ks; CREATE TABLE users ( id UUID PRIMARY KEY, name TEXT ); INSERT INTO users (id, name) VALUES (uuid(), 'Alice'); SELECT * FROM users;

🏭 Production Best Practices

Essential tips for production deployments!

💾 Use Separate Disks

Best Practice: Separate commit log from data

# In cassandra.yaml: commitlog_directory: /mnt/commitlog data_file_directories: - /mnt/data

Mount commit log on separate SSD for best performance!

🔒 Disable Swap

Critical: Swapping kills performance

# Disable swap permanently sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # Verify free -h

⚡ Kernel Tuning

Optimize: Network and I/O settings

# Add to /etc/sysctl.conf net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728 vm.swappiness = 0 # Apply sudo sysctl -p

📊 Setup Monitoring

Essential: Monitor your cluster

  • Prometheus + Grafana: Industry standard
  • DataStax OpsCenter: Enterprise option
  • JMX monitoring: Enable port 7199

🔄 Enable Backups

Critical: Regular snapshots

# Take snapshot nodetool snapshot -t backup-$(date +%Y%m%d) # Schedule daily backups with cron 0 2 * * * nodetool snapshot -t backup-$(date +\%Y\%m\%d)

🔧 Common Issues & Solutions

Fix common Linux installation problems!

❌ "cassandra: command not found"

Problem: PATH not set

Solution:

# Add to ~/.bashrc or /etc/environment export PATH="/opt/cassandra/bin:$PATH" source ~/.bashrc

❌ "Cannot allocate memory"

Problem: Heap too large or limits too low

Solution:

  1. Reduce heap in jvm-server.options
  2. Check system limits: ulimit -a
  3. Increase limits in /etc/security/limits.conf

❌ Service fails to start

Check logs:

# View systemd logs sudo journalctl -u cassandra -f # View Cassandra logs sudo tail -f /var/log/cassandra/system.log # Common issues: # - Port already in use (check with: lsof -i :9042) # - Permission issues (check ownership) # - Java not found (check JAVA_HOME)

❌ "Too many open files"

Problem: File descriptor limit too low

Solution:

# Check current limit ulimit -n # Must be at least 100000 # Edit /etc/security/limits.conf (see Configuration section)

Need Help?

Check these resources:

  • 📝 Logs: /var/log/cassandra/system.log
  • 📊 Status: nodetool status, nodetool info
  • 💬 Community: Apache Cassandra mailing list
  • 📚 Docs: https://cassandra.apache.org/doc/
  • 🐳 Alternative: Try Docker if having issues!
Advertisement

Responsive Ad