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.