Instalace distribuovaného odolného objektového úložiště LeoFS, kompatibilního se S3 a NFS klienty

Podle Opennet: LeoFS — distribuované, vysoce dostupné úložiště objektů LeoFS, kompatibilní se zákaznickými aplikacemi využívajícími API Amazon S3 a REST-API, a také podporující režim NFS serveru. Obsahuje optimalizace pro uložení jak malých, tak velmi velkých objektů, má vestavěný mechanismus kešování a umožňuje replikaci úložišť mezi datovými centry. Mezi cíle projektu patří dosažení spolehlivosti 99.9999999 % prostřednictvím redundatního replikování duplikátů a vyloučení jediného bodu selhání. Kód projektu je napsán v jazyce Erlang.

LeoFS se skládá ze tří komponentů:

  • LeoFS Storage — zajišťuje operace přidávání, vyhledávání a odstraňování objektů a metadat, odpovídá za provádění replikace, obnovy a zpracování fronty požadavků klientů.
  • LeoFS Gateway — zpracovává HTTP požadavky a předává odpovědi klientům pomocí REST-API nebo S3-API, zajišťuje kešování nejčastěji požadovaných dat v paměti a na disku.
  • LeoFS Manager — sleduje činnost uzlů LeoFS Gateway a LeoFS Storage, provádí monitoring stavu uzlů a kontroluje kontrolní součty. Zaručuje integritu dat a vysokou dostupnost úložiště.

V tomto příspěvku nainstalujeme LeoFS pomocí ansible-playbooku, otestujeme S3, NFS.

Pokud se pokusíte nainstalovat LeoFS pomocí oficiálních playbooků, čekají vás různé chyby: 1,2. V tomto příspěvku napíšu, co je třeba udělat, abyste těmto chybám předešli.

Na místě, kde budete spouštět ansible-playbook, je třeba nainstalovat netcat.

Příklad inventáře

Příklad inventáře (v repozitáři 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říprava serverů

Deaktivace Selinuxu. Doufám, že komunita vytvoří politiky Selinux pro 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

Instalace netcat a redhat-lsb-core. netcat nutné pro leofs-adm, redhat-lsb-core nutné pro určení verze OS zde.

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

Vytvoření uživatele leofs a jeho přidání do skupiny wheel

    - name: Create user leofs
      group:
        name: leofs
        state: present

    - name: Allow 'wheel' group to have passwordless sudo
      lineinfile:
        dest: /etc/sudoers
        state: present
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: Add the user 'leofs' to group 'wheel'
      user:
        name: leofs
        groups: wheel
        append: yes

Instalace Erlang

    - name: Instalace remote erlang-20.3.8.23-1.el7.x86_64.rpm pomocí 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

Plnou verzi opraveného ansible playbooku naleznete zde: https://github.com/patsevanton/leofs_ansible

Instalace, konfigurace, spuštění

Dále provádíme podle uvedeného v 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

Kontrolujeme stav klastru na Primárním LeoManageru

leofs-adm status

Primární a sekundární lze vidět v logách ansible-playbooku

Instalace distribuovaného odolného objektového úložiště LeoFS, kompatibilního se S3 a NFS klienty

Instalace distribuovaného odolného objektového úložiště LeoFS, kompatibilního se S3 a NFS klienty

Výstup bude přibližně takový

 [Systémová konfigurace]
-----------------------------------+----------
 Položka                           | Hodnota   
-----------------------------------+----------
 Základní / Úroveň konzistence
-----------------------------------+----------
                   Verze systému | 1.4.3
                       ID klastru | leofs_1
                            ID DC | dc_1
                   Celkem replik | 2
          Počet úspěchů R | 1
          Počet úspěchů W | 1
          Počet úspěchů D | 1
 Počet replik s ohledem na rack | 0
                          Velikost kruhu | 2^128
-----------------------------------+----------
 Nastavení replikace Multi DC
-----------------------------------+----------
 [mdcr] maximální počet připojitelných DC | 2
 [mdcr] celkové repliky na DC    | 1
 [mdcr] počet úspěchů R   | 1
 [mdcr] počet úspěchů W   | 1
 [mdcr] počet úspěchů D   | 1
-----------------------------------+----------
 Manager RING hash
-----------------------------------+----------
                 aktuální ring-hash | a0314afb
                předchozí ring-hash | a0314afb
-----------------------------------+----------

 [Stav uzlu(y)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 typ  |         uzel         |    stav      | rack id |  aktuální ring  |   předchozí ring |          aktualizováno        
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.179      | běží        |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.181      | běží        |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.182      | běží        |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.183      | připojený   |         |                |                | 2019-12-05 10:33:58 +0000
  G    | G0@172.26.9.180      | běží        |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
  G    | G0@172.26.9.184      | běží        |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Vytváříme uživatele

Vytváříme uživatele leofs:

leofs-adm create-user leofs leofs

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

Seznam uživatelů:

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

Vytváříme bucket

Bucket vytvořen

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OK

Seznam bucketů:

 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

Konfigurace s3cmd

V poli Název serveru HTTP Proxy zadejte IP adresu serveru Gateway

s3cmd --configure 

Zadejte nové hodnoty nebo přijměte výchozí hodnoty v závorkách stisknutím Enter.
Odkazujte se na uživatelskou příručku pro podrobný popis všech možností.

Access key a Secret key jsou vaše identifikátory pro Amazon S3. Nechte je prázdné pro použití proměnných prostředí.
Access Key [9c2615f32e81e6a1caf5]: 
Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: 
Výchozí region [US]: 

Použijte "s3.amazonaws.com" pro S3 Endpoint a neměňte ho na cílový Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 

Použijte "%(bucket)s.s3.amazonaws.com" pro cílový Amazon S3. Můžete použít proměnné "%(bucket)s" a "%(location)s"
pokud cílový S3 systém podporuje DNS založené bucket.
Šablona pro přístup k bucket s názvem: [%(bucket)s.s3.amazonaws.com]: leofs

Heslo pro šifrování se používá k ochraně vašich souborů před čtením
neoprávněnými osobami během přenosu na S3.
Heslo pro šifrování: 
Cesta k programu GPG [\/usr\/bin\/gpg]: 

Při použití zabezpečeného HTTPS protokolu je veškerá komunikace se servery Amazon S3
chráněná před odposlechem třetími stranami. Tato metoda je
pomalější než čistý HTTP a může být proxy pouze s Pythonem 2.7 nebo novějším.
Použít HTTPS protokol [Ne]: 

Na některých sítích musí veškerý přístup na internet procházet HTTP proxy.
Zkuste to nastavit zde, pokud se nemůžete připojit přímo k S3.
Název serveru HTTP Proxy [172.26.9.180]: 
Port serveru HTTP Proxy [8080]: 

Nová nastavení:
  Access Key: 9c2615f32e81e6a1caf5
  Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
  Výchozí region: US
  S3 Endpoint: s3.amazonaws.com
  Šablona pro přístup k bucket: leofs
  Heslo pro šifrování: 
  Cesta k programu GPG: \/usr\/bin\/gpg
  Použít HTTPS protokol: False
  Název serveru HTTP Proxy: 172.26.9.180
  Port serveru HTTP Proxy: 8080

Otestovat přístup se zadanými pověřovacími údaji? [Y\/n] Y
Prosím čekejte, pokoušíme se vypsat všechny buckety...
Úspěch. Vaše access key a secret key fungovaly dobře :-)

Nyní ověřujeme, že šifrování funguje...
Není nakonfigurováno. Nevadí.

Uložit nastavení? [y\/N] y
Konfigurace uložena do '\/home\/user\/.s3cfg'

Pokud se objeví chyba ERROR: S3 error: 403 (AccessDenied): Přístup odmítnut:

s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py'  [1 z 1]
 382 z 382   100% za    0s     3.40 kB\/s  hotovo
ERROR: S3 error: 403 (AccessDenied): Přístup odmítnut

Pak je třeba v konfiguračním souboru s3cmd opravit signature_v2 na True. Podrobnosti naleznete v této issue.

Pokud bude signature_v2 False, objeví se tato chyba:

UPOZORNĚNÍ: Opakování selhání požadavku: \/?delimiter= (argument 2 funkce getaddrinfo() musí být celé číslo nebo řetězec)
UPOZORNĚNÍ: Čekání 3 sekundy...
UPOZORNĚNÍ: Opakování selhání požadavku: \/?delimiter= (argument 2 funkce getaddrinfo() musí být celé číslo nebo řetězec)
UPOZORNĚNÍ: Čekání 6 sekund...
CHYBA: Test selhal: Požadavek selhal pro: \/?delimiter=

Testování nahrávání

Vytváříme soubor 1 GB

fallocate -l 1GB 1gb

Nahráváme ho do Leofs

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

Statistika

leofs-adm du pro 1 uzel:

leofs-adm du S0@172.26.9.179
 aktivní počet objektů: 156
  celkový počet objektů: 156
   aktivní velikost objektů: 602954495
    celková velikost objektů: 602954495
     poměr aktivní velikosti: 100.0%
    poslední začátek komprese: ____-__-__ __:__:__
      poslední konec komprese: ____-__-__ __:__:__

Vidíme, že výstup není příliš informativní.

Podíváme se, kde je tento soubor umístěn.
leofs-adm whereis leofs\/1gb

leofs-adm kde je leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
 del?  |         uzel         |             adresa válce             |    velikost  |   kontrolní součet  |  má děti  |  celkem chunks  |     hodiny      |             kdy            
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
       | S0@172.26.9.181      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | ano            |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000
       | S0@172.26.9.182      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | ano            |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000

Aktivujeme NFS

Aktivujeme NFS na serveru Leo Gateway 172.26.9.184.

Na serveru a klientovi nainstalujeme nfs-utils

sudo yum install nfs-utils

Podle pokynů upravíme konfigurační soubor /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Na serveru 172.26.9.184 spustíme rpcbind a leofs-gateway

sudo service rpcbind start
sudo service leofs-gateway restart

Na serveru, kde běží leo_manager, vytvoříme bucket pro NFS a vygenerujeme klíč pro připojení k NFS

leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adresa-nfs-klienta

Připojení k NFS

sudo mkdir /mnt/leofs
## pro Linux - "sudo mount -t nfs -o nolock :// "
sudo mount -t nfs -o nolock ip-adresa-nfs-serveru-kde-máte-nainstalován-gateway://access_key_id/ /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs

Zobrazení diskového prostoru přes NFS klienta

Diskový prostor s ohledem na to, že každý storage uzel má disk 40GB (3 uzly běží, 1 uzel připojen):

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

Instalace LeoFS se 6 storage uzly.

Inventář (bez 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

Výstup leofs-adm status

Výstup 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
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Diskový prostor s ohledem na to, že každý uzel storage má disk 40 GB (6 uzlů běží):

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

Pokud je použito 5 uzlů 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

Logy

Logy se nacházejí v adresářích /usr/local/leofs/current/*/log

Telegram kanál: SDS a Klastrové FS

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster