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 :
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 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
