# 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:'
