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.

O projekcie

Setup Garage, a S3-compatible distributed software written in Rust

Zainstaluj
ansible-galaxy install zorun.garage
Licencja
Unknown
Pobrania
2.8k
Właściciel