Installation d'un stockage d'objets distribué résilient LeoFS, compatible avec les clients utilisant S3 et NFS

Selon Opennet: LeoFS — stockage d'objets distribuĂ© et tolĂ©rant aux pannes LeoFS, compatible avec les clients utilisant l'API Amazon S3 et REST-API, ainsi que supportant le mode de fonctionnement en tant que serveur NFS. Des optimisations sont prĂ©sentes pour le stockage Ă  la fois d'objets petits et trĂšs grands, avec un mĂ©canisme de mise en cache intĂ©grĂ©, et la possibilitĂ© de rĂ©pliquer les stockages entre les centres de donnĂ©es. Parmi les objectifs du projet, on note l'atteinte d'une fiabilitĂ© de 99,9999999 % grĂące Ă  la rĂ©plication redondante des duplicatas et Ă  l'Ă©limination d'un point de dĂ©faillance unique. Le code du projet est Ă©crit en Erlang.

LeoFS se compose de trois composants :

  • LeoFS Storage — gĂšre les opĂ©rations d'ajout, d'extraction et de suppression d'objets et de mĂ©tadonnĂ©es, responsable de l'exĂ©cution de la rĂ©plication, de la restauration et de la formation de la file d'attente des demandes des clients.
  • LeoFS Gateway — assure la gestion des requĂȘtes HTTP et redirige les rĂ©ponses aux clients en utilisant REST-API ou S3-API, et garantit la mise en cache des donnĂ©es les plus demandĂ©es en mĂ©moire et sur disque.
  • LeoFS Manager — surveille le fonctionnement des nƓuds LeoFS Gateway et LeoFS Storage, garde un Ɠil sur l'Ă©tat des nƓuds et vĂ©rifie les sommes de contrĂŽle. Il garantit l'intĂ©gritĂ© des donnĂ©es et la haute disponibilitĂ© du stockage.

Dans cet article, nous allons installer LeoFS Ă  l'aide d'un playbook Ansible, tester S3, NFS.

Si vous essayez d'installer LeoFS en utilisant les playbooks officiels, vous rencontrerez diverses erreurs : 1,2. Dans cet article, je vais expliquer ce qu'il faut faire pour éviter ces erreurs.

LĂ  oĂč vous exĂ©cuterez le playbook Ansible, vous devez installer netcat.

Exemple d'inventaire

Exemple d'inventaire (dans le dépÎt 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

Préparation des serveurs

Désactivation de SELinux. J'espÚre que la communauté créera des politiques SELinux pour LeoFS.

    - name: Installer libselinux comme prérequis pour le module Ansible SELinux
      yum:
        name: "{{item}}"
        state: latest
      with_items:
        - libselinux-python
        - libsemanage-python

    - name: Désactiver SELinux au prochain redémarrage
      selinux:
        state: disabled

    - name: Mettre SELinux en mode permissif jusqu'au redémarrage de la machine
      command: setenforce 0
      ignore_errors: true
      changed_when: false

Installation netcat et redhat-lsb-core. netcat nécessaire pour leofs-adm, redhat-lsb-core nécessaire pour déterminer la version de l'OS ici.

    - name: Installer des paquets
      yum: name={{ item }} state=present
      with_items:
        - nmap-ncat
        - redhat-lsb-core

Création de l'utilisateur leofs et ajout à la groupe wheel

    - name: Créer l'utilisateur leofs
      group:
        name: leofs
        state: present

    - name: Permettre au groupe 'wheel' d'avoir un sudo sans mot de passe
      lineinfile:
        dest: /etc/sudoers
        state: present
        regexp: '^%wheel'
        line: '%wheel ALL=(ALL) NOPASSWD: ALL'
        validate: 'visudo -cf %s'

    - name: Ajouter l'utilisateur 'leofs' au groupe 'wheel'
      user:
        name: leofs
        groups: wheel
        append: yes

Installation d'Erlang

    - name : Remote erlang-20.3.8.23-1.el7.x86_64.rpm installer avec 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

Vous pouvez trouver la version complÚte du playbook ansible corrigée ici : https://github.com/patsevanton/leofs_ansible

Installation, configuration, démarrage

Ensuite, exécutons comme indiqué dans https://github.com/leo-project/leofs_ansible sans 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

Vérifions le statut du cluster sur Primary LeoManager

leofs-adm status

Primary et Secondary peuvent ĂȘtre vus dans les logs ansible-playbook

Installation d'un stockage d'objets distribué résilient LeoFS, compatible avec les clients utilisant S3 et NFS

Installation d'un stockage d'objets distribué résilient LeoFS, compatible avec les clients utilisant S3 et NFS

La sortie sera Ă  peu prĂšs comme ceci

 [Configuration SystĂšme]
-----------------------------------+----------
 ÉlĂ©ments                          | Valeur   
-----------------------------------+----------
 Niveau de base/consistance        
-----------------------------------+----------
                    version du systĂšme | 1.4.3
                        ID du cluster | leofs_1
                             ID DC   | dc_1
                    Répliques totales | 2
          nombre de succĂšs de R     | 1
          nombre de succĂšs de W     | 1
          nombre de succĂšs de D     | 1
 nombre de répliques en conscience de rack | 0
                         taille de l'anneau | 2^128
-----------------------------------+----------
 ParamÚtres de réplication Multi DC
-----------------------------------+----------
 [mdcr] nombre max de DC joignables | 2
 [mdcr] répliques totales par DC     | 1
 [mdcr] nombre de succĂšs de R         | 1
 [mdcr] nombre de succĂšs de W         | 1
 [mdcr] nombre de succĂšs de D         | 1
-----------------------------------+----------
 Hash de MANAGER RING
-----------------------------------+----------
                 hash actuel de l'anneau | a0314afb
                hash précédent de l'anneau | a0314afb
-----------------------------------+----------

 [État des NƓuds]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
 type  |         nƓud        |    Ă©tat      | ID rack |  anneau actuel  |   ancien anneau |          mis Ă  jour Ă          
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
  S    | S0@172.26.9.179      | en cours     |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.181      | en cours     |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.182      | en cours     |         | a0314afb       | a0314afb       | 2019-12-05 10:33:47 +0000
  S    | S0@172.26.9.183      | attaché     |         |                |                | 2019-12-05 10:33:58 +0000
  G    | G0@172.26.9.180      | en cours     |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
  G    | G0@172.26.9.184      | en cours     |         | a0314afb       | a0314afb       | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------

Créons un utilisateur

Créons l'utilisateur leofs :

leofs-adm create-user leofs leofs

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

Liste des utilisateurs :

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

Créons un Bucket

Bucket créé

leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OK

Liste des buckets :

 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

Configuration de s3cmd

Dans le champ Nom du serveur proxy HTTP indiquez l'IP du serveur Gateway

s3cmd --configure 

Entrez de nouvelles valeurs ou acceptez les valeurs par défaut entre crochets en appuyant sur Entrée.
Consultez le manuel de l'utilisateur pour une description détaillée de toutes les options.

La clé d'accÚs et la clé secrÚte sont vos identifiants pour Amazon S3. Laissez-les vides pour utiliser les variables d'environnement.
Clé d'accÚs [9c2615f32e81e6a1caf5]: 
Clé secrÚte [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: 
Région par défaut [US]: 

Utilisez "s3.amazonaws.com" pour le point de terminaison S3 et ne le modifiez pas pour le S3 d'Amazon cible.
Point de terminaison S3 [s3.amazonaws.com]: 

Utilisez "%(bucket)s.s3.amazonaws.com" pour le S3 d'Amazon cible. Les variables "%(bucket)s" et "%(location)s" peuvent ĂȘtre utilisĂ©es
si le systÚme S3 cible prend en charge les buckets basés sur DNS.
ModÚle de bucket+nom d'hÎte:port de type DNS pour accéder à un bucket [%(bucket)s.s3.amazonaws.com]: leofs

Le mot de passe de chiffrement est utilisé pour protéger vos fichiers de la lecture
par des personnes non autorisées lors de leur transfert vers S3.
Mot de passe de chiffrement: 
Chemin vers le programme GPG [\/usr\/bin\/gpg]: 

Lors de l'utilisation du protocole HTTPS sécurisé, toutes les communications avec les serveurs Amazon S3
sont protégées contre l'interception par des tiers. Cette méthode est
plus lente que le HTTP simple et ne peut ĂȘtre proxifiĂ©e qu'avec Python 2.7 ou supĂ©rieur.
Utiliser le protocole HTTPS [Non]: 

Sur certains réseaux, tout accÚs à Internet doit passer par un proxy HTTP.
Essayez de le définir ici si vous ne pouvez pas vous connecter directement à S3.
Nom du serveur proxy HTTP [172.26.9.180]: 
Port du serveur proxy HTTP [8080]: 

Nouvelles configurations:
  Clé d'accÚs: 9c2615f32e81e6a1caf5
  Clé secrÚte: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
  Région par défaut: US
  Point de terminaison S3: s3.amazonaws.com
  ModÚle de bucket+nom d'hÎte:port de type DNS pour accéder à un bucket: leofs
  Mot de passe de chiffrement: 
  Chemin vers le programme GPG: /usr/bin/gpg
  Utiliser le protocole HTTPS: Faux
  Nom du serveur proxy HTTP: 172.26.9.180
  Port du serveur proxy HTTP: 8080

Tester l'accĂšs avec les identifiants fournis? [Y/n] Y
Veuillez patienter, tentative de lister tous les buckets...
SuccÚs. Votre clé d'accÚs et votre clé secrÚte ont bien fonctionné :-)

Vérification du bon fonctionnement du chiffrement...
Non configuré. Ne vous inquiétez pas.

Sauvegarder les paramĂštres? [y/N] y
Configuration enregistrée dans '\/home\/user\/.s3cfg'

Si une erreur ERROR: S3 error: 403 (AccessDenied): Access Denied: se produit

s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py'  [1 sur 1]
 382 sur 382   100% en    0s     3.40 kB\/s  terminé
ERROR: S3 error: 403 (AccessDenied): Access Denied

vous devez corriger signature_v2 sur True dans le fichier de configuration s3cmd. Détails dans ce issue.

Si signature_v2 est False, alors vous obtiendrez une erreur comme celle-ci :

AVERTISSEMENT : Nouvelle tentative de requĂȘte Ă©chouĂ©e : delimiter= (l'argument 2 de getaddrinfo() doit ĂȘtre un entier ou une chaĂźne)
AVERTISSEMENT : Attente de 3 s...
AVERTISSEMENT : Nouvelle tentative de requĂȘte Ă©chouĂ©e : delimiter= (l'argument 2 de getaddrinfo() doit ĂȘtre un entier ou une chaĂźne)
AVERTISSEMENT : Attente de 6 s...
ERREUR : Échec du test : La requĂȘte a Ă©chouĂ© pour : delimiter=

Test de téléchargement

Créons un fichier de 1 Go

fallocate -l 1GO 1gb

Nous le téléchargeons dans Leofs

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

Statistiques

leofs-adm du pour 1 nƓud :

leofs-adm du S0@172.26.9.179
 nombre d'objets actifs : 156
  nombre total d'objets : 156
   taille active des objets : 602954495
    taille totale des objets : 602954495
     ratio de taille active : 100.0%
    dernier démarrage de la compression : ____-__-__ __:__:__
      derniĂšre fin de compression : ____-__-__ __:__:__

Nous constatons que la sortie n'est pas trĂšs informative.

Voyons oĂč se trouve ce fichier.
leofs-adm whereis leofs\/1gb

leofs-adm oĂč est leofs/1go
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
 del?  |         nƓud         |             adresse du ring             |    taille    |   somme de contrîle   |  a des enfants  |  total des morceaux  |     horloge      |             quand            
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
       | S0@172.26.9.181      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | vrai           |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000
       | S0@172.26.9.182      | 657a9f3a3db822a7f1f5050925b26270     |    976563K |   a4634eea55 | vrai           |             64 | 598f2aa976a4f  | 2019-12-05 10:48:15 +0000

Activation de NFS

Activation de NFS sur le serveur Leo Gateway 172.26.9.184.

Nous allons installer nfs-utils sur le serveur et le client

sudo yum install nfs-utils

Selon l'instruction, nous allons corriger le fichier de configuration /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf

protocol = nfs

Sur le serveur 172.26.9.184, nous allons démarrer rpcbind et leofs-gateway

sudo service rpcbind start
sudo service leofs-gateway restart

Sur le serveur oĂč le leo_manager est en cours d'exĂ©cution, nous allons crĂ©er un bucket pour NFS et gĂ©nĂ©rer une clĂ© pour se connecter Ă  NFS

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

Connexion Ă  NFS

sudo mkdir /mnt/leofs
## pour Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>"
sudo mount -t nfs -o nolock adresse-ip-nfs-serveur-oĂč-vous-avez-installĂ©-gateway:/bucket/access_key_id/clĂ©-obtenue-de-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs

Visualisation de l'espace disque via le client NFS

Espace disque en tenant compte que chaque nƓud de stockage a un disque de 40 Go (3 nƓuds en exĂ©cution, 1 nƓud attachĂ©) :

df -hP
SystÚme de fichiers                                                         Taille  Utilisé Dispo Util% Monté sur
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b   60G  3.6G   57G   6% /mnt/leofs

Installation de LeoFS avec 6 nƓuds de stockage.

Inventaire (sans 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

Sortie leofs-adm status

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

Espace disque disponible, Ă©tant donnĂ© que chaque nƓud de stockage a un disque de 40 Go (6 nƓuds en cours d'exĂ©cution):

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

Si 5 nƓuds de stockage sont utilisĂ©s

[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

Journaux

Les journaux se trouvent dans les répertoires /usr/local/leofs/current/*/log

Canal Telegram: SDS et systĂšmes de fichiers en cluster

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster