Instalimi i një ruajtjeje të shpërndarë të qëndrueshme të objekteve LeoFS, e cila është e pajtueshme me klientët që përdorin S3, NFS.

Sipas Opennet: LeoFS — sistem i shpĂ«rndarĂ« i ruhesh objektesh me qĂ«llim besueshmĂ«rie LeoFS, i pajtueshĂ«m me klientĂ«t qĂ« pĂ«rdorin API Amazon S3 dhe REST-API, si dhe mbĂ«shtet operimin si njĂ« server NFS. Ka optimizime pĂ«r ruajtjen e objekteve tĂ« vogla dhe tĂ« mĂ«dha, ka njĂ« mekanizĂ«m tĂ« integruar pĂ«r arhivimin, dhe mbĂ«shtet replikimin e ruajtjeve midis qendrave tĂ« tĂ« dhĂ«nave. NjĂ« nga objektivat e projektit Ă«shtĂ« tĂ« arrijĂ« njĂ« qĂ«ndrueshmĂ«ri prej 99.9999999% pĂ«rmes replikimit tĂ« tepĂ«rt tĂ« kopjeve dhe eliminimit tĂ« pikave tĂ« vetme tĂ« dĂ«shtimit. Kodi i projektit Ă«shtĂ« shkruar nĂ« gjuhĂ«n Erlang.

LeoFS përbëhet nga tre komponentë:

  • LeoFS Storage — shĂ«rben pĂ«r operacionet e shtimit, tĂ«rheqjes dhe fshirjes sĂ« objekteve dhe metadata, pĂ«rgjigjet pĂ«r realizimin e replikimit, rikuperimit dhe formimin e radhĂ«s sĂ« kĂ«rkesave nga klientĂ«t.
  • LeoFS Gateway — shĂ«rben pĂ«r kĂ«rkesat HTTP dhe ridrejton pĂ«rgjigjet tek klientĂ«t duke pĂ«rdorur REST-API ose S3-API, siguron caching tĂ« tĂ« dhĂ«nave mĂ« tĂ« kĂ«rkuara nĂ« memorie dhe nĂ« disk.
  • LeoFS Manager — monitoron funksionimin e nyjeve LeoFS Gateway dhe LeoFS Storage, mbikqyr gjendjen e nyjeve dhe kontrollon somat. Garanton integritetin e tĂ« dhĂ«nave dhe disponueshmĂ«rinĂ« e lartĂ« tĂ« ruajtjes.

Në këtë post do të instalojmë Leofs me ndihmën e ansible-playbook, dhe do ta testojmë S3, NFS.

Nëse përpiqeni të instaloni LeoFS duke përdorur playbook-ët zyrtarë, do të hasni në disa gabime: 1,2. Në këtë post do të shkruaj se çfarë duhet të bëni për t'i shmangur këto gabime.

Aty ku do të drejtoni ansible-playbook, duhet të instaloni netcat.

Shembuj inventory

Shembuj inventory (në depo 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

Përgatitja e serverëve

Çaktivizimi i Selinux. Shpresoj se komuniteti do tĂ« krijojĂ« politika Selinux pĂ«r LeoFS.

    - name: Instaloni libselinux si parakusht për modulën Ansible të SELinux
      yum:
        name: "{{item}}"
        state: latest
      with_items:
        - libselinux-python
        - libsemanage-python

    - name: Çaktivizoni SELinux nĂ« rinisjen e ardhshme
      selinux:
        state: disabled

    - name: Vendosni SELinux në modalitetin lejuese deri sa makina të rindezhet
      command: setenforce 0
      ignore_errors: true
      changed_when: false

Instalimi netcat dhe redhat-lsb-core. netcat nevojitet për leofs-adm, redhat-lsb-core nevojitet për të përcaktuar versionin e OS këtu.

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

Krijimi i përdoruesit leofs dhe shtimi i tij në grupin wheel

    - name: Krijoni përdoruesin leofs
      group:
        name: leofs
        state: present

    - name: Lejoni grupin 'wheel' të ketë sudo pa fjalëkalim
      lineinfile:
        dest: /etc/sudoers
        state: present
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: Shtoni përdoruesin 'leofs' në grupin 'wheel'
      user:
        name: leofs
        groups: wheel
        append: yes

Instalimi i Erlang

    - emri: Remote erlang-20.3.8.23-1.el7.x86_64.rpm instaloni me yum
      yum: emri=https://github.com/rabbitmq/erlang-rpm/releases/download/v20.3.8.23/erlang-20.3.8.23-1.el7.x86_64.rpm

Versionin e plotë të playbook-ëve të rregulluara me Ansible mund ta gjeni këtu: https://github.com/patsevanton/leofs_ansible

Instalimi, konfigurimi, nisja

Më pas, kryejmë siç është shkruar në https://github.com/leo-project/leofs_ansible pa 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

Kontrollojmë statusin e klasterit në Primary LeoManager

leofs-adm status

Primary dhe Secondary mund të shihen në log-et e ansible-playbook

Instalimi i një ruajtjeje të shpërndarë të qëndrueshme të objekteve LeoFS, e cila është e pajtueshme me klientët që përdorin S3, NFS.

Instalimi i një ruajtjeje të shpërndarë të qëndrueshme të objekteve LeoFS, e cila është e pajtueshme me klientët që përdorin S3, NFS.

Dalja do të jetë afërsisht e tillë

 [Konfigurimi i Sistemit]
-----------------------------------+----------
 Artikulli                          | Vlera    
-----------------------------------+----------
 Niveli i Bazës/Konsistencës
-----------------------------------+----------
                    versioni i sistemit | 1.4.3
                        Id e klasterit | leofs_1
                             Id e DC    | dc_1
                    Total replicas | 2
          numri i sukseseve të R | 1
          numri i sukseseve të W | 1
          numri i sukseseve të D | 1
 numri i replica me ndarje të raftit | 0
                         madhësia e unazës | 2^128
-----------------------------------+----------
 Cilësimet e replikimit Multi DC
-----------------------------------+----------
 [mdcr] numri maksimal i DC-ve që mund të bashkohen | 2
 [mdcr] total replicas për një DC         | 1
 [mdcr] numri i sukseseve të R        | 1
 [mdcr] numri i sukseseve të W        | 1
 [mdcr] numri i sukseseve të D        | 1
-----------------------------------+----------
 Manager RING hash
-----------------------------------+----------
                 aktual ring-hash | a0314afb
                ring-hash i mëparshëm | a0314afb
-----------------------------------+----------

 [Gjatësia e Node-ve]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 tipi |         node         |    gjendja    | raft id |  unaza aktuale  |   unaza e mëparshme |          përditësuar më         
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.179      | duke funksionuar |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.181      | duke funksionuar |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.182      | duke funksionuar |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.183      | e lidhur     |         |                |                | 2019-12-05 10:33:58 +0000
  G    | G0@172.26.9.180      | duke funksionuar |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
  G    | G0@172.26.9.184      | duke funksionuar |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Krijojmë përdorues

Krijojmë përdoruesin leofs:

leofs-adm create-user leofs leofs

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

Lista e përdoruesve:

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

Krijojmë Bucket

Krijova bucket

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OK

Lista e bucket-eve:

 leofs-adm get-buckets
cluster id   | bucket   | owner  | permissions      | created at                
-------------+----------+--------+------------------+---------------------------
leofs_1      | leofs    | leofs  | Unë(kontroll të plotë) | 2019-12-02 10:44:02 +0000

Konfigurimi i s3cmd

Në fushën Emri i serverit HTTP Proxy specifikoni IP-në e serverit Gateway

s3cmd --configure 

Shkruani vlera të reja ose pranojeni ato të paracaktuara në shkronjat e midis [] duke shtypur Enter.
Referojuni manualit të përdoruesit për përshkrimin e detajuar të të gjitha opsioneve.

ÇelĂ«si i aksesit dhe ÇelĂ«si sekret janĂ« identifikuesit tuaj pĂ«r Amazon S3. LĂ«reni bosh pĂ«r tĂ« pĂ«rdorur variablat e mjedisit.
ÇelĂ«si i Aksesit [9c2615f32e81e6a1caf5]: 
ÇelĂ«si sekret [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: 
Rajoni i Paracaktuar [SH.B.A]: 

Përdorni "s3.amazonaws.com" për Pikat e S3 dhe mos e modifikoni atë për Amazon S3 të synuar.
S3 Endpoint [s3.amazonaws.com]: 

Përdorni "%(bucket)s.s3.amazonaws.com" për Amazon S3 të synuar. Variablat "%(bucket)s" dhe "%(location)s" mund të përdoren
nëse sistemi i synuar S3 mbështet kovat bazuar në DNS.
Përshkrimi i kova+hostname:port për të hyrë në një kovanë [%(bucket)s.s3.amazonaws.com]: leofs

Fjalëkalimi i enkriptimit përdoret për të mbrojtur skedarët tuaj nga leximi
nga persona të paautorizuar gjatë transferit në S3.
Fjalëkalimi i enkriptimit: 
Rruga për programin GPG [\/usr\/bin\/gpg]: 

Kur përdoroni protokollin e sigurt HTTPS, të gjitha komunikimet me serverët Amazon S3
janë të mbrojtura nga përgjuese të palëve të treta. Ky metod është
më i ngadalshëm sesa HTTP-i i zakonshëm, dhe mund të prokurohet vetëm me Python 2.7 ose më të fundit.
Përdorni protokollin HTTPS [Jo]: 

Në disa rrjete, të gjitha akseset në internet duhet të kalojnë përmes një proxy HTTP.
Provoni ta jepni këtu nëse nuk mund të lidheni drejtpërdrejt me S3.
Emri i serverit HTTP Proxy [172.26.9.180]: 
Porti i serverit HTTP Proxy [8080]: 

Cilat janë cilësimet e reja:
  ÇelĂ«si i Aksesit: 9c2615f32e81e6a1caf5
  ÇelĂ«si sekret: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
  Rajoni i Paracaktuar: SH.B.A
  S3 Endpoint: s3.amazonaws.com
  Përshkrimi i kova+hostname:port për të hyrë në një kovanë: leofs
  Fjalëkalimi i enkriptimit: 
  Rruga për programin GPG: \/usr\/bin\/gpg
  Përdorni protokollin HTTPS: False
  Emri i serverit HTTP Proxy: 172.26.9.180
  Porti i serverit HTTP Proxy: 8080

TĂ« testoni aksesin me kredencialet e ofruara? [Y\/n] Y
Ju lutemi prisni, duke u përpjekur të listoni të gjitha kovat...
Sukses. ÇelĂ«si juaj i aksesit dhe çelĂ«si sekret funksionuan mirĂ« :-)

Tani duke verifikuar që enkriptimi funksionon...
Nuk është i konfiguruar. Mos u shqetësoni.

Ruani cilësimet? [y\/N] y
Cilësimi u ruajt në '\/home\/user\/.s3cfg'

Nëse keni një gabim ERROR: S3 error: 403 (AccessDenied): Access Denied:

s3cmd put test.py s3:\/\/leofs\/
upload: 'test.py' -> 's3:\/\/leofs\/test.py'  [1 nga 1]
 382 nga 382   100% në    0s     3.40 kB\/s  e kryer
ERROR: S3 error: 403 (AccessDenied): Access Denied

Atëherë duhet të përmirësoni signature_v2 në True në konfigurimin e s3cmd. Detajet në këtë issue.

Nëse signature_v2 është False, atëherë do të ketë këtë gabim:

KËSHILLIM: Po pĂ«rpiqem pĂ«rsĂ«ri tĂ« bĂ«j kĂ«rkesĂ«n qĂ« dĂ«shtoi: \/?delimiter= (argumenti 2 i getaddrinfo() duhet tĂ« jetĂ« numĂ«r ose varg)
KËSHILLIM: Po pres 3 sek...
KËSHILLIM: Po pĂ«rpiqem pĂ«rsĂ«ri tĂ« bĂ«j kĂ«rkesĂ«n qĂ« dĂ«shtoi: \/?delimiter= (argumenti 2 i getaddrinfo() duhet tĂ« jetĂ« numĂ«r ose varg)
KËSHILLIM: Po pres 6 sek...
GABIM: Testi dështoi: Kërkesa dështoi për: \/?delimiter=

Testimi i ngarkesës

Krijojmë një skedar 1GB

fallocate -l 1GB 1gb

Po e ngarkojmë në Leofs

kohë s3cmd put 1gb s3:\/\/leofs\/
reale    0m19.099s
përdorues    0m7.855s
sistem 0m1.620s

Statistika

leofs-adm du për 1 nyjë:

leofs-adm du S0@172.26.9.179
 numri aktiv i objekteve: 156
  numri total i objekteve: 156
   madhësia aktive e objekteve: 602954495
    madhësia totale e objekteve: 602954495
     raporti i madhësisë aktive: 100.0%
    fillimi i kompresionit të fundit: ____-__-__ __:__:__
      përfundimi i kompresionit të fundit: ____-__-__ __:__:__

Shikojmë që rezultati nuk është shumë informativ.

Le të shohim ku ndodhet ky skedar.
leofs-adm whereis leofs\/1gb

leofs-adm ku është leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
 del?  |         node         |             ring address             |    size    |   checksum   |  has children  |  total chunks  |     clock      |             when            
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
       | S0@172.26.9.181      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | e vërtetë      |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000
       | S0@172.26.9.182      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | e vërtetë      |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000

Aktivizojmë NFS

Aktivizojmë NFS në serverin Leo Gateway 172.26.9.184.

Në server dhe klient do të instalojmë nfs-utils

sudo yum install nfs-utils

Sipas udhëzimit do ta korrigjojmë skedarin e konfigurimit /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Në serverin 172.26.9.184 do të ngremë rpcbind dhe leofs-gateway

sudo service rpcbind start
sudo service leofs-gateway restart

Në serverin ku është aktivizuar leo_manager, do të krijojmë një bucket për NFS dhe do të gjenerojmë një çelës për lidhjen me NFS

leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adr-res-nfs-klientit

Lidhja me NFS

sudo mkdir /mnt/leofs
## për Linux - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock ip-adr-nfs-serverit-ku-keni-instaluar-gateway:bucket/access_key_id/çelësi-i-marrë-nga-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs

Shikimi i hapësirës së diskut përmes klientit NFS

Hapësira e diskut duke marrë parasysh që çdo nod storage ka një disk 40GB (3 nodet në funksion, 1 nod i lidhur):

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

Instalimi i LeoFS me 6 nodet storage.

Inventory (pa 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

Shfaqja e statusit leofs-adm

Shfaqja e statusit leofs-adm

 [Konfigurimi i sistemit]
-----------------------------------+----------
 Artikulli                           | Vlera    
-----------------------------------+----------
 Niveli/Koherenca bazike
-----------------------------------+----------
                versione sistemi    | 1.4.3
                  identifikuesi i klasterit | leofs_1
                       identifikuesi i DC   | dc_1
                Numri total i replika  | 2
        numri i sukseseshve të R   | 1
        numri i sukseseshve të W   | 1
        numri i sukseseshve të D   | 1
 numri i replika me vetëdijesim të raftit | 0
                        madhësia e unazës   | 2^128
-----------------------------------+----------
 Cilësimet e replikimit Multi DC
-----------------------------------+----------
 [mdcr] numri maksimal i DC-ve të bashkëngjitshme | 2
 [mdcr] replika totale për një DC     | 1
 [mdcr] numri i sukseseshve të R    | 1
 [mdcr] numri i sukseseshve të W    | 1
 [mdcr] numri i sukseseshve të D    | 1
-----------------------------------+----------
 Menaxheri i hash-it tĂ« UNAZËS
-----------------------------------+----------
                hash aktual i unazës  | d8ff465e
                hash i mëparshëm i unazës | d8ff465e
-----------------------------------+----------

 [Gjendja e Ndeshvillave]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 lloji |         ndeshje      |    gjendja   | id i raftit |  unaza aktuale  |   unaza e mëparshme|          përditësuar në        
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.178      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.179      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.181      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:30 +0000
  S    | S0@172.26.9.182      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.183      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  S    | S0@172.26.9.185      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:29 +0000
  G    | G0@172.26.9.180      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:31 +0000
  G    | G0@172.26.9.184      | duke funksionuar |         | d8ff465e       | d8ff465e       | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Hapësira e diskut, me shikim se secila nodë storage ka një disk 40GB (6 nodo duke funksionuar):

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

Nëse përdoren 5 nodë 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.183

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

Dëgjimet

Dëgjimet ndodhin në direktoriume /usr/local/leofs/current/*/log

Kanalin e Telegramit: SDS dhe FS të Klasterit

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster