Selon : — stockage d'objets distribué et tolérant aux pannes , 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 :
- — 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.
- — 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.
- — 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 : ,. 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_storagePré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 .
- name: Installer des paquets
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreCré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: yesInstallation 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 :
Installation, configuration, démarrage
Ensuite, exécutons comme indiqué dans 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.ymlVérifions le statut du cluster sur Primary LeoManager
leofs-adm statusPrimary et Secondary peuvent être vus dans les logs ansible-playbook


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 : 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebListe 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 +0000Créons un Bucket
Bucket créé
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKListe 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 +0000Configuration 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 Deniedvous devez corriger signature_v2 sur True dans le fichier de configuration s3cmd. Détails dans ce .
Si signature_v2 est False, alors vous obtiendrez une erreur comme celle-ci :
WARNING: Réessai de la demande échouée : \/?delimiter= (getaddrinfo() argument 2 doit être un entier ou une chaîne)
WARNING: Attente de 3 sec...
WARNING: Réessai de la demande échouée : \/?delimiter= (getaddrinfo() argument 2 doit être un entier ou une chaîne)
WARNING: Attente de 6 sec...
ERROR: Test échoué : la demande a échoué pour : \/?delimiter=Test de téléchargement
Créons un fichier de 1 Go
fallocate -l 1GO 1gbNous le téléchargeons dans Leofs
time s3cmd put 1gb s3:\/\/leofs\/\nréel 0m19.099s
user 0m7.855s
sys 0m1.620sStatistiques
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 +0000Activation 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-utilsSelon l'instruction, nous allons corriger le fichier de configuration /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsSur le serveur 172.26.9.184, nous allons démarrer rpcbind et leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartSur 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-clientConnexion à 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/leofsVisualisation 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/leofsInstallation 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_storageSortie 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/leofsSi 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.183df -hP
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 100G 3.0G 97G 3% /mnt/leofsJournaux
Les journaux se trouvent dans les répertoires /usr/local/leofs/current/*/log
Canal Telegram:
Source : habr.com
