Setup und Parameter für die Testumgebung

Die Beispiele für die Kapitel 2 und 3 wurden direkt in einem lokalen Cassandra-Cluster durchgeführt.

Dieser Cassandra-Cluster wird mittels Docker-Compose gestartet.

Die nachfolgende docker-compose.yaml Konfiguration kann direkt verwendet werden.

Die verwendete Cassandra-Version ist fix, da die nächste Version Verschlüsselung implementiert und dies für den Showcase nicht notwendig ist.

Was wird denn da so gestartet?

Diese Konfiguration startet einen Cassandra-Cluster „TestCluster“ (CASSANDRA_CLUSTER_NAME) in einem Datacenter „tc1“ (CASSANDRA_DC).

Gestartet wird der Cluster in einem separaten Netz mit fixen IP-Adressen.

Wenn man die Konfiguration so 1:1 übernimmt, bitte beachten. Jeder Node darf sich in dieser Konfiguration max. 4 GB Heap-Speicher gönnen. Das könnte manchen Host überfordern und swappen lassen. Hier bitte nachjustieren falls notwendig (Parameter MAX_HEAP_SIZE bzw. HEAP_NEW_SIZE).

Jedem Node werden 8 VNode-Token-Ranges zugewiesen. Bei 3 gestarteten Nodes werden somit 24 Token-Ranges definiert.

				
					version: "3.7"
services:
  cassandra1:
    image: cassandra:3.11.14
    volumes:
    - ./cassandra1:/var/lib/cassandra
    environment:
    - CASSANDRA_SEEDS=cassandra1
    - CASSANDRA_CLUSTER_NAME=TestCluster
    - CASSANDRA_DC=tc1
    - CASSANDRA_AUTO_BOOTSTRAP=true
    - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
    - CASSANDRA_LISTEN_ADDRESS=10.30.10.2
    - CASSANDRA_BROADCAST_ADDRESS=10.30.10.2
    - CASSANDRA_RPC_ADDRESS=10.30.10.2
    - CASSANDRA_NUM_TOKENS=8
    - MAX_HEAP_SIZE=4096M
    - HEAP_NEWSIZE=1024M
    - CASSANDRA_RACK=rack1
    ports: ['0.0.0.0:9042:9042','0.0.0.0:7000:7000','0.0.0.0:7001:7001','0.0.0.0:9160:9160']
    command: bash -c 'if [ -z "$$(ls -A /var/lib/cassandra/)" ] ; then sleep 0; fi && /docker-entrypoint.sh cassandra -f'
    networks:
      cassandra-net:
        ipv4_address: 10.30.10.2
    ulimits:
      memlock: -1
      nproc: 32768
      nofile: 100000
  cassandra2:
    image: cassandra:3.11.14
    volumes:
    - ./cassandra2:/var/lib/cassandra
    environment:
    - CASSANDRA_SEEDS=cassandra1
    - CASSANDRA_CLUSTER_NAME=TestCluster
    - CASSANDRA_DC=tc1
    - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
    - CASSANDRA_LISTEN_ADDRESS=10.30.10.3
    - CASSANDRA_BROADCAST_ADDRESS=10.30.10.3
    - CASSANDRA_RPC_ADDRESS=10.30.10.3
    - CASSANDRA_NUM_TOKENS=8
    - MAX_HEAP_SIZE=4096M
    - HEAP_NEWSIZE=1024M
    - CASSANDRA_RACK=rack1
    ports: ['0.0.0.0:19042:9042','0.0.0.0:17000:7000','0.0.0.0:17001:7001','0.0.0.0:19160:9160']
    command: bash -c 'if [ -z "$$(ls -A /var/lib/cassandra/)" ] ; then sleep 60; fi && /docker-entrypoint.sh cassandra -f'
    networks:
      cassandra-net:
        ipv4_address: 10.30.10.3
    ulimits:
      memlock: -1
      nproc: 32768
      nofile: 100000
  cassandra3:
    image: cassandra:3.11.14
    volumes:
    - ./cassandra3:/var/lib/cassandra
    environment:
    - CASSANDRA_SEEDS=cassandra1
    - CASSANDRA_CLUSTER_NAME=TestCluster
    - CASSANDRA_DC=tc1
    - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
    - CASSANDRA_LISTEN_ADDRESS=10.30.10.4
    - CASSANDRA_BROADCAST_ADDRESS=10.30.10.4
    - CASSANDRA_RPC_ADDRESS=10.30.10.4
    - CASSANDRA_NUM_TOKENS=8
    - MAX_HEAP_SIZE=4096M
    - HEAP_NEWSIZE=1024M
    - CASSANDRA_RACK=rack1
    ports: ['0.0.0.0:29042:9042','0.0.0.0:27000:7000','0.0.0.0:27001:7001','0.0.0.0:29160:9160']
    command: bash -c 'if [ -z "$$(ls -A /var/lib/cassandra/)" ] ; then sleep 120; fi && /docker-entrypoint.sh cassandra -f'
    networks:
      cassandra-net:
        ipv4_address: 10.30.10.4
    ulimits:
      memlock: -1
      nproc: 32768
      nofile: 100000
networks:
  cassandra-net:
    driver: bridge
    ipam:
      config:
      - subnet: 10.30.10.0/24
...


				
			

Mit docker-compose up -d` den Cluster starten und mit docker-compose logs -f` prüfen ob alles korrekt hochfährt.

Nach dem Start sollten die 3 Container zur Verfügung stehen (mit docker ps -a` prüfen).

Der initiale Start kann etwas länger dauern, da hier der Cluster aufgebaut wird.