# 28.11 - https://hub.docker.com/_/cassandra ``` docker ps ``` ``` docker run --name some-cassandra --network some-network -d cassandra Unable to find image 'cassandra:latest' locally latest: Pulling from library/cassandra eaead16dc43b: Pull complete 46e1869246ce: Pull complete bbd45db92608: Pull complete 6fcfd0f47989: Pull complete 996685dfbe33: Pull complete 4927828dcc1b: Pull complete 7f67cde8352d: Pull complete 0da185f5d218: Pull complete 48dc66f305e8: Pull complete Digest: sha256:8d3187f77bfa34340e72735d642df18bc6db6ac7e6545ab471f3bce3c10b5dad Status: Downloaded newer image for cassandra:latest 7c9d17c6e432626368ececc510becf8a4e15ce62f829ebf7511ed224988ab6ee docker: Error response from daemon: network some-network not found. ``` - identificira točno jednu mrežu vidi se kod pokretanja ```docker network ls``` ``` docker network create some-network a993a27733e5fce2de241e3d4cbb898843a621617cda76eeed65252fd8488102 ``` ``` docker container rm some-cassandra some-cassandra ``` ``` docker run --name some-cassandra --network some-network -d cassandra 9e20da761e326ec97e2cf203bb0d21a469f6be48b82dd605373b4452205bf626 ``` - klijent CQLSH - to je shell kojim se spajamo na cassandru - pokreni interaktivni terminal na mreži some netowok i izbrisi kada je gotovo kontejner na kojme pokretcemo je cassanda nemoj pokreniti trenutni trenutni kontjener nego some-cassandra container ako nije naveden klijent pokreće se automatki poslužitelj - pokrenut je jedan klijent i jedan poslužitelj ``` docker run -it --network some-network --rm cassandra cqlsh some-cassandra Connected to Test Cluster at some-cassandra:9042 [cqlsh 6.0.0 | Cassandra 4.0.7 | CQL spec 3.4.5 | Native protocol v5] Use HELP for help. cqlsh> ``` - https://cassandra.apache.org/_/quickstart.html ``` cqlsh> CREATE TABLE IF NOT EXISTS store.shopping_cart ( userid text PRIMARY KEY, item_count int, last_update_timestamp timestamp ); cqlsh> INSERT INTO store.shopping_cart ... (userid, item_count, last_update_timestamp) ... VALUES ('9876', 2, toTimeStamp(now())); cqlsh> INSERT INTO store.shopping_cart ... (userid, item_count, last_update_timestamp) ... VALUES ('1234', 5, toTimeStamp(now())); cqlsh> select * from store.shopping_cart; userid | item_count | last_update_timestamp --------+------------+--------------------------------- 1234 | 5 | 2022-11-28 16:28:23.753000+0000 9876 | 2 | 2022-11-28 16:28:15.892000+0000 (2 rows) ``` ## zad isprobajte preostale SQL naredbe, specifično DESCRIBE, UPDATE i DELETE ``` cqlsh> UPDATE store.shopping_cart SET item_count = 5555 WHERE userid = '1234'; cqlsh> select * from store.shopping_cart; userid | item_count | last_update_timestamp --------+------------+--------------------------------- 1234 | 5555 | 2022-11-28 16:28:23.753000+0000 9876 | 2 | 2022-11-28 16:28:15.892000+0000 (2 rows) ``` ``` cqlsh> DESCRIBE store.shopping_cart CREATE TABLE store.shopping_cart ( userid text PRIMARY KEY, item_count int, last_update_timestamp timestamp ) WITH additional_write_policy = '99p' AND bloom_filter_fp_chance = 0.01 AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} AND cdc = false AND comment = '' AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} AND compression = {'chunk_length_in_kb': '16', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} AND crc_check_chance = 1.0 AND default_time_to_live = 0 AND extensions = {} AND gc_grace_seconds = 864000 AND max_index_interval = 2048 AND memtable_flush_period_in_ms = 0 AND min_index_interval = 128 AND read_repair = 'BLOCKING' AND speculative_retry = '99p'; cqlsh> delete from store.shopping_cart where userid = '1234'; cqlsh> select * from store.shopping_cart; userid | item_count | last_update_timestamp --------+------------+--------------------------------- 9876 | 2 | 2022-11-28 16:28:15.892000+0000 (1 rows) ``` <hr/> - kod describe se navode dodatne postavke jer kada se radi replkiacije bitno je navesti točne dodatne podatke kako bi replikacija bila identična - not only SQL baza NE no SQL !!! to je vazno - u novi terminal pokreni ``` docker run --name some-cassandra2 -d --network some-network -e CASSANDRA_SEEDS=some-cassandra cassandra 745b756cad789472b86dc83880d9f94146c1c481aba452add2058a0b5d9a0483 ``` ``` docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 745b756cad78 cassandra "docker-entrypoint.s…" About a minute ago Up 58 seconds 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp some-cassandra2 7ef51d4e29a5 cassandra "docker-entrypoint.s…" 25 minutes ago Up 25 minutes 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp amazing_albattani 9e20da761e32 cassandra "docker-entrypoint.s…" 27 minutes ago Up 27 minutes 7000-7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp some-cassandra ``` - - ime -d je daemonizacija, mreža, -e ... je novo - cassandra seeds - varijabla kao lista ip adresa koja se koristi za povezivanje čvorova tj. ovo je follower koji prikuplja podatke od leadera odnosno prve cassandre ``` docker run -it --network some-network --rm cassandra cqlsh some-cassandra2  ✔ Connected to Test Cluster at some-cassandra2:9042 [cqlsh 6.0.0 | Cassandra 4.0.7 | CQL spec 3.4.5 | Native protocol v5] Use HELP for help. cqlsh> ``` ``` cqlsh> select * FROM store.shopping_cart ; userid | item_count | last_update_timestamp --------+------------+--------------------------------- 1234 | 5555 | 2022-11-28 16:44:40.431000+0000 9876 | 2 | 2022-11-28 16:28:15.892000+0000 (2 rows) ``` ## zad. isprobajte naredbu update na svakom od servera pa uočite replikaciju, repliciraju li se promjene - meni se sve replicira - pokrene se update pa select na jednom i onda select na drugom -> i obrnuto i uvijek su isti podaci u bazi - ```simplestrategy``` je za testiranje, a ```networktopologystrategy``` je za produkciju - tu je objašnjeno https://cassandra.apache.org/doc/latest/cassandra/architecture/dynamo.html ``` cqlsh> create keyspace if not exists store2 with replication = {'class' : 'SimpleStrategy', 'replication_factor' : '5'}; Warnings : Your replication factor 5 for keyspace store2 is higher than the number of nodes 2 ``` ## zad3 pokrenite jos jedan poslužitelj i stvorite keyspace s replikcaijskim faktorom ``` docker run --name some-cassandra3 -d --network some-network -e CASSANDRA_SEEDS=some-cassandra cassandra 4e86866336140f952702e221dcbae97b672f926ae1a58fa0f69d005becd1e3fe docker run -it --network some-network --rm cassandra cqlsh some-cassandra3 Connected to Test Cluster at some-cassandra3:9042 [cqlsh 6.0.0 | Cassandra 4.0.7 | CQL spec 3.4.5 | Native protocol v5] Use HELP for help. cqlsh> ``` - ``` docker logs some-cassandra2``` ako se desi neki problem bez pokreni na prvoj cassandri ``` cqlsh> create keyspace if not exists store7 with replication = {'class' : 'NetworkTopologyStrategy', 'replication_factor' : '2'}; cqlsh> desc store7; CREATE KEYSPACE store7 WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '2'} AND durable_writes = true; ``` - unutar clastera postoji samo jedan datacentar, za više datacentra treba u konfiguraciji napraviti izmjene