Laut : — verteiltes, fehlertolerantes Objektspeicher , kompatibel mit Clients, die die Amazon S3-API und REST-API nutzen, sowie im NFS-Servermodus arbeiten kann. Es gibt Optimierungen für die Speicherung sowohl kleiner als auch sehr großer Objekte, es ist ein integrierter Caching-Mechanismus vorhanden, und eine Replikation von Speichern zwischen Rechenzentren ist möglich. Zu den Zielen des Projekts gehört die Erreichung einer Zuverlässigkeit von 99,9999999 % durch redundante Replikation von Duplikaten und die Vermeidung eines Single Point of Failure. Der Code des Projekts ist in Erlang geschrieben.
LeoFS besteht aus drei Komponenten:
- — behandelt die Operationen zum Hinzufügen, Abrufen und Löschen von Objekten und Metadaten, verantwortlich für die Durchführung von Replikationen, Wiederherstellungen und die Bildung von Warteschlangen für Kundenanfragen.
- — bearbeitet HTTP-Anfragen und leitet Antworten an die Clients unter Verwendung der REST-API oder S3-API weiter, sorgt für das Caching der meistgefragten Daten im Arbeitsspeicher und auf der Festplatte.
- — überwacht den Betrieb der Knoten LeoFS Gateway und LeoFS Storage, führt eine Statusüberwachung der Knoten durch und prüft die Prüfziffern. Gewährleistet die Datenintegrität und hohe Verfügbarkeit des Speichers.
In diesem Beitrag werden wir LeoFS mit Ansible-Playbook installieren und S3, NFS testen.
Wenn Sie versuchen, LeoFS mit den offiziellen Playbooks zu installieren, werden Sie auf verschiedene Fehler stoßen: ,. In diesem Beitrag werde ich erläutern, was zu tun ist, um diese Fehler zu vermeiden.
Für den Ort, an dem Sie das Ansible-Playbook ausführen, muss Netcat installiert werden.
Beispiel-Inventar
Beispiel-Inventar (im Repository hosts.sample):
# Please check roles/common/vars/leofs_releases for available versions
[all:vars]
leofs_version=1.4.3
build_temp_path="/tmp/leofs_builder"
build_install_path="/tmp/"
build_branch="master"
source="package"
#[builder]
#172.26.9.177
# nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all
[leo_manager_0]
172.26.9.176
# nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all
[leo_manager_1]
172.26.9.178
[leo_storage]
172.26.9.179 leofs_module_nodename=S0@172.26.9.179
172.26.9.181 leofs_module_nodename=S0@172.26.9.181
172.26.9.182 leofs_module_nodename=S0@172.26.9.182
172.26.9.183 leofs_module_nodename=S0@172.26.9.183
[leo_gateway]
172.26.9.180 leofs_module_nodename=G0@172.26.9.180
172.26.9.184 leofs_module_nodename=G0@172.26.9.184
[leofs_nodes:children]
leo_manager_0
leo_manager_1
leo_gateway
leo_storageServer vorbereiten
Deaktivierung von Selinux. Ich hoffe, dass die Gemeinschaft Richtlinien für Selinux für LeoFS erstellt.
- name: Installiere libselinux als Voraussetzung für das SELinux-Ansible-Modul
yum:
name: "{{item}}"
state: latest
with_items:
- libselinux-python
- libsemanage-python
- name: Deaktiviere SELinux beim nächsten Neustart
selinux:
state: disabled
- name: Setze SELinux in den permissiven Modus, bis die Maschine neu gestartet wird
command: setenforce 0
ignore_errors: true
changed_when: false
Installation netcat und redhat-lsb-core. netcat wird benötigt für leofs-adm, redhat-lsb-core wird benötigt, um die OS-Version zu bestimmen .
- name: Pakete installieren
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreErstellen des Benutzers leofs und Hinzufügen zu der Gruppe wheel
- name: Benutzer leofs erstellen
group:
name: leofs
state: present
- name: Erlaube der Gruppe 'wheel' passwortloses Sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Füge den Benutzer 'leofs' zur Gruppe 'wheel' hinzu
user:
name: leofs
groups: wheel
append: yesErlang-Installation
- name: Remote erlang-20.3.8.23-1.el7.x86_64.rpm mit yum installieren
yum: name=https://github.com/rabbitmq/erlang-rpm/releases/download/v20.3.8.23/erlang-20.3.8.23-1.el7.x86_64.rpm
Die vollständige Version des korrigierten Ansible-Playbooks finden Sie hier:
Installation, Konfiguration, Start
Führen Sie dann aus, wie es in ohne build_leofs.yml
## Install LeoFS
$ ansible-playbook -i hosts install_leofs.yml
## Config LeoFS
$ ansible-playbook -i hosts config_leofs.yml
## Start LeoFS
$ ansible-playbook -i hosts start_leofs.ymlÜberprüfen Sie den Status des Clusters auf Primary LeoManager
leofs-adm statusPrimary und Secondary sind in den Logs des Ansible-Playbooks zu sehen


Die Ausgabe wird ungefähr so aussehen
[Systemkonfiguration]
-----------------------------------+----------
Element | Wert
-----------------------------------+----------
Basis-/Konsistenzebene
-----------------------------------+----------
Systemversion | 1.4.3
Cluster-ID | leofs_1
DC-ID | dc_1
Gesamtanzahl der Replikate | 2
Anzahl der Erfolge von R | 1
Anzahl der Erfolge von W | 1
Anzahl der Erfolge von D | 1
Anzahl der rackbewussten Replikate | 0
Ringgröße | 2^128
-----------------------------------+----------
Multi-DC-Replikationseinstellungen
-----------------------------------+----------
[mdcr] max Anzahl der beitrittsfähigen DCs | 2
[mdcr] Gesamtanzahl der Replikate pro DC | 1
[mdcr] Anzahl der Erfolge von R | 1
[mdcr] Anzahl der Erfolge von W | 1
[mdcr] Anzahl der Erfolge von D | 1
-----------------------------------+----------
Manager RING-Hash
-----------------------------------+----------
aktueller Ring-Hash | a0314afb
vorheriger Ring-Hash | a0314afb
-----------------------------------+----------
[Zustand der Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
Typ | Node | Zustand | Rack-ID | aktueller Ring | vorheriger Ring | aktualisiert am
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.179 | läuft | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.181 | läuft | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.182 | läuft | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.183 | angeschlossen | | | | 2019-12-05 10:33:58 +0000
G | G0@172.26.9.180 | läuft | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
G | G0@172.26.9.184 | läuft | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Benutzer erstellen
Benutzer leofs erstellen:
leofs-adm create-user leofs leofs
access-key-id: 9c2615f32e81e6a1caf5
secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebListe der Benutzer:
leofs-adm get-users
user_id | role_id | access_key_id | erstellt am
------------+---------+------------------------+---------------------------
_test_leofs | 9 | 05236 | 2019-12-02 06:56:49 +0000
leofs | 1 | 9c2615f32e81e6a1caf5 | 2019-12-02 10:43:29 +0000Bucket erstellen
Bucket erstellt
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKListe der Buckets:
leofs-adm get-buckets
cluster id | bucket | owner | berechtigungen | erstellt am
-------------+----------+--------+------------------+---------------------------
leofs_1 | leofs | leofs | Ich(vollständige Kontrolle) | 2019-12-02 10:44:02 +0000S3cmd konfigurieren
Im Feld Name des HTTP-Proxyservers geben Sie die IP-Adresse des Gateway-Servers an
s3cmd --configure
Geben Sie neue Werte ein oder akzeptieren Sie die Standardwerte in Klammern mit Enter.
Siehe Benutzerhandbuch für eine detaillierte Beschreibung aller Optionen.
Der Access Key und der Secret Key sind Ihre Identifikatoren für Amazon S3. Lassen Sie diese leer, um die Umgebungsvariablen zu verwenden.
Access Key [9c2615f32e81e6a1caf5]:
Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]:
Standardregion [US]:
Verwenden Sie "s3.amazonaws.com" für den S3-Endpunkt und ändern Sie ihn nicht in das Ziel-Amazon S3.
S3-Endpunkt [s3.amazonaws.com]:
Verwenden Sie "%(bucket)s.s3.amazonaws.com" für das Ziel-Amazon S3. Die Variablen "%(bucket)s" und "%(location)s" können verwendet werden,
wenn das Ziel-S3-System DNS-basierte Buckets unterstützt.
DNS-ähnliche Bucket+Hostname:Port-Vorlage für den Zugriff auf einen Bucket [%(bucket)s.s3.amazonaws.com]: leofs
Das Passwort für die Verschlüsselung wird verwendet, um Ihre Dateien während der Übertragung an S3 vor dem Lesen durch Unbefugte zu schützen.
Verschlüsselungspasswort:
Pfad zum GPG-Programm [\/usr\/bin\/gpg]:
Wenn das sichere HTTPS-Protokoll verwendet wird, sind alle Kommunikationen mit den Amazon S3-Servern vor Lauschangriffen Dritter geschützt. Diese Methode ist
langsame als reines HTTP und kann nur mit Python 2.7 oder neuer proxyseitig verwendet werden.
HTTPS-Protokoll verwenden [Nein]:
In einigen Netzwerken muss der gesamte Internetzugang über einen HTTP-Proxy erfolgen.
Versuchen Sie, hier Einstellungen vorzunehmen, wenn Sie keine direkte Verbindung zu S3 herstellen können.
Name des HTTP-Proxyservers [172.26.9.180]:
HTTP-Proxyserver-Port [8080]:
Neue Einstellungen:
Access Key: 9c2615f32e81e6a1caf5
Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
Standardregion: US
S3-Endpunkt: s3.amazonaws.com
DNS-ähnliche Bucket+Hostname:Port-Vorlage für den Zugriff auf einen Bucket: leofs
Verschlüsselungspasswort:
Pfad zum GPG-Programm: \/usr\/bin\/gpg
HTTPS-Protokoll verwenden: Falsch
Name des HTTP-Proxyservers: 172.26.9.180
HTTP-Proxyserver-Port: 8080
Zugriff mit den angegebenen Anmeldedaten testen? [Y\/n] Y
Bitte warten, es wird versucht, alle Buckets aufzulisten...
Erfolg. Ihr Access Key und Secret Key haben gut funktioniert :-)
Jetzt wird geprüft, ob die Verschlüsselung funktioniert...
Nicht konfiguriert. Macht nichts.
Einstellungen speichern? [y\/N] y
Konfiguration in '\/home\/user\/.s3cfg' gespeichertWenn Sie den Fehler ERROR: S3-Fehler: 403 (AccessDenied): Zugriff verweigert: erhalten,
s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py' [1 von 1]
382 von 382 100% in 0s 3.40 kB\/s erledigt
ERROR: S3-Fehler: 403 (AccessDenied): Zugriff verweigertmuss im s3cmd-Config die signature_v2 auf True gesetzt werden. Einzelheiten finden Sie darin .
Wenn signature_v2 auf False steht, wird der folgende Fehler angezeigt:
WARNUNG: Fehlgeschlagene Anfrage wird erneut versucht: \/?delimiter= (getaddrinfo() Argument 2 muss ein Integer oder String sein)
WARNUNG: Warte 3 Sek...
WARNUNG: Fehlgeschlagene Anfrage wird erneut versucht: \/?delimiter= (getaddrinfo() Argument 2 muss ein Integer oder String sein)
WARNUNG: Warte 6 Sek...
FEHLER: Test fehlgeschlagen: Anfrage fehlgeschlagen für: \/?delimiter=Upload-Test
Eine 1GB-Datei erstellen
fallocate -l 1GB 1gbLaden Sie sie in Leofs hoch
time s3cmd put 1gb s3:\/\/leofs\/\nreal 0m19.099s
user 0m7.855s
sys 0m1.620sStatistik
leofs-adm du für 1 Knoten:
leofs-adm du S0@172.26.9.179
aktive Anzahl von Objekten: 156
gesamtzahl von Objekten: 156
aktive Größe der Objekte: 602954495
gesamte Größe der Objekte: 602954495
Verhältnis der aktiven Größe: 100.0%
letzter Komprimierungsstart: ____-__-__ __:__:__
letzte Komprimierungsende: ____-__-__ __:__:__Wir sehen, dass die Ausgabe nicht sehr informativ ist.
Schauen wir uns an, wo sich diese Datei befindet.
leofs-adm whereis leofs\/1gb
leofs-adm wo ist leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
del? | node | ring-Adresse | Größe | Prüfziffer | hat Kinder | gesamt Chunks | Uhrzeit | wann
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
| S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | wahr | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000
| S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | wahr | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000Aktivieren von NFS
Aktivieren von NFS auf dem Server Leo Gateway 172.26.9.184.
Auf dem Server und Client installieren wir nfs-utils
sudo yum install nfs-utilsGemäß der Anleitung passen wir die Konfigurationsdatei an /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsAuf dem Server 172.26.9.184 starten wir rpcbind und leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartAuf dem Server, wo der leo_manager läuft, erstellen wir einen Bucket für NFS und generieren einen Schlüssel für die Verbindung zu NFS
leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-Adresse-nfs-clientVerbindung zu NFS
sudo mkdir /mnt/leofs
## für Linux - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock ip-Adresse-nfs-server-wo-sie-gateway-haben://access_key_id/ /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofsÜberprüfung des Speicherplatzes über den NFS-Client
Speicherplatz unter Berücksichtigung, dass jeder Storage-Node eine 40GB-Festplatte hat (3 Nodes aktiv, 1 Node angehängt):
df -hP
Dateisystem Größe Used Verfügbar Nutzung% Einghängt auf
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofsInstallation von LeoFS mit 6 Storage-Nodes.
Inventar (ohne Builder):
# Please check roles/common/vars/leofs_releases for available versions
[all:vars]
leofs_version=1.4.3
build_temp_path="/tmp/leofs_builder"
build_install_path="/tmp/"
build_branch="master"
source="package"
# nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all
[leo_manager_0]
172.26.9.177
# nodename of leo_manager_0 and leo_manager_1 are set at group_vars/all
[leo_manager_1]
172.26.9.176
[leo_storage]
172.26.9.178 leofs_module_nodename=S0@172.26.9.178
172.26.9.179 leofs_module_nodename=S0@172.26.9.179
172.26.9.181 leofs_module_nodename=S0@172.26.9.181
172.26.9.182 leofs_module_nodename=S0@172.26.9.182
172.26.9.183 leofs_module_nodename=S0@172.26.9.183
172.26.9.185 leofs_module_nodename=S0@172.26.9.185
[leo_gateway]
172.26.9.180 leofs_module_nodename=G0@172.26.9.180
172.26.9.184 leofs_module_nodename=G0@172.26.9.184
[leofs_nodes:children]
leo_manager_0
leo_manager_1
leo_gateway
leo_storageAusgabe von leofs-adm status
Ausgabe von leofs-adm status
[System Confiuration]
-----------------------------------+----------
Item | Wert
-----------------------------------+----------
Basis-/Konsistenzlevel
-----------------------------------+----------
Systemversion | 1.4.3
Cluster ID | leofs_1
DC ID | dc_1
Gesamt-Replikate | 2
Anzahl der Erfolge von R | 1
Anzahl der Erfolge von W | 1
Anzahl der Erfolge von D | 1
Anzahl der rackbewussten Replikate | 0
Ringgröße | 2^128
-----------------------------------+----------
Multi-DC-Replikationseinstellungen
-----------------------------------+----------
[mdcr] Maximale Anzahl von beitretbaren DCs | 2
[mdcr] Gesamt-Replikate pro DC | 1
[mdcr] Anzahl der Erfolge von R | 1
[mdcr] Anzahl der Erfolge von W | 1
[mdcr] Anzahl der Erfolge von D | 1
-----------------------------------+----------
Manager RING-Hash
-----------------------------------+----------
Aktueller Ring-Hash | d8ff465e
Vorheriger Ring-Hash | d8ff465e
-----------------------------------+----------
[Zustand der Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
Typ | Node | Zustand | Rack-ID | Aktueller Ring | Vorheriger Ring | Aktualisiert am
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.178 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.179 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.181 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:30 +0000
S | S0@172.26.9.182 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.183 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.185 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
G | G0@172.26.9.180 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
G | G0@172.26.9.184 | läuft | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Festplattenspeicher unter der Annahme, dass jede Storage-Node eine 40GB Festplatte hat (6 Nodes laufen):
df -hP
Dateisystem Größe Benutzt Verfügbar Nutzung% Eingehängt auf
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofsWenn 5 Nodes für den Storage verwendet werden
[leo_storage]
172.26.9.178 leofs_module_nodename=S0@172.26.9.178
172.26.9.179 leofs_module_nodename=S1@172.26.9.179
172.26.9.181 leofs_module_nodename=S2@172.26.9.181
172.26.9.182 leofs_module_nodename=S3@172.26.9.182
172.26.9.183 leofs_module_nodename=S4@172.26.9.183df -hP
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 100G 3.0G 97G 3% /mnt/leofsLogs
Logs befinden sich in Verzeichnissen /usr/local/leofs/current/*/log
Telegram-Kanal:
Quelle: habr.com
