Instalacija distribuiranog sustava za pohranu objekata LeoFS, kompatibilnog s klijentima koji koriste S3, NFS

Prema Opennet: LeoFS — distribuirano otporno skladište objekata LeoFS, 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:

  • LeoFS Storage — obrađuje operacije dodavanja, preuzimanja i brisanja objekata i metapodataka, odgovara za provođenje replikacije, oporavka i formiranje reda zahtjeva klijenata.
  • LeoFS Gateway — 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.
  • LeoFS Manager — 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: 1,2. 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_storage

Priprema 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 ovdje.

    - name: Install Packages
      yum: name={{ item }} state=present
      with_items:
        - nmap-ncat
        - redhat-lsb-core

Kreiranje 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: da

Instalacija 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: https://github.com/patsevanton/leofs_ansible

Instalacija, konfiguracija, pokretanje

Zatim izvršavamo kao što je napisano u https://github.com/leo-project/leofs_ansible 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.yml

Provjeravamo status klastera na Primarnom LeoManageru

leofs-adm status

Primarni i Sekundarni mogu se vidjeti u logovima ansible-playbooka

Instalacija distribuiranog sustava za pohranu objekata LeoFS, kompatibilnog s klijentima koji koriste S3, NFS

Instalacija distribuiranog sustava za pohranu objekata LeoFS, kompatibilnog s klijentima koji koriste S3, NFS

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: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb

Popis 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 +0000

Kreiramo Bucket

Napravio sam bucket

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
U redu

Lista 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 +0000

Konfiguracija 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 odbijen

Tada je potrebno u konfiguraciji s3cmd исправить signature_v2 na True. Detalji u ovom problem.

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 1gb

Prijenos na Leofs

time s3cmd put 1gb s3:\/\/leofs\/\nreal    0m19.099s
user    0m7.855s
sys 0m1.620s

Statistika

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 +0000

Aktiviramo NFS

Aktiviramo NFS na serveru Leo Gateway 172.26.9.184.

Na serveru i klijentu instaliramo nfs-utils

sudo yum install nfs-utils

Prema uputama ispravimo datoteku konfiguracije /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Na serveru 172.26.9.184 pokrenut ćemo rpcbind i leofs-gateway

sudo service rpcbind start
sudo service leofs-gateway restart

Na 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-klijenta

Povezivanje 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/leofs

Pregled 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/leofs

Instalacija 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_storage

Ispis 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/leofs

Ako 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.183

df -hP
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b  100G  3.0G   97G   3% /mnt/leofs

Zapisi

Zapisi se nalaze u direktorijima /usr/local/leofs/current/*/log

Telegram kanal: SDS i Klasterni FS

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster