LeoFS-i jaotatud ja tõrketaluvate objektide salvestamise seadistamine, mis on ühilduv S3, NFS kliendiga

Vastavalt Opennet: LeoFS — hajutatud tõrkeajaline objektide salvestus LeoFS, mis on ühilduv Amazon S3 API ja REST-API kasutavate klientidega ning toetab NFS-serveri režiimi. On optimeeritud nii väikeste kui ka väga suurte objektide salvestamiseks, sisaldab sisseehitatud puhversüsteemi ning võimaldab salvestuste replikatsiooni andmekeskuste vahel. Projekti eesmärgiks on saavutada 99.9999999% usaldusväärsus, kasutades üleliigset koopiate replikatsiooni ja vältides üksikute tõrke punktide olemasolu. Projekti kood on kirjutatud Erlangi keeles.

LeoFS koosneb kolmest komponendist:

  • LeoFS Storage — teenindab objektide ja metainformatsiooni lisamise, taastamise ja eemaldamise operatsioone, vastutab replikatsiooni, taastumise ja klientide päringute järjekorra täitmise eest.
  • LeoFS Gateway — teenindab HTTP-päringuid ja suunab vastused klientidele REST-API või S3-API kasutades, tagab kõige nõutumate andmete vahemälu võrkmälu ja ketta peal.
  • LeoFS Manager — jälgib LeoFS Gateway ja LeoFS Storage sõlmede tööd, jälgib sõlmede olekut ja kontrollib kontrollsummasid. Tagab andmete terviklikkuse ja kõrge salvestamise kättesaadavuse.

Selles postituses seadistame Leofs Ansible playbook'i abil ja testime S3, NFS.

Kui proovite installida LeoFS ametlike playbook'ide abil, siis peate kokku puutuma erinevate vigadega: 1,2. Selles postituses räägin, mida on vaja nende vigade vältimiseks teha.

Kohas, kus käitate Ansible playbook'i, tuleb installida netcat.

Inventari näide

Inventari näide (hoidlas 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

Serverite ettevalmistamine

Selinuxi keelamine. Loodan, et kogukond loob Selinuxi poliitikad LeoFS jaoks.

    - 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

Installeerimine netcat ja redhat-lsb-core. netcat on vajalik leofs-adm, redhat-lsb-core on vajalik OS-i versiooni määramiseks siit.

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

Kasutaja leofs loomine ja selle lisamine gruppi wheel

    - name: Looja kasutaja leofs
      group:
        name: leofs
        state: present

    - name: Luba 'wheel' grupil paroolita sudo
      lineinfile:
        dest: /etc/sudoers
        state: present
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: Lisa kasutaja 'leofs' gruppi 'wheel'
      user:
        name: leofs
        groups: wheel
        append: yes

Erlangi installimine

    - name: Kaug-erlange-20.3.8.23-1.el7.x86_64.rpm installimine yum-i kaudu
      yum: name=https://github.com/rabbitmq/erlang-rpm/releases/download/v20.3.8.23/erlang-20.3.8.23-1.el7.x86_64.rpm

Täieliku versiooni parandatud ansible playbookist leiate siit: https://github.com/patsevanton/leofs_ansible

Installimine, konfigureerimine, käivitamine

Jätkame, nagu on kirjutatud https://github.com/leo-project/leofs_ansible ilma 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

Kontrollime klastrite staatust Primary LeoManageris

leofs-adm status

Primary ja Secondary saab näha ansible-playbooki logides

LeoFS-i jaotatud ja tõrketaluvate objektide salvestamise seadistamine, mis on ühilduv S3, NFS kliendiga

LeoFS-i jaotatud ja tõrketaluvate objektide salvestamise seadistamine, mis on ühilduv S3, NFS kliendiga

Väljund on enam-vähem selline

 [Süsteemi seadistus]
-----------------------------------+----------
 Element                            | Väärtus  
-----------------------------------+----------
 Põhi/Ühtsuse tase
-----------------------------------+----------
                    süsteemi versioon | 1.4.3
                        klastrite ID | leofs_1
                             DC ID | dc_1
                    Kokku koopiad | 2
          R-i õnnestumiste arv | 1
          W-i õnnestumiste arv | 1
          D-i õnnestumiste arv | 1
 rack-teadlikkuse koopiate arv | 0
                         rõngas suurus | 2^128
-----------------------------------+----------
 Multi DC replikatsiooni seaded
-----------------------------------+----------
 [mdcr] maksimaalne liituvate DC-de arv | 2
 [mdcr] kokku koopiad ühe DC kohta    | 1
 [mdcr] R-i õnnestumiste arv   | 1
 [mdcr] W-i õnnestumiste arv   | 1
 [mdcr] D-i õnnestumiste arv   | 1
-----------------------------------+----------
 Halda RING hash
-----------------------------------+----------
                 praegune rõngashash | a0314afb
                eelmine rõngashash | a0314afb
-----------------------------------+----------

 [Sõlme(de) olek]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 tüüp |         sõlme        |    olek      | rack id |  praegune rõngas |   eelmine rõngas    |          uuendatud kell |         
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.179      | töötab       |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.181      | töötab       |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.182      | töötab       |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.183      | ühendatud    |         |                |                | 2019-12-05 10:33:58 +0000
  G    | G0@172.26.9.180      | töötab       |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
  G    | G0@172.26.9.184      | töötab       |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Loome kasutajat

Loome kasutajat leofs:

leofs-adm create-user leofs leofs

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

Kasutajate loend:

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

Loome Bucket

Bucket on tehtud

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OK

Bucketite loend:

 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

s3cmd konfigureerimine

Väljal HTTP Proxy serveri nimi märgi Gateway serveri IP

s3cmd --configure 

Sisesta uued väärtused või aktsepteeri vaikimisi sulgudes, vajutades Enter. 
Konsulteeri kasutusjuhendiga, et saada üksikasjalik kirjeldus kõigist valikutest. 

Access key ja Secret key on sinu tuvastajad Amazon S3 jaoks. Jäta need tühjaks, et kasutada keskkonnamuutujaid. 
Access Key [9c2615f32e81e6a1caf5]: 
Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: 
Default Region [US]: 

Kasutage S3 lõpp-punkti "s3.amazonaws.com" ja ärge muuda seda sihtaadressiks Amazon S3-le. 
S3 Endpoint [s3.amazonaws.com]: 

Kasutage sihtaadressiks "%(bucket)s.s3.amazonaws.com". Muutujaid "%(bucket)s" ja "%(location)s" saab kasutada, 
kui sihitud S3 süsteem toetab DNS-põhiseid bakete. 
DNS-stiilis baketi + hostinimi:port mall baketi juurde pääsemiseks [%(bucket)s.s3.amazonaws.com]: leofs

Krüptimise paroolit kasutatakse teie failide kaitsmiseks lugemise eest 
volitamata isikute poolt S3-le edastamise ajal. 
Krüptimise parool: 
GPG programmi tee [/usr/bin/gpg]: 

Kasutades turvalist HTTPS protokolli, on kogu suhtlus Amazon S3 serveritega 
kaitstud kolmandate osapoolte pealtkuulamise eest. See meetod on 
kiirem kui tavaline HTTP ja võib olla proksitud ainult Python 2.7 või uuema versiooniga. 
Kas kasutada HTTPS protokolli [Ei]: 

Mõnedes võrkudes peab kogu internetiühendus minema läbi HTTP proksi. 
Proovi seda siin seadistada, kui sa ei saa S3-le otse ühendust luua. 
HTTP Proxy serveri nimi [172.26.9.180]: 
HTTP Proxy serveri port [8080]: 

Uued seaded: 
  Access Key: 9c2615f32e81e6a1caf5
  Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
  Default Region: US
  S3 Endpoint: s3.amazonaws.com
  DNS-stiilis baketi + hostinimi:port mall baketi juurde pääsemiseks: leofs
  Krüptimise parool: 
  GPG programmi tee: /usr/bin/gpg
  Kas kasutada HTTPS protokolli: False
  HTTP Proxy serveri nimi: 172.26.9.180
  HTTP Proxy serveri port: 8080

Testi juurdepääsuga antud mandaadiga? [Y/n] Y
Palun oota, proovin loetleda kõiki baketeid...
Edu. Sinu juurdepääsuvõti ja salajane võti töötasid hästi :-)

Nüüd kontrollin, kas krüptimine töötab...
Ei ole seadistatud. Ärge muretsege.

Salvesta seaded? [y/N] y
Seaded on salvestatud faili '/home/user/.s3cfg'

Kui teil tekib viga ERROR: S3 error: 403 (AccessDenied): Access Denied:

s3cmd put test.py s3://leofs/
upload: 'test.py' -> 's3://leofs/test.py'  [1 of 1]
 382 of 382   100% in    0s     3.40 kB/s  teostatud
ERROR: S3 error: 403 (AccessDenied): Access Denied

Siis tuleb s3cmd konfigureerimisse lisada signature_v2 True. Üksikasjad on selles probleem.

Kui signature_v2 on False, siis tekib selline viga:

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=%2F

Laadimise testimine

Loo fail 1GB

fallocate -l 1GB 1gb

Laadime selle Leofs'i

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

Statistika

leofs-adm du ühe sõlme jaoks:

leofs-adm du S0@172.26.9.179
 aktiivsete objektide arv: 156
  objektide koguarv: 156
   aktiivsete objektide suurus: 602954495
    objektide kogus: 602954495
     aktiivse suuruse suhe: 100.0%
    viimane kompaktimise algus: ____-__-__ __:__:__
      viimane kompaktimise lõpp: ____-__-__ __:__:__

Näeme, et väljund ei ole eriti informatiivne.

Vaadake, kus see fail asub.
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

Aktiveerime NFS

Aktiveerime NFS serveris Leo Gateway 172.26.9.184.

Serveris ja kliendis paigaldame nfs-utils

sudo yum install nfs-utils

Juhendi kohaselt muudame konfiguratsioonifaili /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Serveris 172.26.9.184 käivitame rpcbind ja leofs-gateway

sudo service rpcbind start
sudo service leofs-gateway restart

Serveris, kus käitab leo_manager, loome bucket'i NFS jaoks ja genereerime võtme NFS-iga ühendamiseks

leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-aadress-nfs-kliendi

Ühendamine NFS-iga

sudo mkdir /mnt/leofs
## Linux jaoks - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock nfs-serveri-ip-aadress-kus-te-olete-gateway-sätte-teinud: /bucket/access_key_id/ ключ-полученный-от-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs

Vaata kettaruumi NFS kliendi kaudu

Kettaruumi arvestades, et igal storage nodil on 40GB ketas (3 nodi töötab, 1 nod attached):

df -hP
Failisüsteem                                                         Suurus  Kasutatud Vaba Kasutada% Mountitud
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b   60G  3.6G   57G   6% /mnt/leofs

LeoFS paigaldamine 6 storage nodiga.

Inventuur (ilma builderita):

# 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 oleku väljund

leofs-adm oleku väljund

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

Salvestusruum, arvestades, et iga salvestuse sõlme on 40 GB disk (6 sõlme töötab):

df -hP
Filesystem                                                         Size  Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b  120G  3.6G  117G   3% /mnt/leofs

Kui kasutatakse 5 salvestussõlme

[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

Logid

Logid asuvad kaustades /usr/local/leofs/current/*/log

Telegrammi kanal: SDS ja klusterfs

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster