Installatie van de gedistribueerde fouttolerante objectopslag LeoFS, compatibel met clients die S3 en NFS gebruiken

Volgens Opennet: LeoFS — gedistribueerde fouttolerante objectopslag LeoFS, compatibel met klanten die Amazon S3- en REST-API gebruiken en die ook ondersteunt als NFS-server. Er zijn optimalisaties voor zowel kleine als zeer grote objecten, er is een ingebouwd cachemechanisme, en replicatie van opslag tussen datacenters is mogelijk. Onder de doelstellingen van het project valt het bereiken van een betrouwbaarheid van 99.9999999% door middel van redundante replicatie van duplicaten en het uitsluiten van een enkelvoudig foutpunt. De code van het project is geschreven in Erlang.

LeoFS bestaat uit drie componenten:

  • LeoFS Storage — beheert de operaties van toevoegen, ophalen en verwijderen van objecten en metadata, verantwoordelijk voor het uitvoeren van replicatie, herstel en het vormen van een wachtrij voor klantverzoeken.
  • LeoFS Gateway — verwerkt HTTP-verzoeken en leidt antwoorden om naar klanten met behulp van REST-API of S3-API, zorgt voor caching van de meest gevraagde gegevens in het geheugen en op schijf.
  • LeoFS Manager — houdt toezicht op de werking van LeoFS Gateway- en LeoFS Storage-knooppunten, monitort de status van knooppunten en controleert de controlesommen. Zorgt voor gegevensintegriteit en hoge beschikbaarheid van de opslag.

In deze post zullen we LeoFS installeren met behulp van ansible-playbook, en S3 en NFS testen.

Als je probeert LeoFS te installeren met de officiƫle playbooks, dan kun je verschillende fouten tegenkomen: 1,2. In deze post schrijf ik wat nodig is om deze fouten te vermijden.

Waar je de ansible-playbook gaat uitvoeren, moet netcat worden geĆÆnstalleerd.

Voorbeeld inventory

Voorbeeld inventory (in de 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_storage

Servers voorbereiden

Schakel Selinux uit. Ik hoop dat de gemeenschap Selinux-beleidsregels voor LeoFS zal creƫren.

    - name: Installeer libselinux als vereiste voor de SELinux Ansible-module
      yum:
        name: "{{item}}"
        state: latest
      with_items:
        - libselinux-python
        - libsemanage-python

    - name: Zet SELinux uit bij de volgende herstart
      selinux:
        state: disabled

    - name: Zet SELinux in permissieve modus totdat de machine opnieuw wordt opgestart
      command: setenforce 0
      ignore_errors: true
      changed_when: false

Installatie netcat en redhat-lsb-core. netcat is nodig voor leofs-adm, redhat-lsb-core is nodig voor het bepalen van de OS-versie hier.

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

Maak de gebruiker leofs aan en voeg deze toe aan de groep wheel

    - name: Maak gebruiker leofs aan
      group:
        name: leofs
        state: present

    - name: Sta de groep 'wheel' toe om wachtwoordloos sudo te hebben
      lineinfile:
        dest: /etc/sudoers
        state: present
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: Voeg de gebruiker 'leofs' toe aan de groep 'wheel'
      user:
        name: leofs
        groups: wheel
        append: yes

Erlang-installatie

    - naam: Remote erlang-20.3.8.23-1.el7.x86_64.rpm installeren met 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

De volledige versie van de gecorrigeerde ansible playbook is hier te vinden: https://github.com/patsevanton/leofs_ansible

Installatie, configuratie, uitvoering

Voer verder uit zoals beschreven in https://github.com/leo-project/leofs_ansible zonder 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

Controleer de status van de cluster op de Primary LeoManager

leofs-adm status

Primary en Secondary zijn zichtbaar in de ansible-playbook logs

Installatie van de gedistribueerde fouttolerante objectopslag LeoFS, compatibel met clients die S3 en NFS gebruiken

Installatie van de gedistribueerde fouttolerante objectopslag LeoFS, compatibel met clients die S3 en NFS gebruiken

De uitvoer zal ongeveer zo zijn

 [Systeemconfiguratie]
-----------------------------------+----------
 Item                              | Waarde    
-----------------------------------+----------
 Basis/Consistentie niveau
-----------------------------------+----------
                    systeemversie | 1.4.3
                        cluster Id | leofs_1
                             DC Id | dc_1
                    Totaal aantal replica's | 2
          aantal successen van R | 1
          aantal successen van W | 1
          aantal successen van D | 1
 aantal rack-awareness replica's | 0
                         ringgrootte | 2^128
-----------------------------------+----------
 Multi DC replicatie-instellingen
-----------------------------------+----------
 [mdcr] max aantal joinbare DC's | 2
 [mdcr] totale replica's per DC    | 1
 [mdcr] aantal successen van R   | 1
 [mdcr] aantal successen van W   | 1
 [mdcr] aantal successen van D   | 1
-----------------------------------+----------
 Manager RING hash
-----------------------------------+----------
                 huidige ring-hash | a0314afb
                vorige ring-hash | a0314afb
-----------------------------------+----------

 [Status van Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 type  |         node         |    status     | rack-id |  huidige ring  |   vorige ring    |          bijgewerkt om         
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.179      | draaiende      |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.181      | draaiende      |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.182      | draaiende      |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.183      | verbonden     |         |                |                | 2019-12-05 10:33:58 +0000
  G    | G0@172.26.9.180      | draaiende      |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
  G    | G0@172.26.9.184      | draaiende      |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Een gebruiker aanmaken

Een gebruiker leofs aanmaken:

leofs-adm create-user leofs leofs

  access-key-id: 9c2615f32e81e6a1caf5
  secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb

Lijst van gebruikers:

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

Een Bucket aanmaken

Bucket aangemaakt

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OK

Lijst van buckets:

 leofs-adm get-buckets
cluster id   | bucket   | eigenaar  | permissies      | aangemaakt op                
-------------+----------+--------+------------------+---------------------------
leofs_1      | leofs    | leofs  | Me(full_control) | 2019-12-02 10:44:02 +0000

Configuratie s3cmd

In het veld Naam van de HTTP Proxy-server Geef het IP-adres van de Gateway-server op

s3cmd --configure 

Vul nieuwe waarden in of accepteer de standaardwaarden tussen haakjes met Enter.
Raadpleeg de gebruikershandleiding voor een gedetailleerde beschrijving van alle opties.

Toegangssleutel en geheime sleutel zijn uw identificatoren voor Amazon S3. Laat ze leeg om de omgevingsvariabelen te gebruiken.
Toegangssleutel [9c2615f32e81e6a1caf5]: 
Geheime sleutel [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: 
Standaardregio [VS]: 

Gebruik "s3.amazonaws.com" voor het S3-eindpunt en wijzig dit niet naar het doel Amazon S3.
S3-eindpunt [s3.amazonaws.com]: 

Gebruik "%(bucket)s.s3.amazonaws.com" voor het doel Amazon S3. De variabelen "%(bucket)s" en "%(location)s" kunnen worden gebruikt als het doelsystemen S3 DNS-gebaseerde buckets ondersteunt.
DNS-stijl bucket+hospiteinnaam:poort sjabloon voor toegang tot een bucket [%(bucket)s.s3.amazonaws.com]: leofs

Het encryptiewachtwoord wordt gebruikt om uw bestanden te beschermen tegen ongeoorloofde toegang tijdens de overdracht naar S3.
Encryptiewachtwoord: 
Pad naar het GPG-programma [\/usr\/bin\/gpg]: 

Bij gebruik van het veilige HTTPS-protocol is alle communicatie met Amazon S3-servers beschermd tegen afluisteren door derden. Deze methode is
langzamer dan gewone HTTP en kan alleen worden geproxied met Python 2.7 of nieuwer.
Gebruik HTTPS-protocol [Nee]: 

Op sommige netwerken moet al het internetverkeer via een HTTP-proxy verlopen.
Probeer dit hier in te stellen als u geen directe verbinding kunt maken met S3.
Naam van de HTTP Proxy-server [172.26.9.180]: 
HTTP Proxy-serverpoort [8080]: 

Nieuwe instellingen:
  Toegangssleutel: 9c2615f32e81e6a1caf5
  Geheime sleutel: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
  Standaardregio: VS
  S3-eindpunt: s3.amazonaws.com
  DNS-stijl bucket+hospiteinnaam:poort sjabloon voor toegang tot een bucket: leofs
  Encryptiewachtwoord: 
  Pad naar GPG-programma: \/usr\/bin\/gpg
  Gebruik HTTPS-protocol: Onwaar
  Naam van de HTTP Proxy-server: 172.26.9.180
  HTTP Proxy-serverpoort: 8080

Test toegang met de geleverde referenties? [Y\/n] Y
Even Geduld, we proberen alle buckets op te sommen...
Succes. Uw toegangssleutel en geheime sleutel werkten prima :-)

Nu verifiƫren of encryptie werkt...
Niet geconfigureerd. Maak u geen zorgen.

Instellingen opslaan? [y\/N] y
Configuratie opgeslagen in '\/home\/user\/.s3cfg'

Als u de foutmelding ERROR: S3-error: 403 (AccessDenied): Toegang geweigerd ontvangt,

s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py'  [1 van 1]
 382 van 382   100% in    0s     3.40 kB\/s  voltooid
ERROR: S3-error: 403 (AccessDenied): Toegang geweigerd

Dan moet je in het s3cmd-configuratiebestand signature_v2 op True zetten. Details hierover probleem.

Als signature_v2 False is, krijg je deze fout:

WAARSCHUWING: Poging tot opnieuw verzenden van de mislukte aanvraag: \/?delimiter= (getaddrinfo() argument 2 moet een integer of string zijn)\nWAARSCHUWING: Wachten 3 sec...\nWAARSCHUWING: Poging tot opnieuw verzenden van de mislukte aanvraag: \/?delimiter= (getaddrinfo() argument 2 moet een integer of string zijn)\nWAARSCHUWING: Wachten 6 sec...\nFOUT: Test mislukt: Aanvraag mislukt voor: \/?delimiter=

Upload-test

Maak een bestand van 1 GB aan

fallocate -l 1GB 1gb

We uploaden het naar Leofs

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

Statistieken

leofs-adm du voor 1 knooppunt:

leofs-adm du S0@172.26.9.179
 actieve aantal objecten: 156
  totaal aantal objecten: 156
   actieve grootte van objecten: 602954495
    totale grootte van objecten: 602954495
     verhouding van actieve grootte: 100.0%
    laatste compactie start: ____-__-__ __:__:__
      laatste compactie eind: ____-__-__ __:__:__

We zien dat de uitvoer niet erg informatief is.

Laten we kijken waar dit bestand zich bevindt.
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

NFS activeren

NFS activeren op de server Leo Gateway 172.26.9.184.

NFS-utils installeren op de server en client

sudo yum install nfs-utils

De configuratiebestand aanpassen volgens de instructies /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Start rpcbind en leofs-gateway op de server 172.26.9.184

sudo service rpcbind start
sudo service leofs-gateway restart

Maak een bucket voor NFS aan en genereer een sleutel voor verbinding met NFS op de server waar leo_manager draait.

leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adres-nfs-client

Verbinden met NFS

sudo mkdir /mnt/leofs
## voor Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>"
sudo mount -t nfs -o nolock ip-adres-nfs-server-waar-gateway-is-geĆÆnstalleerd:/bucket/access_key_id/sleutel-verkregen-van-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs

Weergave van schijfruimte via NFS-client

Schijfruimte met inachtneming dat elke storage node een schijf van 40GB heeft (3 nodes actief, 1 node aangesloten):

df -hP
Filesystem                                                         Size  Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b   60G  3.6G   57G   6% /mnt/leofs

Installatie van LeoFS met 6 storage nodes.

Inventaris (zonder 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_storage

leofs-adm status uitvoer

leofs-adm status uitvoer

 [System Confiuration]
-----------------------------------+----------
 Item                              | Waarde    
-----------------------------------+----------
 Basis/Consistentieniveau
-----------------------------------+----------
                    systeemversie | 1.4.3
                        cluster Id | leofs_1
                             DC Id | dc_1
                    Totaal aantal replicas | 2
          aantal succesvolle R | 1
          aantal succesvolle W | 1
          aantal succesvolle D | 1
 aantal rack-awareness replicas | 0
                         ringgrootte | 2^128
-----------------------------------+----------
 Multi DC replicatie-instellingen
-----------------------------------+----------
 [mdcr] max aantal joinbare DC's | 2
 [mdcr] totaal aantal replicas per DC | 1
 [mdcr] aantal succesvolle R | 1
 [mdcr] aantal succesvolle W | 1
 [mdcr] aantal succesvolle D | 1
-----------------------------------+----------
 Manager RING-hash
-----------------------------------+----------
                 huidige ring-hash | d8ff465e
                vorige ring-hash | d8ff465e
-----------------------------------+----------

 [Status van Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 type  |         node         |    status    | rack id |  huidige ring  |   vorige ring   |          bijgewerkt op         
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.178      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.179      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.181      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:30 +0000
  S    | S0@172.26.9.182      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.183      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.185      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  G    | G0@172.26.9.180      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:31 +0000
  G    | G0@172.26.9.184      | draaiend     |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Opslagcapaciteit, rekening houdend met het feit dat elke storage node een schijf van 40 GB heeft (6 draaiende nodes):

df -hP
Bestandssysteem                                                         Grootte  Gebruikt Beschikbaar Gebruik% Gemonteerd op
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b  120G  3.6G  117G   3% /mnt/leofs

Als er 5 storage nodes worden gebruikt

[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

Logs

Logs bevinden zich in de mappen /usr/local/leofs/current/*/log

Telegram-kanaal: SDS en Cluster FS

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster