Secondo : — sistema di archiviazione oggetti distribuito e altamente disponibile , compatibile con i client che utilizzano API di Amazon S3 e REST-API, e supporta anche il funzionamento in modalità server NFS. Sono presenti ottimizzazioni per l'archiviazione sia di piccoli che di grandi oggetti, con un meccanismo di caching integrato e la possibilità di replicare gli archivi tra i data center. Tra gli obiettivi del progetto si segnala il raggiungimento di un'affidabilità del 99.9999999% attraverso la replicazione ridondante delle copie e l'eliminazione dei punti unici di guasto. Il codice del progetto è scritto in linguaggio Erlang.
LeoFS è composto da tre componenti:
- — gestisce le operazioni di aggiunta, estrazione e rimozione di oggetti e metadati, ed è responsabile dell'esecuzione della replicazione, del ripristino e della gestione della coda delle richieste dei clienti.
- — gestisce le richieste HTTP e reindirizza le risposte ai clienti utilizzando REST-API o S3-API, garantendo la memorizzazione nella cache dei dati più richiesti sia in memoria che su disco.
- — monitora il funzionamento dei nodi LeoFS Gateway e LeoFS Storage, effettua il monitoraggio dello stato dei nodi e verifica le somme di controllo. Garantisce l'integrità dei dati e l'elevata disponibilità dello storage.
In questo post installeremo LeoFS usando ansible-playbook, testeremo S3 e NFS.
Se provi a installare LeoFS utilizzando i playbook ufficiali, ti aspettano vari errori: ,. In questo post scriverò cosa fare per evitare questi errori.
Dove eseguirai l'ansible-playbook, è necessario installare netcat.
Esempio di inventory
Esempio di inventory (nel 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_storagePreparazione dei server
Disabilitazione di Selinux. Spero che la comunità crei delle politiche Selinux per LeoFS.
- name: Installa libselinux come prerequisito per il modulo Ansible di SELinux
yum:
name: "{{item}}"
state: latest
with_items:
- libselinux-python
- libsemanage-python
- name: Disabilita SELinux al prossimo riavvio
selinux:
state: disabled
- name: Imposta SELinux in modalità permissiva fino al riavvio della macchina
command: setenforce 0
ignore_errors: true
changed_when: false
Installazione netcat e redhat-lsb-core. netcat necessario per leofs-adm, redhat-lsb-core necessario per determinare la versione del sistema operativo .
- name: Installa pacchetti
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreCreazione dell'utente leofs e aggiunta al gruppo wheel
- name: Crea utente leofs
group:
name: leofs
state: present
- name: Consenti al gruppo 'wheel' di avere sudo senza password
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Aggiungi l'utente 'leofs' al gruppo 'wheel'
user:
name: leofs
groups: wheel
append: yesInstallazione di Erlang
- name: Installa erlang-20.3.8.23-1.el7.x86_64.rpm da remoto con 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
La versione completa corretta dell'ansible playbook può essere trovata qui:
Installazione, configurazione, avvio
Procediamo come indicato in senza 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.ymlVerifichiamo lo stato del cluster su Primary LeoManager
leofs-adm statusPrimary e Secondary possono essere visti nei log di ansible-playbook


L'output sarà all'incirca così
[Configurazione di sistema]
-----------------------------------+----------
Item | Valore
-----------------------------------+----------
Livello di base/coerenza
-----------------------------------+----------
versione sistema | 1.4.3
Id cluster | leofs_1
Id DC | dc_1
Replica totali | 2
numero di successi di R | 1
numero di successi di W | 1
numero di successi di D | 1
numero di repliche a consapevolezza rack | 0
dimensione anello | 2^128
-----------------------------------+----------
Impostazioni di replicazione Multi DC
-----------------------------------+----------
[mdcr] numero massimo di DC unibili | 2
[mdcr] repliche totali per DC | 1
[mdcr] numero di successi di R | 1
[mdcr] numero di successi di W | 1
[mdcr] numero di successi di D | 1
-----------------------------------+----------
Hash del gestore RING
-----------------------------------+----------
hash anello corrente | a0314afb
hash anello precedente | a0314afb
-----------------------------------+----------
[Stato di Nodo(i)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
tipo | nodo | stato | rack id | anello corrente | anello prev | aggiornato il
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.179 | in esecuzione | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.181 | in esecuzione | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.182 | in esecuzione | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.183 | allegato | | | | 2019-12-05 10:33:58 +0000
G | G0@172.26.9.180 | in esecuzione | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
G | G0@172.26.9.184 | in esecuzione | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Creiamo un utente
Creiamo un utente leofs:
leofs-adm create-user leofs leofs
access-key-id: 9c2615f32e81e6a1caf5
secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebElenco degli utenti:
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 +0000Creiamo un Bucket
Bucket creato
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKElenco dei bucket:
leofs-adm get-buckets
cluster id | bucket | owner | permissions | created at
-------------+----------+--------+------------------+---------------------------
leofs_1 | leofs | leofs | Me(full_control) | 2019-12-02 10:44:02 +0000Configurazione s3cmd
Nel campo Nome del server proxy HTTP indichiamo l'IP del server Gateway
s3cmd --configure
Inserisci nuovi valori o accetta i valori predefiniti tra parentesi premendo Invio.
Consulta il manuale utente per una descrizione dettagliata di tutte le opzioni.
La chiave d'accesso e la chiave segreta sono i tuoi identificatori per Amazon S3. Lasciale vuote per utilizzare le variabili ambientali.
Chiave d'accesso [9c2615f32e81e6a1caf5]:
Chiave segreta [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]:
Regione predefinita [US]:
Utilizza "s3.amazonaws.com" come S3 Endpoint e non modificarlo per il target Amazon S3.
S3 Endpoint [s3.amazonaws.com]:
Utilizza "%(bucket)s.s3.amazonaws.com" per il target Amazon S3. Le variabili "%(bucket)s" e "%(location)s" possono essere utilizzate
se il sistema S3 di destinazione supporta i bucket basati su DNS.
Template per accedere a un bucket in stile DNS: [%(bucket)s.s3.amazonaws.com]: leofs
La password di crittografia è utilizzata per proteggere i tuoi file dalla lettura
da parte di persone non autorizzate durante il trasferimento a S3.
Password di crittografia:
Percorso del programma GPG [/usr/bin/gpg]:
Quando si utilizza il protocollo HTTPS sicuro, tutta la comunicazione con i server Amazon S3
è protetta da intercettazioni di terzi. Questo metodo è
più lento rispetto all'HTTP semplice e può essere inoltrato solo con Python 2.7 o versioni più recenti.
Utilizzare il protocollo HTTPS [No]:
Su alcune reti, tutto l'accesso a Internet deve passare attraverso un proxy HTTP.
Prova a impostarlo qui se non riesci a connetterti direttamente a S3.
Nome del server proxy HTTP [172.26.9.180]:
Porta del server proxy HTTP [8080]:
Nuove impostazioni:
Chiave d'accesso: 9c2615f32e81e6a1caf5
Chiave segreta: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
Regione predefinita: US
S3 Endpoint: s3.amazonaws.com
Template per accedere a un bucket in stile DNS: leofs
Password di crittografia:
Percorso del programma GPG: /usr/bin/gpg
Utilizzare il protocollo HTTPS: False
Nome del server proxy HTTP: 172.26.9.180
Porta del server proxy HTTP: 8080
Testare l'accesso con le credenziali fornite? [Y/n] Y
Attendere, tentativo di elencare tutti i bucket...
Successo. La tua chiave d'accesso e la chiave segreta hanno funzionato correttamente :-)
Ora si verifica che la crittografia funzioni...
Non configurato. Non fa niente.
Salvare le impostazioni? [y/N] y
Configurazione salvata in '/home/user/.s3cfg'Se ricevi un errore ERROR: S3 error: 403 (AccessDenied): Accesso negato:
s3cmd put test.py s3://leofs/
upload: 'test.py' -> 's3://leofs/test.py' [1 di 1]
382 di 382 100% in 0s 3.40 kB/s completato
ERROR: S3 error: 403 (AccessDenied): Accesso negatoDovrai modificare signature_v2 su True nel file di configurazione s3cmd. Ulteriori dettagli in questo .
Se signature_v2 è False, si verificherà questo errore:
WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string)
WARNING: Waiting 3 sec...
WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string)
WARNING: Waiting 6 sec...
ERROR: Test failed: Request failed for: /?delimiter=%2FTest di caricamento
Creiamo un file di 1GB
fallocate -l 1GB 1gbCarichiamo su Leofs
time s3cmd put 1gb s3://leofs/
real 0m19.099s
user 0m7.855s
sys 0m1.620sStatistiche
leofs-adm du per 1 nodo:
leofs-adm du S0@172.26.9.179
numero attivo di oggetti: 156
numero totale di oggetti: 156
dimensione attiva degli oggetti: 602954495
dimensione totale degli oggetti: 602954495
rapporto dimensione attiva: 100.0%
ultimo inizio compattazione: ____-__-__ __:__:__
ultimo fine compattazione: ____-__-__ __:__:__Possiamo vedere che l'output non è molto informativo.
Vediamo dove si trova questo file.
leofs-adm whereis leofs/1gb
leofs-adm dove è leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
del? | nodo | indirizzo del ring | dimensione | checksum | ha figli | totale chunk | orologio | quando
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
| S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | vero | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000
| S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | vero | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000Attiviamo NFS
Attiviamo NFS sul server Leo Gateway 172.26.9.184.
Installeremo nfs-utils sul server e sul client
sudo yum install nfs-utilsModificheremo il file di configurazione secondo le istruzioni /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsSul server 172.26.9.184 avvieremo rpcbind e leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartSul server dove è in esecuzione leo_manager creeremo un bucket per NFS e genereremo una chiave per la connessione a NFS
leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 indirizzo-ip-client-nfsConnessione a NFS
sudo mkdir /mnt/leofs
## per Linux - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock indirizzo-ip-nfs-del-server-dove-avete-installato-gateway:/bucket/access_key_id/chiave-ottenuta-da-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofsVisualizzazione dello spazio su disco tramite client NFS
Spazio su disco considerando che ogni nodo di storage ha un disco da 40 GB (3 nodi in esecuzione, 1 nodo collegato):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofsInstallazione di LeoFS con 6 nodi di storage.
Inventario (senza 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
-----------------------------------+----------
Livello base/coerenza
-----------------------------------+----------
versione sistema | 1.4.3
Id cluster | leofs_1
Id DC | dc_1
Repliche totali | 2
numero di successi di R | 1
numero di successi di W | 1
numero di successi di D | 1
numero di repliche consapevoli del rack | 0
dimensione anello | 2^128
-----------------------------------+----------
Impostazioni di replicazione Multi DC
-----------------------------------+----------
[mdcr] numero massimo di DC unibili | 2
[mdcr] repliche totali per DC | 1
[mdcr] numero di successi di R | 1
[mdcr] numero di successi di W | 1
[mdcr] numero di successi di D | 1
-----------------------------------+----------
Hash RING gestore
-----------------------------------+----------
hash anello attuale | d8ff465e
hash anello precedente | d8ff465e
-----------------------------------+----------
[Stato del Nodo(i)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
tipo | nodo | stato | id rack | anello attuale | anello prev | aggiornato il
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.178 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.179 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.181 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:30 +0000
S | S0@172.26.9.182 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.183 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.185 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
G | G0@172.26.9.180 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
G | G0@172.26.9.184 | in esecuzione | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Spazio disco tenendo conto che ogni nodo storage ha un disco da 40GB (6 nodi in esecuzione):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofsSe vengono utilizzati 5 nodi storage
[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/leofsLog
I log si trovano nelle directory /usr/local/leofs/current/*/log
Canale Telegram:
Fonte: habr.com
