Conform : — stoc de obiecte distribuit și redundant la nivel de fault , compatibil cu clienții care utilizează API Amazon S3 și REST-API, precum și cu suport pentru funcționarea în rol de server NFS. Există optimizări pentru stocarea atât a obiectelor mici, cât și a celor foarte mari, fiind prezent un mecanism încorporat de caching, și este posibilă replicarea stocărilor între centrele de date. Printre obiectivele proiectului se numără atingerea unei fiabilități de 99.9999999% prin replicarea redundantă a duplicatelor și eliminarea punctelor unice de eșec. Codul proiectului este scris în limbajul Erlang.
LeoFS este compus din trei componente:
- — gestionează operațiile de adăugare, extragere și ștergere a obiectelor și metadatelor, responsabil cu executarea replicării, recuperării și formării cozii de cereri ale clienților.
- — gestionează cererile HTTP și redirecționează răspunsurile către clienți folosind REST-API sau S3-API, asigură caching-ul celor mai solicitate date în memorie și pe disc.
- — monitorizează activitatea nodurilor LeoFS Gateway și LeoFS Storage, urmărește starea nodurilor și verifică sumarele de control. Garanție pentru integritatea datelor și disponibilitatea ridicată a stocării.
În această postare, vom instala LeoFS cu ajutorul ansible-playbook, vom testa S3, NFS.
Dacă încerci să instalezi LeoFS folosind playbook-urile oficiale, te așteaptă diferite erori: ,. În această postare voi scrie ce trebuie să faci pentru a evita aceste erori.
Acolo unde vei rula ansible-playbook, trebuie să instalezi netcat.
Exemplu de inventory
Exemplu de inventory (în 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_storagePregătirea serverelor
Dezactivarea Selinux. Sper că comunitatea va crea politici Selinux pentru LeoFS.
- name: Instalează libselinux ca prerequisit pentru modulul Ansible SELinux
yum:
name: "{{item}}"
state: latest
with_items:
- libselinux-python
- libsemanage-python
- name: Dezactivează SELinux la următoarea repornire
selinux:
state: disabled
- name: Setează SELinux în modul permisiv până la repornirea mașinii
command: setenforce 0
ignore_errors: true
changed_when: false
Instalare netcat și redhat-lsb-core. netcat necesar pentru leofs-adm, redhat-lsb-core necesar pentru determinarea versiunii OS .
- name: Instalează Pachete
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreCrearea utilizatorului leofs și adăugarea acestuia în grupul wheel
- name: Creează utilizator leofs
group:
name: leofs
state: present
- name: Permite grupului 'wheel' să aibă sudo fără parolă
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Adaugă utilizatorul 'leofs' în grupul 'wheel'
user:
name: leofs
groups: wheel
append: yesInstalarea Erlang
- name: Instalare erlang-20.3.8.23-1.el7.x86_64.rpm de la distanță cu yum
yum: name=https://github.com/rabbitmq/erlang-rpm/releases/download/v20.3.8.23/erlang-20.3.8.23-1.el7.x86_64.rpm
Versiunea completă a ansible playbook-ului corectat poate fi găsită aici:
Instalare, configurare, pornire
Acum executăm conform celor scrise în fără 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.ymlVerificăm starea clusterei pe LeoManager Principal
leofs-adm statusPrincipalul și secundarul pot fi văzute în jurnalele ansible-playbook


Iesirea va fi aproximativ astfel
[Configuratia Sistemului]
-----------------------------------+----------
Item | Valoare
-----------------------------------+----------
Nivel de bază/consistență
-----------------------------------+----------
versiunea sistemului | 1.4.3
ID cluster | leofs_1
ID DC | dc_1
Replici totale | 2
numărul de succesuri R | 1
numărul de succesuri W | 1
numărul de succesuri D | 1
numărul de replici conștiente de rack | 0
dimensiune inel | 2^128
-----------------------------------+----------
Setări de replicare Multi DC
-----------------------------------+----------
[mdcr] numărul maxim de DC-uri conectabile | 2
[mdcr] replici totale per DC | 1
[mdcr] numărul de succesuri R | 1
[mdcr] numărul de succesuri W | 1
[mdcr] numărul de succesuri D | 1
-----------------------------------+----------
Manager RING hash
-----------------------------------+----------
hash-ul actual al inelului | a0314afb
hash-ul anterior al inelului | a0314afb
-----------------------------------+----------
[Starea Node-urilor]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
tip | nod | stare | rack id | inel actual | inel anterior | actualizat la
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.179 | funcționează | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.181 | funcționează | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.182 | funcționează | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.183 | atașat | | | | 2019-12-05 10:33:58 +0000
G | G0@172.26.9.180 | funcționează | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
G | G0@172.26.9.184 | funcționează | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Creăm utilizator
Creăm utilizatorul leofs:
leofs-adm create-user leofs leofs
access-key-id: 9c2615f32e81e6a1caf5
secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebLista utilizatorilor:
leofs-adm get-users
user_id | role_id | access_key_id | created_at
------------+---------+------------------------+---------------------------
_test_leofs | 9 | 05236 | 2019-12-02 06:56:49 +0000
leofs | 1 | 9c2615f32e81e6a1caf5 | 2019-12-02 10:43:29 +0000Creăm Bucket
Am creat bucket
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKLista bucket-urilor:
leofs-adm get-buckets
cluster id | bucket | owner | permissions | created at
-------------+----------+--------+------------------+---------------------------
leofs_1 | leofs | leofs | Me(full_control) | 2019-12-02 10:44:02 +0000Configurarea s3cmd
În câmpul Numele serverului proxy HTTP specificăm IP-ul serverului Gateway
s3cmd --configure
Introduceți noile valori sau acceptați valorile implicite din paranteze cu Enter.
Consultați manualul utilizatorului pentru o descriere detaliată a tuturor opțiunilor.
Cheia de acces și cheia secretă sunt identificatorii dvs. pentru Amazon S3. Lăsați-le goale pentru a utiliza variabilele de mediu.
Cheia de acces [9c2615f32e81e6a1caf5]:
Cheia secretă [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]:
Regiunea implicită [US]:
Utilizați "s3.amazonaws.com" pentru Endpoint S3 și nu o modificați pentru Amazon S3 țintă.
Endpoint S3 [s3.amazonaws.com]:
Utilizați "% (bucket)s.s3.amazonaws.com" pentru ținta Amazon S3. Variabilele "% (bucket)s" și "% (location)s" pot fi utilizate dacă sistemul S3 țintă acceptă bucket-uri bazate pe DNS.
Șablon bucket+hostname:port bazat pe DNS pentru accesarea unui bucket [%(bucket)s.s3.amazonaws.com]: leofs
Parola de criptare este utilizată pentru a vă proteja fișierele de citirea de către persoane neautorizate în timp ce sunt transferate către S3.
Parola de criptare:
Calea către programul GPG [\/usr\/bin\/gpg]:
Atunci când utilizați protocolul HTTPS securizat, toate comunicațiile cu serverele Amazon S3 sunt protejate de interceptarea terților. Această metodă este mai lentă decât HTTP-ul simplu și poate fi proxy doar cu Python 2.7 sau mai nou.
Utilizați protocolul HTTPS [Nu]:
Pe unele rețele, tot accesul la internet trebuie să treacă printr-un server proxy HTTP.
Încercați să-l setați aici dacă nu puteți conecta direct la S3.
Numele serverului proxy HTTP [172.26.9.180]:
Portul serverului proxy HTTP [8080]:
Noile setări:
Cheia de acces: 9c2615f32e81e6a1caf5
Cheia secretă: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
Regiunea implicită: US
Endpoint S3: s3.amazonaws.com
Șablon bucket+hostname:port bazat pe DNS pentru accesarea unui bucket: leofs
Parola de criptare:
Calea către programul GPG: \/usr\/bin\/gpg
Utilizați protocolul HTTPS: False
Numele serverului proxy HTTP: 172.26.9.180
Portul serverului proxy HTTP: 8080
Testați accesul cu acreditivele furnizate? [Y\/n] Y
Vă rugăm să așteptați, încercând să listăm toate bucket-urile...
Succes. Cheia dvs. de acces și cheia secretă au funcționat bine :-)
Acum verificăm dacă criptarea funcționează...
Nu este configurat. Nu-i nimic.
Salvați setările? [y\/N] y
Configurarea a fost salvată în '\/home\/user\/.s3cfg'Dacă apare o eroare ERROR: S3 error: 403 (AccessDenied): Acces refuzat:
s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py' [1 din 1]
382 din 382 100% în 0s 3.40 kB\/s finalizat
ERROR: S3 error: 403 (AccessDenied): Acces refuzatAtunci trebuie să corectăm signature_v2 în configurația s3cmd la True. Detalii în acest .
Dacă signature_v2 va fi False, atunci va apărea următoarea eroare:
AVERTISMENT: Se reîncercă cererea nereușită: \/?delimiter= (argumentul 2 al getaddrinfo() trebuie să fie un întreg sau un șir)
AVERTISMENT: Aștept 3 sec...
AVERTISMENT: Se reîncercă cererea nereușită: \/?delimiter= (argumentul 2 al getaddrinfo() trebuie să fie un întreg sau un șir)
AVERTISMENT: Aștept 6 sec...
EROARE: Test eșuat: Cererea a eșuat pentru: \/?delimiter=Testarea încărcării
Creăm un fișier de 1GB
fallocate -l 1GB 1gbÎl încărcăm în Leofs
time s3cmd put 1gb s3:\/\/leofs\/\nreal 0m19.099s\nuser 0m7.855s\nsys 0m1.620sStatistică
leofs-adm du pentru 1 nod:
leofs-adm du S0@172.26.9.179
numărul activ de obiecte: 156
numărul total de obiecte: 156
dimensiunea activă a obiectelor: 602954495
dimensiunea totală a obiectelor: 602954495
raportul dimensiunii active: 100.0%
ultima compacție începută: ____-__-__ __:__:__
ultima compacție finalizată: ____-__-__ __:__:__Se vede că output-ul nu este foarte informativ.
Să vedem unde este situat acest fișier.
leofs-adm whereis leofs/1gb
leofs-adm whereis leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
del? | nod | adresă ring | dimensiune | checksum | are copii | total chunk-uri | clock | când
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
| S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | adevărat | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000
| S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | adevărat | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000Activăm NFS
Activăm NFS pe serverul Leo Gateway 172.26.9.184.
Pe server și client instalăm nfs-utils
sudo yum install nfs-utilsConform instrucțiunilor, vom modifica fișierul de configurare /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsPe serverul 172.26.9.184 vom porni rpcbind și leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartPe serverul unde este pornit leo_manager vom crea un bucket pentru NFS și vom genera o cheie pentru conectarea la NFS
leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adresă-nfs-clientConectare la NFS
sudo mkdir /mnt/leofs
## pentru Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>"
sudo mount -t nfs -o nolock ip-adresă-nfs-server-unde-aveți-gateway:~/bucket/access_key_id/cheia-obținută-din-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofsVizualizarea spațiului pe disc prin intermediul clientului NFS
Spațiul pe disc având în vedere că fiecare nod de stocare are un disc de 40GB (3 noduri funcționale, 1 nod atașat):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofsInstalarea LeoFS cu 6 noduri de stocare.
Inventar (fără 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_storageOutput leofs-adm status
Output leofs-adm status
[System Confiuration]
-----------------------------------+----------
Item | Value
-----------------------------------+----------
Basic/Consistency level
-----------------------------------+----------
system version | 1.4.3
cluster Id | leofs_1
DC Id | dc_1
Total replicas | 2
number of successes of R | 1
number of successes of W | 1
number of successes of D | 1
number of rack-awareness replicas | 0
ring size | 2^128
-----------------------------------+----------
Multi DC replication settings
-----------------------------------+----------
[mdcr] max number of joinable DCs | 2
[mdcr] total replicas per a DC | 1
[mdcr] number of successes of R | 1
[mdcr] number of successes of W | 1
[mdcr] number of successes of D | 1
-----------------------------------+----------
Manager RING hash
-----------------------------------+----------
current ring-hash | d8ff465e
previous ring-hash | d8ff465e
-----------------------------------+----------
[State of Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
type | node | state | rack id | current ring | prev ring | updated at
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.178 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.179 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.181 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:30 +0000
S | S0@172.26.9.182 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.183 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.185 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
G | G0@172.26.9.180 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
G | G0@172.26.9.184 | running | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Spațiul pe disc având în vedere că fiecare nod de stocare are un disc de 40 GB (6 noduri funcționale):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofsDacă sunt folosite 5 noduri de stocare
[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/leofsJurnale
Jurnalele se află în directoare /usr/local/leofs/current/*/log
Canal Telegram:
Sursa: habr.com
