zorun.garage
Rola Ansible dla Garage
Ta rola Ansible instaluje i konfiguruje Garage, rozproszoną usługę przechowywania obiektów typu open-source, dostosowaną do samodzielnego hostingu.
Rola pobiera wersję binarną Garage, tworzy użytkownika systemowego, ustawia katalogi na dane i metadane, generuje plik konfiguracyjny, a na końcu instaluje usługę systemd, aby uruchomić Garage.
Obecnie rola ta nie łączy automatycznie węzłów ze sobą, ale ta funkcja jest planowana.
Instalacja
Ta rola jest dostępna na Ansible Galaxy
Podstawowa konfiguracja
Minimalna wymagana konfiguracja to:
- szablon pliku konfiguracyjnego dla Garage
- cztery zmienne:
garage_version
,garage_local_template
,garage_metadata_dir
,garage_data_dir
Oto przykład playbooka:
- hosts: mycluster
roles:
- garage
vars:
garage_version: "0.8.0"
garage_local_template: "garage.toml.j2"
garage_metadata_dir: "/var/lib/garage"
garage_data_dir: "/mnt/data"
my_rpc_secret: "130458bfce56b518db49e5f72029070b5e0fcbe514052c108036d361a087643f"
my_admin_token: "7b3e91b552089363ab94eb95f62324fb4138c9a6d71a69daefae0c5047b33bb7"
Musisz również stworzyć plik templates/garage.toml.j2
w głównym katalogu swojej
katalogu Ansible z następującą treścią:
# Zarządzane przez Ansible
metadata_dir = "{{ garage_metadata_dir }}"
data_dir = "{{ garage_data_dir }}"
db_engine = "lmdb"
replication_mode = "3"
block_size = 1048576
compression_level = 1
rpc_bind_addr = "{{ ansible_default_ipv4.address }}:3901"
rpc_public_addr = "{{ ansible_default_ipv4.address }}:3901"
rpc_secret = "{{ my_rpc_secret }}"
bootstrap_peers = []
[s3_api]
s3_region = "garage"
api_bind_addr = "[::]:3900"
root_domain = ".s3.garage.localhost"
[s3_web]
bind_addr = "[::]:3902"
root_domain = ".web.garage.localhost"
index = "index.html"
[admin]
api_bind_addr = "[::1]:3903"
admin_token = "{{ my_admin_token }}"
W tym przykładzie używamy głównego adresu IPv4 każdego węzła jako adresu RPC.
Jeśli Twoje węzły są za NAT, musisz ustawić rpc_public_addr
na publiczny
adres IP każdego węzła.
Jeśli budujesz klaster IPv6, możesz użyć {{ ansible_default_ipv6.address }}
.
Dodatkowo, ten przykład używa dwóch customowych zmiennych: my_rpc_secret
i my_admin_token
.
Czuj się swobodnie, aby używać customowych zmiennych dla dowolnego wpisu konfiguracyjnego, który chcesz zarządzać.
Podanie szablonu jest uciążliwe, ale daje wiele elastyczności. Zajrzyj do oficjalnej dokumentacji aby skonfigurować Garage zgodnie z własnymi wymaganiami.
Referencja do zmiennych
Poniżej znajduje się lista wszystkich zmiennych roli wraz z krótkim opisem. Kilka z tych zmiennych jest obowiązkowych. Dla wszystkich innych zmiennych podajemy domyślną wartość.
garage_version (obowiązkowe)
Wersja Garage do pobrania i użycia, bez początkowego v
. Przykład: 0.8.0
.
garage_local_template (obowiązkowe)
Lokalna ścieżka do szablonu pliku konfiguracyjnego Garage. Przy używaniu ścieżki względnej, zapoznaj się z dokumentacją dotycząca ścieżek Ansible.
garage_metadata_dir (obowiązkowe)
Miejsce, w którym metadane będą przechowywane przez Garage. Rola ta stworzy ten katalog z odpowiednimi uprawnieniami.
garage_data_dir (obowiązkowe)
Miejsce, w którym rzeczywiste dane będą przechowywane przez Garage. Rola ta stworzy ten katalog z odpowiednimi uprawnieniami.
garage_config_file: /etc/garage.toml
Lokalizacja pliku konfiguracyjnego generowanego na docelowym hoście.
garage_systemd_service: garage
Nazwa usługi systemd. Przydatne, jeśli planujesz uruchomić kilka demonów Garage na tym samym hoście.
garage_binaries_dir: /usr/local/bin
Katalog, w którym będą przechowywane pobrane pliki binarne Garage. Każdy plik w tym
katalogu będzie nazwany z wersją jako przyrostkiem, np. /usr/local/bin/garage-0.8.0
.
garage_main_binary: /usr/local/bin/garage
Ścieżka do głównego pliku binarnego używanego przez usługę systemd. Będzie to symlink do żądanej wersji Garage.
garage_system_user: garage
Nazwa użytkownika systemowego do utworzenia. Garage będzie działać jako ten użytkownik, a wszystkie pliki (zarówno dane, jak i metadane) będą należały do tego użytkownika.
garage_system_group: garage
Nazwa grupy systemowej do utworzenia.
garage_logging: netapp=info,garage=info
Konfiguracja logowania dla Garage, podana przez RUST_LOG
.
Zobacz dokumentację env_logger
dla szczegółów dotyczących składni.
garage_architecture: {{ansible_architecture}}
Architektura CPU dla pobranej wersji binarnej. Powinna być automatycznie ustawiona
na odpowiednią architekturę hosta docelowego, ale możesz ją również nadpisać w przypadku,
gdy jest niewłaściwa (np. jeśli chcesz uruchomić binarną wersję i686
).
Zaawansowana konfiguracja: wiele demonów Garage
Załóżmy, że chcesz uruchomić wiele demonów Garage na tej samej maszynie. Na przykład możesz mieć kilka klastrów z niektórymi nakładającymi się węzłami.
Oto przykład inwentarza Ansible:
[cluster1]
host1
host2
host3
[cluster2]
host1
host2
host3
host4
host5
Możesz zarządzać tą sytuacją za pomocą następującego playbooka:
- hosts: cluster1
roles:
- garage
vars:
garage_version: "0.8.0"
garage_local_template: "garage.toml.j2"
garage_config_file: /etc/garage-cluster1.toml
garage_metadata_dir: "/var/lib/garage/cluster1"
garage_data_dir: "/mnt/data/cluster1"
garage_systemd_service: garage-cluster1
garage_main_binary: /usr/local/bin/garage-cluster1
garage_system_user: garage-cluster1
garage_system_group: garage-cluster1
- hosts: cluster2
roles:
- garage
vars:
garage_version: "0.8.1"
garage_local_template: "garage.toml.j2"
garage_metadata_dir: "/var/lib/garage/cluster2"
garage_data_dir: "/mnt/data/cluster2"
garage_config_file: /etc/garage-cluster2.toml
garage_systemd_service: garage-cluster2
garage_main_binary: /usr/local/bin/garage-cluster2
garage_system_user: garage-cluster2
garage_system_group: garage-cluster2
Bezpiecznie jest dzielić tę samą garage_version
i garage_local_template
.
Możesz również dzielić tego samego użytkownika i grupę, w zależności od swojego modelu zagrożeń.
Pamiętaj, że jeśli chcesz używać CLI Garage, musisz uruchomić coś
takiego jak garage-cluster1 -c /etc/garage-cluster1.toml status
. Podobnie, aby
zrestartować usługę: systemctl restart garage-cluster1
.
Uaktualnianie klastra
Najpierw upewnij się, że dokładnie przeczytałeś oficjalną dokumentację aktualizacji
Proste aktualizacje
Dla bezpiecznej "prostej aktualizacji":
- przeczytaj notatki o wersji
- zwiększ
garage_version
- dodaj
serial: 1
do swojego playbooka (zobacz dokumentację Ansible) - uruchom
ansible-playbook
z--step
- po ukończeniu aktualizacji przez każdy host sprawdź, czy wszystko działa zgodnie z oczekiwaniami, a następnie powiedz Ansible, aby
(c)ontynuował
Zaawansowane aktualizacje
Dla aktualizacji między niekompatybilnymi wersjami, dokładna strategia zależy od wersji: proszę odwołać się do oficjalnej dokumentacji i konkretnego przewodnika dotyczącego migracji.
Jeśli musisz pobrać nową wersję Garage bez dotykania istniejącego ustawienia, możesz uruchomić zadanie "download" samodzielnie i wymusić wersję:
ansible-playbook garage.yaml -e garage_version=0.9.0 --tags download
Powinieneś teraz mieć nowy plik binarny na swoich hostach, dostępny przez pełną
ścieżkę (np. /usr/local/bin/garage-0.9.0
). Umożliwia to przeprowadzenie migracji offline.
Setup Garage, a S3-compatible distributed software written in Rust
ansible-galaxy install zorun.garage