Ansible role for configuring a Cassandra cluster
Go to file
Jakub Sokołowski df1d5ea174
consul: reload systemd service
Otherwise we don't have permissions to reload.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2022-03-17 18:55:43 +01:00
defaults replace Tinc VPN with WireGuard 2021-05-18 22:28:15 +02:00
meta add meta 2020-10-05 18:19:06 +02:00
tasks consul: reload systemd service 2022-03-17 18:55:43 +01:00
templates bump write_request_timeout_in_ms to 30000 2021-04-29 11:29:55 +02:00
README.md replace Tinc VPN with WireGuard 2021-05-18 22:28:15 +02:00

README.md

Description

This role configures an Apache Cassandra cluster.

We run this as a storage backend for Cortex which is a storage backend for Prometheus.

Configuration

The bare minimum would be to set cluster name and number of tokens.

cassandra_cluster_name: 'my-cassandra-cluster'
cassandra_num_tokens: 256
cassandra_storage_port: 7000
cassandra_native_port: 9042
cassandra_listen_address: '192.168.1.1'
cassandra_db_users:
  - { user: 'admin', pass: 'secret' }
  - { user: 'app-1', pass: 'secret' }

consul_catalog_url: 'http://localhost:1234/v1/catalog'

It is absolutely crucial that you set cassandra_listen_address to an address that other nodes in the cluster can access. Values like 0.0.0.0 will not work.

If cassandra_db_users is an empty list no authentication is required.

Management

The nodes run Cassandra as Systemd services:

 > sudo systemctl status cassandra
● cassandra.service - "Cassandra -  distributed, wide column store, NoSQL database"
     Loaded: loaded (/lib/systemd/system/cassandra.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-08-01 12:16:56 UTC; 1min 51s ago
       Docs: https://cassandra.apache.org/
   Main PID: 317116 (java)
      Tasks: 64 (limit: 9513)
     Memory: 2.2G
     CGroup: /system.slice/cassandra.service
             └─317116 java -Xloggc:/opt/cassandra/bin/../logs/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking -XX:+UseTLA>

Aug 01 12:17:06 store-01.do-ams3.metrics.hq cassandra[317116]: INFO  [GossipStage:1] 2020-08-01 12:17:06,504 Gossiper.java:1126 - Node /10.1.32.252 has restarted, now UP
Aug 01 12:17:06 store-01.do-ams3.metrics.hq cassandra[317116]: INFO  [GossipStage:1] 2020-08-01 12:17:06,515 StorageService.java:2394 - Node /10.1.32.252 state jump to NORMAL
Aug 01 12:17:06 store-01.do-ams3.metrics.hq cassandra[317116]: INFO  [GossipStage:1] 2020-08-01 12:17:06,528 TokenMetadata.java:497 - Updating topology for /10.1.32.252
Aug 01 12:17:06 store-01.do-ams3.metrics.hq cassandra[317116]: INFO  [GossipStage:1] 2020-08-01 12:17:06,529 TokenMetadata.java:497 - Updating topology for /10.1.32.252

And you can check the status of the cluster using:

 > nodetool status
Datacenter: do-ams3
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.1.32.253  283.88 KiB  256          69.4%             d625ecc1-37c5-4c77-9f48-6d21df6d7da4  main
UN  10.1.32.252  340.06 KiB  256          64.8%             8c3e38a1-7751-433a-82a1-a7f709378376  main
UN  10.1.32.254  334.51 KiB  256          65.8%             1c4ba389-52f8-4663-a5e2-27f9fc159f6d  main

Usage

You can query the cluster using CQL:

 > cqlsh 10.1.32.253
Connected to status-im-metrics at 10.1.32.253:9042.
[cqlsh 5.0.1 | Cassandra 3.11.7 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh> SHOW host
Connected to status-im-metrics at 10.1.32.253:9042.

Links