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