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: Erneuter Versuch der fehlgeschlagenen Anforderung: \/?delimiter= (getaddrinfo() Argument 2 muss ganzzahl oder string sein)
WARNUNG: Warte 3 Sek...
WARNUNG: Erneuter Versuch der fehlgeschlagenen Anforderung: \/?delimiter= (getaddrinfo() Argument 2 muss ganzzahl oder string sein)
WARNUNG: Warte 6 Sek...
FEHLER: Test fehlgeschlagen: Anforderung 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
