Prema : — distribuirano otporno skladište objekata , kompatibilno s klijentima koji koriste Amazon S3 API i REST-API, a također podržava rad u režimu NFS poslužitelja. Postoje optimizacije za skladištenje i malih i vrlo velikih objekata, prisutan je ugrađeni mehanizam za predmemoriranje, a replikacija skladišta između podatkovnih centara je moguća. Među ciljevima projekta ističe se postizanje pouzdanosti od 99.9999999% kroz redundantno repliciranje kopija i isključivanje jedne točke kvara. Kod projekta je napisan na jeziku Erlang.
LeoFS se sastoji od tri komponente:
- — obrađuje operacije dodavanja, preuzimanja i brisanja objekata i metapodataka, odgovara za provođenje replikacije, oporavka i formiranje reda zahtjeva klijenata.
- — obrađuje HTTP zahtjeve i preusmjerava odgovore klijentima koristeći REST-API ili S3-API, osigurava predmemoriranje najtraženijih podataka u memoriji i na disku.
- — prati rad čvorova LeoFS Gateway i LeoFS Storage, vodi praćenje stanja čvorova i provjerava kontrolne zbrojeve. Jamči cjelovitost podataka i visoku dostupnost skladišta.
U ovoj objavi ćemo instalirati LeoFS pomoću ansible-playbook-a, testirati S3, NFS.
Ako pokušate instalirati LeoFS koristeći službene playbook-e, čekaju vas različite pogreške: ,. U ovoj objavi ću napisati što trebate učiniti da izbjegnete ove pogreške.
Tamo gdje ćete pokrenuti ansible-playbook, potrebno je instalirati netcat.
Primjer inventara
Primjer inventara (u repozitoriju 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_storagePriprema poslužitelja
Isključivanje Selinuxa. Nadam se da će zajednica stvoriti politike Selinux za LeoFS.
- name: Install libselinux as prerequisite for SELinux Ansible module
yum:
name: "{{item}}"
state: latest
with_items:
- libselinux-python
- libsemanage-python
- name: Disable SELinux at next reboot
selinux:
state: disabled
- name: Set SELinux in permissive mode until the machine is rebooted
command: setenforce 0
ignore_errors: true
changed_when: false
Instalacija netcat i redhat-lsb-core. netcat potreban za leofs-adm, redhat-lsb-core potreban za određivanje verzije OS-a .
- name: Install Packages
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreKreiranje korisnika leofs i dodavanje u grupu wheel
- ime: Stvoriti korisnika leofs
grupa:
ime: leofs
stanje: prisutno
- ime: Dopustiti grupi 'wheel' da ima sudo bez lozinke
lineinfile:
dest: /etc/sudoers
stanje: prisutno
regexp: '^%wheel'
linija: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- ime: Dodati korisnika 'leofs' u grupu 'wheel'
korisnik:
ime: leofs
grupe: wheel
dodati: daInstalacija Erlanga
- ime: Udaljena instalacija erlang-20.3.8.23-1.el7.x86_64.rpm putem 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
Potpunu verziju ispravljenih ansible playbooka možete pronaći ovdje:
Instalacija, konfiguracija, pokretanje
Zatim izvršavamo kao što je napisano u bez 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.ymlProvjeravamo status klastera na Primarnom LeoManageru
leofs-adm statusPrimarni i Sekundarni mogu se vidjeti u logovima ansible-playbooka


Izlaz će otprilike biti ovakav
[Sistem Konfiguracija]
-----------------------------------+----------
Stavka | Vrijednost
-----------------------------------+----------
Osnovni/Nivo konzistencije
-----------------------------------+----------
verzija sistema | 1.4.3
id klastera | leofs_1
id DC-a | dc_1
Ukupne replike | 2
broj uspjeha R | 1
broj uspjeha W | 1
broj uspjeha D | 1
broj replika svjesnih regija | 0
veličina prstena | 2^128
-----------------------------------+----------
Postavke višestruke DC replikacije
-----------------------------------+----------
[mdcr] max broj pridruživih DC-a | 2
[mdcr] ukupne replike po DC-u | 1
[mdcr] broj uspjeha R | 1
[mdcr] broj uspjeha W | 1
[mdcr] broj uspjeha D | 1
-----------------------------------+----------
Menadžer RING hash
-----------------------------------+----------
trenutni ring-hash | a0314afb
prethodni ring-hash | a0314afb
-----------------------------------+----------
[Stanje Čvora(c)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
tip | čvor | stanje | rack id | trenutni prsten | prethodni prsten | ažurirano u
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.179 | radi | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.181 | radi | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.182 | radi | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.183 | vezano | | | | 2019-12-05 10:33:58 +0000
G | G0@172.26.9.180 | radi | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
G | G0@172.26.9.184 | radi | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Stvaramo korisnika
Stvaramo korisnika leofs:
leofs-adm create-user leofs leofs
access-key-id: 9c2615f32e81e6a1caf5
secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebPopis korisnika:
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 +0000Kreiramo Bucket
Napravio sam bucket
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
U reduLista bucket-a:
leofs-adm get-buckets
cluster id | bucket | owner | permissions | created at
-------------+----------+--------+------------------+---------------------------
leofs_1 | leofs | leofs | Me(full_control) | 2019-12-02 10:44:02 +0000Konfiguracija s3cmd
U polje Naziv HTTP Proxy servera navedite IP adresu Gateway servera
s3cmd --configure
Unesite nove vrijednosti ili prihvatite zadane u zagradama pritiskom na Enter.
Pogledajte korisnički priručnik za detaljan opis svih opcija.
Access key i Secret key su vaši identifikatori za Amazon S3. Ostavite ih praznima za korištenje varijabli okruženja.
Access Key [9c2615f32e81e6a1caf5]:
Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]:
Default Region [US]:
Koristite "s3.amazonaws.com" za S3 Endpoint i ne mijenjajte to za ciljani Amazon S3.
S3 Endpoint [s3.amazonaws.com]:
Koristite "%(bucket)s.s3.amazonaws.com" za ciljani Amazon S3. Varijable "%(bucket)s" i "%(location)s" se mogu koristiti
ako ciljani S3 sistem podržava DNS bazirane bucket-e.
DNS-stil bucket+hostname:port predložak za pristupanje bucket-u [%(bucket)s.s3.amazonaws.com]: leofs
Šifra za enkripciju se koristi za zaštitu vaših datoteka od neovlaštenog čitanja
prilikom prijenosa na S3
Šifra za enkripciju:
Putanja do GPG programa [\/usr\/bin\/gpg]:
Kada koristite sigurni HTTPS protokol, sva komunikacija sa Amazon S3
serverima je zaštićena od prisluškivanja trećih strana. Ova metoda je
sporija od običnog HTTP-a i može se samo proksirati s Python 2.7 ili novijim
Koristite HTTPS protokol [Ne]:
Na nekim mrežama sav pristup internetu mora ići kroz HTTP proxy.
Pokušajte to postaviti ovdje ako se ne možete povezati na S3 izravno.
Naziv HTTP Proxy servera [172.26.9.180]:
Port HTTP Proxy servera [8080]:
Nova podešavanja:
Access Key: 9c2615f32e81e6a1caf5
Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
Default Region: US
S3 Endpoint: s3.amazonaws.com
DNS-stil bucket+hostname:port predložak za pristupanje bucket-u: leofs
Šifra za enkripciju:
Putanja do GPG programa: \/usr\/bin\/gpg
Koristite HTTPS protokol: False
Naziv HTTP Proxy servera: 172.26.9.180
Port HTTP Proxy servera: 8080
Testirati pristup sa dostavljenim vjerodajnicama? [Y\/n] Y
Molimo sačekajte, pokušavamo da listamo sve bucket-e...
Uspjeh. Vaš access key i secret key su radili u redu :-)
Sada provjeravamo da li enkripcija radi...
Nije konfigurirano. Nema veze.
Sačuvati postavke? [y\/N] y
Konfiguracija sačuvana u '\/home\/user\/.s3cfg'Ako dobijete grešku ERROR: S3 error: 403 (AccessDenied): Pristup odbijen:
s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py' [1 od 1]
382 od 382 100% u 0s 3.40 kB\/s gotovo
ERROR: S3 error: 403 (AccessDenied): Pristup odbijenTada je potrebno u konfiguraciji s3cmd исправить signature_v2 na True. Detalji u ovom .
Ako će signature_v2 biti False, dobićete ovakvu grešku:
UPUTE: Pokušaj ponovnog slanja neuspjele naredbe: \/?delimiter= (argument 2 funkcije getaddrinfo() mora biti cijeli broj ili niz)
UPUTE: Čekanje 3 sek...
UPUTE: Pokušaj ponovnog slanja neuspjele naredbe: \/?delimiter= (argument 2 funkcije getaddrinfo() mora biti cijeli broj ili niz)
UPUTE: Čekanje 6 sek...
GREŠKA: Test nije uspio: Naredba nije uspjela za: \/?delimiter=Testiranje prijenosa
Kreiramo datoteku od 1GB
fallocate -l 1GB 1gbPrijenos na Leofs
time s3cmd put 1gb s3:\/\/leofs\/\nreal 0m19.099s
user 0m7.855s
sys 0m1.620sStatistika
leofs-adm du za 1 nodu:
leofs-adm na S0@172.26.9.179
aktivni broj objekata: 156
ukupni broj objekata: 156
aktivna veličina objekata: 602954495
ukupna veličina objekata: 602954495
omjer aktivne veličine: 100,0%
posljednji početak kompresije: ____-__-__ __:__:__
posljednji završetak kompresije: ____-__-__ __:__:__Vidimo da ispis nije baš informativan.
Pogledajmo gdje se nalazi ova datoteka.
leofs-adm whereis leofs/1gb
leofs-adm whereis leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
del? | node | ring address | size | checksum | has children | total chunks | clock | when
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
| S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000
| S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000Aktiviramo NFS
Aktiviramo NFS na serveru Leo Gateway 172.26.9.184.
Na serveru i klijentu instaliramo nfs-utils
sudo yum install nfs-utilsPrema uputama ispravimo datoteku konfiguracije /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsNa serveru 172.26.9.184 pokrenut ćemo rpcbind i leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartNa serveru na kojem je pokrenut leo_manager stvorit ćemo bucket za NFS i generirati ključ za povezivanje s NFS-om
leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adresa-nfs-klijentaPovezivanje na NFS
sudo mkdir /mnt/leofs
## za Linux - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock ip-adresa-nfs-servera-tam-gdje-imate-instaliran-gateway:bucket/access_key_id/kluč-dobiven-od-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofsPregled disковnog prostora putem NFS klijenta
Diskovni prostor uzimajući u obzir da svaka nod storage ima disk od 40GB (3 nodi u radu, 1 nod pridružen):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofsInstalacija LeoFS s 6 storage nodovima.
Inventar (bez buildera):
# 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_storageIspis leofs-adm status
Ispis 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
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Prostor na disku uzimajući u obzir da svaka storage čvor ima disk od 40 GB (6 čvorova u radu):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofsAko se koristi 5 storage čvorova
[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/leofsZapisi
Zapisi se nalaze u direktorijima /usr/local/leofs/current/*/log
Telegram kanal:
Izvor: habr.com
