Download as pdf or txt
Download as pdf or txt
You are on page 1of 44

Spis treści

1. Zakres prac ................................................................................................................. 4


2. Przygotowanie 3 serwerów Cassandra za pomocą Docker .......................................... 4
2.1. Tworzenie Docker network – komunikacja kontenerów między sobą .............................. 4
2.2. Tworzenie kontenerów i komunikacja między węzłami za pomocą IP .............................. 6
2.2.1. Kontener: cassandra-server ......................................................................................................... 6
2.2.2. Kontener casandra-server02 ....................................................................................................... 6
2.2.3. Kontener casandra-server03 ....................................................................................................... 7
2.3. Tworzenie kontenerów i komunikacja między węzłami za pomocą nazwy kontenerów –
zalecane ..................................................................................................................................... 8
2.3.1. Kontener: cassandra-server ......................................................................................................... 8
2.3.2. Kontener: cassandra-server02 ..................................................................................................... 8
2.3.3. Kontener: cassandra-server03 ..................................................................................................... 9
2.4. Komunikacja pomiędzy kontenerami/serwerami ........................................................... 10
2.4.1. Instalacja ping ............................................................................................................................ 10
2.4.2. Sprawdzanie adresów IP ............................................................................................................ 10
2.4.3. Pingowanie ................................................................................................................................ 11

3. Praca z klastrem ................................................................................................................ 13


3.1. Pobieranie informacji o klastrze .................................................................................... 14
3.2. Zatrzymanie jednego węzła ........................................................................................... 15
3.3. Ponowne uruchomienie zatrzymanego węzła ................................................................ 16
4. Przygotowanie 3 serwerów Cassandra za pomocą wirtualnych maszyn (UTM) na Mac
z procesorem M1 ............................................................................................................. 16
4.1. Instalacja oprogramowania ........................................................................................... 16
4.2. Pobranie obrazu Ubuntu................................................................................................ 16
4.3. Tworzenie Ubuntu wirtualnej maszyny .......................................................................... 17
4.1. Sprawdzanie widoczności maszyn wirtualnych .............................................................. 23
4.2. Instalacja Java ............................................................................................................... 24
4.2.1. Konfiguracja JAVA_HOME oraz dodanie Java do przestrzeni Ubuntu ....................................... 25

4.3. Instalacja curl ................................................................................................................ 26


4.4. Instalacja Cassandra ...................................................................................................... 27
4.4.1. Instalacja jako pakiet Debian ..................................................................................................... 27

4.5. Konfiguracja Casandra – klaster z 3 węzłami .................................................................. 30


4.6. Testowanie dostępności węzłów ................................................................................... 33
4.7. Testowanie cqlsh ........................................................................................................... 34
5. Zadanie .................................................................................................................... 35
5.1. Widok przed przystąpieniem do prac ............................................................................. 35
5.1.1. Docker........................................................................................................................................ 35
5.1.2. VirtualneMaszyny (UTM) ........................................................................................................... 37

2
5.2. Przeniesienie danych z zadania01 dot. Filmoteki............................................................ 37
5.2.1. Docker - baza ............................................................................................................................. 37
5.2.2. VirtualneMaszyny (UTM) - baza ................................................................................................ 38
5.2.3. Docker - dane............................................................................................................................. 39
5.2.4. Wirtualna maszyna (UTM) – dane ............................................................................................. 40

5.3. Dodanie nową przestrzeń kluczy kina ............................................................................ 40


5.3.1. Docker – nowa baza kina ........................................................................................................... 40
5.3.2. Wirtualne maszyny (UTM) – nowa baza kina ............................................................................ 41
5.3.3. Docker – dodanie tabeli i wypełnienie jej danymi ..................................................................... 42
5.3.4. Wirtualna maszyna (UTM) – dodanie tabeli i wypełnienie jej danymi ...................................... 42
5.4. Dodanie nową przestrzeń kluczy kontrahenci ................................................................ 43
6. Podsumowanie ......................................................................................................... 45

3
1. Zakres prac

W ramach zadania z laboratorium przedstawię dwa podejścia stworzenia klastra Cassanda z 3-ma
węzłami.

- podejście 1 – z użyciem Docker

- podejście 2 – z użyciem wirtualnej maszyny (UTM nie VirtualBox) na systemie operacyjnym MacOS
z procesorem M1

2. Przygotowanie 3 serwerów Cassandra za pomocą Docker

2.1. Tworzenie Docker network – komunikacja kontenerów między sobą

Aby moc odwoływać się do poszczególnych serwerów (kontenerów w Docker) bez znajomości ich IP
tylko poprzez nazwę kontenera, oraz komunikacji kontenerów między sobą na tym samym hoście
należy stworzyć sieć.

4
(listing01)

1. Utworzyliśmy nową sieć o nazwie: „cassandra_network”


2. Sprawdzamy, czy sieć istnieje
3. Informacja o zakresie numerów IP która sieć będzie wykorzystywała (maska 16 bitowa 256
adresów IP)
4. Lista wszystkich kontenerów które są podłączone do sieci – w chwili obecnej nie mamy
żadnego kontenera

5
2.2. Tworzenie kontenerów i komunikacja między węzłami za pomocą IP

Ponieważ z listingu01 wiedząc jakie adresy IP będą przydzielane do kolejnych kontenerów jesteśmy
w stanie określić przydzielane adresów IP, i będą to następujące:

Kontener 1: 172.18.0.2

Kontener 2: 172.18.0.3

Kontener 2: 172.18.0.4

2.2.1. Kontener: cassandra-server

1. Tworzymy i uruchamiamy kontener w tle


2. Przydzielamy lokalne porty do komunikacji z odpowiednimi portami po stronie kontenera
3. Nazwa naszego kontenera
4. Aby nie utracić danych (bazy danych) po restarcie kontenera montujemy lokalny katalog, w
którym wszystkie dane będą zapisywanym i przy restarcie kontenera pobierane ponownie

5, 6,7,8 konfiguracja cassandra (pliki: cassandra.yaml oraz cassandra-rackdc.properties)

9. określmy sieć, do której ma zostać dodany kontener

2.2.2. Kontener casandra-server02

W analogiczny sposób postępujemy, aby stworzyć kolejne serwisy. Jedyna różnica to taka, że
omijamy punkt nr: 4

6
2.2.3. Kontener casandra-server03

Za pomocą

docker network inspect cassandra_network

sprawdzamy czy wszystkie kontenery zostały dodane do sieci:

7
2.3. Tworzenie kontenerów i komunikacja między węzłami za pomocą nazwy
kontenerów – zalecane

W analogiczny sposób postępujemy, jeśli zamiast numerów IP podamy nazwy kontenerów (właśnie
w tym celu tworzyliśmy sieć). Jest to sposób zalecany.

2.3.1. Kontener: cassandra-server

2.3.2. Kontener: cassandra-server02

8
2.3.3. Kontener: cassandra-server03

Sprawdzanie czy wszystkie kontenery znajdują się w jednej sieci:

9
2.4. Komunikacja pomiędzy kontenerami/serwerami

Sprawdzanie czy kontenery mają dostęp i widzą się nawzajem

2.4.1. Instalacja ping

Ponieważ kontenery nie zawierają polecenia ping należy go najpierw zainstalować – poniższe kroki
wykonujemy na zadym z kontenerów osobno.

Wchodzimy do każdego shela kontenera:

docer exec -it cassandra-server bash

Instalujemy polecenie ping:

Pobieramy IP z każdego z kontrolera

2.4.2. Sprawdzanie adresów IP

10
Adresy poszczególnych serwerów to:

- cassandra-server: 172.18.0.2

- cassandra-server02: 172.18.0.3

- cassandra-server03: 172.18.0.4

2.4.3. Pingowanie

11
12
Jak widzimy z listingów wszystkie serwery widzą się wzajemnie

3. Praca z klastrem

Na obecnym etapie posiadamy:

- 3 kontenery (serwery)

- każdy z serwerów posiada odrębną instalacje cassandra

- każdy z serwerów/kontenerów widzi się nawzajem

- 3 serwery cassandra składają się na klaster, której topologię przedstawia rysunek poniżej:

13
3.1. Pobieranie informacji o klastrze

Z poziomu każdego z kontenera wywołujemy polecenie nodetool aby sprawdzić informacje o klastrze

Pobieranie szczegółowych informacji

14
3.2. Zatrzymanie jednego węzła

Ponownie sprawdzam informacje o klastrze

Jak widzimy węzeł o IP 172.18.0.3 jest wyłączony (DW)

15
3.3. Ponowne uruchomienie zatrzymanego węzła

Jak widzimy węzeł o IP 172.18.0.3 jest ponownie dostępny (UN)

4. Przygotowanie 3 serwerów Cassandra za pomocą wirtualnych


maszyn (UTM) na Mac z procesorem M1

Prowadzący zajęcia przygotował szczegółową dokumentację odnośnie przygotowania 3 wirtualnych


maszyny z użyciem VirtualBox na system operacyjny Wnidows. Poniżej przedstawiam alternatywę
zrobienia analogicznej operacji na system operacyjny MAC z procesorem M1. W chwili opracowywania
poniższej dokumentacji istnieje beta wersja VirtualBox pod Mac M1, jednak nie było możliwe za jej
pomocą stworzyć wirtualnej maszyny Ubuntu. Z tego powodu zdecydowałem się użyć rozwiązania
opartego na programie UTM.

Przygotowana instrukcja powstała ze wylęgu na ogrom prac i czasu jaki musiałem poświęcić by
osiągnąć zamierzone efekty. Mam nadziej ze w przyszłości przyda się inny studentom.

4.1. Instalacja oprogramowania

W celu utworzenia wirtualnych maszyn należy pobrać i zainstalować oprogramowanie UTM.


https://mac.getutm.app

4.2. Pobranie obrazu Ubuntu

Ważę jest, aby pobrać Ubuntu w wersji ARM nie adm

https://cdimage.ubuntu.com/jammy/daily-live/current/

16
4.3. Tworzenie Ubuntu wirtualnej maszyny

Jest istotne, aby postępować zgodnie z wytycznymi. Osobiście potrzebowałem wielu prób i szukania
rozwiązań w Internecie, aby ostatecznie doprowadzić proces do sukcesu.

17
Wybieramy obraz Ubuntu, który wcześniej pobraliśmy i klikamy Continue.

18
Przydzielamy odpowiednio ilość pamięci RAM oraz ilość rdzeni procesora – dla naszej potrzeby
podaje wartości minimalne.

Przydzielam 15 GB przestrzeni dyskowej – również niezbędne minimum.

19
Przydzielam folder dzielony – dzięki czemu będzie możliwy dostęp do całej zawartości z poziomu
Ubuntu

Podajemy nazwę naszej maszyny wirtualnej.

20
W ustawieniach dodajemy siec VLAN – aby nasza maszyna miała dostęp do Internetu.

W ustawieniach dodajmy nową sieć „Shared Network” – aby maszyny wirtualne widziały się
nawzajem

21
Uruchamiamy wirtualną maszynę i jako nazwę użytkownika podajemy „ubuntu”

Uruchamiamy instalator i przystępujemy do procesu instalacyjnego. Nie będę opisywał


poszczególnych kroków, ponieważ są one intuicyjne.

22
Po zainstalowaniu Ubuntu pojawi się przycisk, aby zrestartować system. Po kliknięciu należy
odmontować CD/DVD z naszym obrazem instalacyjnym. Następnie uruchomić Ubuntu ponownie.

4.1. Sprawdzanie widoczności maszyn wirtualnych

Przed kolejnymi etapami należy sprawdzić czy wszystkie 3 maszyny wirtualne widzą się nawzajem. Do
tego celu potrzebujemy IP każdej z nich. Za pomocą polecenie: ip addr pobieramy adresy IP maszyn

W moim przypadku maszyny wirtualne otrzymały następujące adresy IP:

Maszyna 1: 192.168.64.9

Maszyna 2: 192.168.64.10

Maszyna 3: 192.168.64.12

Za pomocą polecenia ping sprawdzamy czy maszyny wirtualne widzą się nawzajem

23
4.2. Instalacja Java

Przed instalacja należy sprawdzić czy Java nie jest już zainstalowana: java -version

Dopiero wówczas przystępujemy do instalacji:

sudo apt-get update

sudo apt install default-jdk

24
Po instalacja Java powinna być już dostępna:

4.2.1. Konfiguracja JAVA_HOME oraz dodanie Java do przestrzeni Ubuntu

Sprawdzamy, gdzie w systemie jest dostępna java:

update-alternatives --config java

Edytujemy plik: /etc/environment

sudo gedit /etc/environment

25
Dodajemy na początku:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

Oraz do PATH:

:$JAVA_HOME/bin

Restartujemy zmienne środowiskowe:

source /etc/environment

oraz sprawdzamy czy zmienne zostały ustawione:

echo $JAVA_HOME

echo $PATH

4.3. Instalacja curl

W trakcie instalacji Cassandra potrzebne będzie curl dlatego go instalujemy:

sudo apt update && sudo apt upgrade

sudo apt install curl

curl --version

26
4.4. Instalacja Cassandra

Podejście do instalacji Cassandr’y różni się od podejścia zaproponowane przez prowadzącego.

4.4.1. Instalacja jako pakiet Debian

Dodaj repozytorium Apache Cassandry do pliku cassandra.sources.list. Najnowsza wersja główna to


4.1, a odpowiadająca jej nazwa dystrybucji to 41x (z przyrostkiem „x”).

echo "deb https://debian.cassandra.apache.org 41x main" | sudo tee -a


/etc/apt/sources.list.d/cassandra.sources.list

deb https://debian.cassandra.apache.org 41x main

27
Dodaj klucze repozytorium Apache Cassandra do listy zaufanych kluczy na serwerze:

Zaktualizuj indeks pakietu ze źródeł:

sudo apt-get update

Zainstaluj Cassandrę za pomocą APT:

sudo apt-get install cassandra

28
Monitoruj postęp uruchamiania za pomocą:

tail -f /var/log/cassandra/system.log

Sprawdź status Cassandra:

nodetool status

29
Sprawdzanie serwisku Cassandra:

systemctl status Cassandra

Dziki temu będzie możliwe korzystać z takich poleceń jak:

service cassandra stop

service cassandra start

service cassandra restart

4.5. Konfiguracja Casandra – klaster z 3 węzłami

sudo gedit /etc/cassandra/cassandra.yaml

ustawiamy zmienne:

seeds: "192.168.64.9,192.168.64.10,192.168.64.12"

listen_address: 192.168.64.12

rpc_address: 192.168.64.12

endpoint_snitch: GossipingPropertyFileSnitch

30
Restartujemy Cassandra i obserwujemy logi Cassandr’y

sudo service cassandra restart

Wystąpił błąd, aby go naprawić należy w pliku /etc/cassandra-env.sh dodać na koniec pliku poniższą
linijkę

sudo gedit /etc/cassandra/cassandra-env.sh

JVM_OPTS="$JVM_OPTS -Dcassandra.ignore_dc=true"

I uruchamiamy ponownie

sudo service cassandra restart

Wszystko działa, teraz zmieniamy ustawienia w pliku: /etc/cassandra/cassandra-rackdc.properties

I ponownie restartujemy cassandra

sudo service cassandra restart

tym razem pojawia się nowy problem:

Ponownie edytujemy plik: sudo gedit /etc/cassandra/cassandra-env.sh i dodajemy na koniec:

31
JVM_OPTS="$JVM_OPTS - Dcassandra.ignore_rack=true"

Na koniec należy jeszcze zrobić:

nodetool repair

nodetool cleanup

Ponownie sprawdzamy statusy wszystkich węzłów na wszystkich serwerach

nodetool status

32
Wszystko dział zgodnie z założeniami.

4.6. Testowanie dostępności węzłów

Jeszcze tylko jeden eksperyment. Zatrzymamy jeden z węzłów poleceniem

service cassandra stop

Zgodnie z założeniami węzeł o IP: 192.168.64.10 nie jest widoczny przez pozostałe węzły.

Uruchamiamy zatrzymany węzeł ponownie

33
service cassandra start

Wszystko wróciło do normy

4.7. Testowanie cqlsh

Sprawdzamy teraz czy jesteśmy w stanie dostać się do cassandra: sqlsh

Otrzymujemy kolejny błąd

W takie sytuacji do zmiennych globalnych należy dodać zmienna: CQLSH_HOST i przypisujemy do niej
IP danego węzła

34
W tym przypadku resetowanie zmiennych globalnych i restart cassndra nie pomoże – trzeba
zrestartować cały serwer:

Można zamiast tworzenia zmiennej globalnej wywoływać komendy cqlsh z IP węzła

Cqlsh 192.168.64.12

Jednak takie podejście może być kłopotliwe

5. Zadanie

Po tak długim wprowadzeniu i objaśnieniu sposobu tworzenia klastra za pomocą Docker przystępuję
do realizacji meritum zadnia

5.1. Widok przed przystąpieniem do prac

5.1.1. Docker

35
36
5.1.2. VirtualneMaszyny (UTM)

5.2. Przeniesienie danych z zadania01 dot. Filmoteki

Dokonuje jednej modyfikacji przy tworzeniu przestrzeni klucza filmoteka z:

CREATE KEYSPACE IF NOT EXISTS filmoteka WITH replication={'class':'SimpleStrategy',


'replication_factor':1};

Na:

CREATE KEYSPACE IF NOT EXISTS filmoteka WITH replication={'class':'NetworkTopologyStrategy',


'replication_factor':3};

Co powinno zapewnić nam replikację bazy pomiędzy stworzonymi węzłami

5.2.1. Docker - baza

37
Zgodnie z przypuszczeniami widzimy nastąpiła replikacja filmoteka do pozostałych węzłów w
utworzonym klastrze

Teraz utworze wszystkie tabele w jednym z węzłów (172.18.0.3) i wypełnię je danymi:

5.2.2. VirtualneMaszyny (UTM) - baza

38
5.2.3. Docker - dane

Ponownie zgodnie z założeniami dane z węzła 172.18.0.3 zostały zreplikowane do pozostałych węzłów.

39
5.2.4. Wirtualna maszyna (UTM) – dane

5.3. Dodanie nową przestrzeń kluczy kina

5.3.1. Docker – nowa baza kina

40
5.3.2. Wirtualne maszyny (UTM) – nowa baza kina

41
5.3.3. Docker – dodanie tabeli i wypełnienie jej danymi

5.3.4. Wirtualna maszyna (UTM) – dodanie tabeli i wypełnienie jej danymi

42
5.4. Dodanie nową przestrzeń kluczy kontrahenci

W analogiczny sposób została utworzona baza: kontrahenci:

43
44
6. Podsumowanie

W zadaniu przedstawiłem dwa podejścia (Docer i wirtualna maszyna - UTM) na stworzenie środowiska
testowego dla bazy danych Cassandra z wykorzystaniem 3 węzłów. Przedstawiłem wszystkie problemy
oraz rozwiązania napotkane w trakcie instalacji środowiska/serwerów jak również problemy i
rozwiązane związane z samą bazą Cassandra.

W dalszej części zadania przystapiłem do dodawania nowych baz oraz sprawdzenie czy są one
poprawnie replikowane pomiędzy węzłami w klastrze.

Muszę przyznać, że część poświęcona stworzeniem klastra, konfiguracji i samych węzłów była
najbardziej kłopotliwa i bardzo czasochłonna.

Ostatecznie potwierdzam że replikacja pomiędzy węzłami działa w sposób prawidłowy i zgodny z


założeniami.

45

You might also like