# Replikacja kontenerów

# Główne cechy

  • Stosowany mechanizm replikacji pomiędzy regionami oparty jest na replikacji asynchronicznej.
  • Opóźnienie replikacji (czas pomiędzy zapisem w jednym regionie a dokonaniem replikacji do drugiego regionu) wynosi zwykle od kilku do kilkunastu minut. Zależny jest od wielkość kopiowanego obiektu oraz bieżącego obciążenia sieci.
  • Mechanizm replikacji może być uruchomiony tylko na konkretnych kontenerach i obejmuje swoim działaniem tylko obiekty znajdujące się wewnątrz wskazanych kontenerów. Nie można uruchomić replikacji na poziomie pojedynczego obiektu.
  • Obiekty podlegają replikacji w całości, tj. zmiana obiektu skutkuje replikacją całego obiektu.
  • Replikacja jest zawsze dwukierunkowa. Replikacja jednokierunkowa nie jest wspierana.
  • Usługa replikacji jest bezpłatna, natomiast rozliczeniu zgodnie z odpowiednim cennikiem podlega miejsce wykorzystane w poszczególnych regionach oraz transfer wymagany do przesłania danych.

# Potrzebne narzędzia

Konfiguracje replikacji można wykonać za pomocą narzędzia swiftclient bądź curl. Dalsza część artykułu przedstawia wykorzystanie swift-a. Przykłady do wykorzystania z narzędziem curl można znaleźć w dokumentacji OpenStack Swift (opens new window).

W przypadku replikacji obiektów o wielkości większej niż 5GB (np. obrazy wirtualnych maszyn) należy w obu regionach stworzyć i wykorzystywać na potrzeby replikacji kontenery o identycznej nazwie.

# Konfiguracja podstawowa

# Endpointy dostępowe

PL-WAW:
https://ocs-pl.oktawave.com

PL-KRK:
https://pl2-ocs.oktawave.com

# Adres do autoryzacji (OS_AUTH_URL)

PL-WAW:
https://ocs-pl.oktawave.com/auth/v3

PL-KRK:
https://pl2-ocs.oktawave.com/auth/v3

Adres URL do autoryzacji może być używany zamiennie, czyli możesz autoryzować się adresem PL-WAW, albo PL-KRK. Opcja ta będzie przydatna podczas wystąpienia problemów technicznych, w którymś z regionów.

# Config do połączenia

Dane potrzebne do połączenia z poszczególnymi endpointami znajdziesz przechodząc w Panelu do zakładki OCS -> informacje dowolnego kontenera. Potrzebne wartości to:

  • OS_PROJECT_ID (ID projektu)
  • OS_PROJECT_NAME (nazwa projektu OCS)
  • OS_PASSWORD (hasło do Panelu)
  • OS_USER_ID (login do Panelu)
  • REALM: WAWKRK
  • CLUSTERS: PL1WAW, PL2KRK

Na podstawie uzyskanych danych utwórz plik ze zmiennymi, który ułatwi Ci konstruowanie zapytań:

export OS_IDENTITY_VERSION=3
export OS_DOMAIN_NAME=OCS
export OS_USER_DOMAIN_NAME=OCS

export OS_AUTH_URL=
export OS_REGION_NAME=

export OS_USER_ID=
export OS_USERNAME=

export OS_PASSWORD=

export OS_PROJECT_ID=
export OS_PROJECT_NAME=

Oczywiście możesz też korzystać z przełączników swift (swift --os-help lub swift --help).

# Konfiguracja synchronizacji

Zwróć uwagę, że --os-region-name czy --os-storage-name to parametry, które trzeba przekazać w żądaniu i jest to zgodne z dokumentacją swiftclienta. Jeśli jednak zostały dopisane do pliku konfiguracyjnego dla połączenia, (na przykład jako zmienna export OS_REGION_NAME= ) wystarczy użyć samego polecenia, np: swift post kontener_warszawa

# Tworzenie kontenerów na których uruchomiona będzie synchronizacja

PL-WAW:
swift --os-region-name PL post kontener_warszawa
PL-KRK:
swift --os-region-name PL2 post kontener_krakow

# Sprawdzenie ustawień poszczególnych utworzonych kontenerów

PL-WAW:
swift --os-region-name PL stat -v kontener_warszawa
PL-KRK:
swift --os-region-name PL2 stat -v kontener_krakow

W rezultacie powinniśmy otrzymać:
URL: https://ocs-pl.oktawave.com/v1/AUTH_XXX/kontener_krakow
Auth Token: 1234
Account: AUTH_1234
Container: kontener_krakow
Objects: 0
Bytes: 0
Read ACL:
Write ACL:
Sync To:
Sync Key:
Accept-Ranges: bytes
X-Storage-Policy: Policy-0
Last-Modified: Thu, 18 Mar 2021 11:28:02 GMT
X-Timestamp: XXX
X-Trans-Id: XXX
Content-Type: application/json; charset=utf-8
X-Openstack-Request-Id: XXX

Zwróć uwagę na brak wartości parametrów "Sync To:" oraz "Sync Key:".

# Uruchomienie replikacji w relacji PL-WAW -> PL-KRK

swift --os-region-name PL post -t '//WAWKRK/PL2KRK/AUTH_XXX/kontener_krakow' -k 'hasło-replikacji' kontener_warszawa

# Uruchomienie replikacji w relacji PL-KRK -> PL-WAW

swift --os-region-name PL2 post -t '//WAWKRK/PL1WAW/AUTH_XXX/kontener_warszawa' -k 'hasło-replikacji' kontener_krakow

Hasło replikacji: wygeneruj losowe lub wpisz własne. Musi być identyczne dla obu regionów.

# Upload testowego obiektu

Wybierz lub stwórz lokalnie na komputerze plik testowy, np. do_synchronizacji.txt a następnie wykonaj upload pliku do regionu w PL-WAW:
swift --os-region-name PL upload kontener_warszawa do_synchronizacji.txt

# Sprawdź czy plik został prawidłowo zapisany w regionie PL-WAW

swift --os-region-name PL list kontener_warszawa

# Po kilku / kilkunastu minutach sprawdź czy obiekt został prawidłowo zreplikowany

swift --os-region-name PL2 list kontener_krakow

Po upływie kilku minut w kontenerze „kontener_krakow” w regionie PL-KRK powinien pojawić się obiekt do_synchronizacji.txt

# Weryfikacja konfiguracji

PL-WAW:
swift --os-region-name PL stat -v kontener_warszawa
PL-KRK:
swift --os-region-name PL2 stat -v kontener_krakow

W rezultacie powinniśmy otrzymać:
URL: https://pl2-ocs.oktawave.com/v1/AUTH_XXX/kontener_krakow
Auth Token: XXX
Account: AUTH_XXX
Container: kontener_krakow
Objects: 6
Bytes: 60
Read ACL:
Write ACL:
Sync To: //WAWKRK/PL1WAW/AUTH_XXX/kontener_warszawa
Sync Key: haslo_replikacji
Accept-Ranges: bytes
X-Timestamp: XXX
X-Trans-Id: XX-0060532a1a
X-Storage-Policy: Policy-0
Content-Type: application/json; charset=utf-8
X-Openstack-Request-Id: XXX

Zwróć uwagę czy prawidłowo ustawione są  "Sync To:" oraz "Sync Key:".

# Zatrzymanie replikacji

Aby zatrzymać replikację należy usunąć nagłówki “ Sync To:” oraz „Sync Key:” z właściwych kontenerów.

PL-WAW:
swift --os-region-name PL post kontener_warszawa -H 'X-Remove-Container-Sync-To:' -H 'X-Remove-Container-Sync-Key:'

PL-KRK:
swift --os-region-name PL2 post kontener_krakow -H 'X-Remove-Container-Sync-To:' -H 'X-Remove-Container-Sync-Key:'