Volgens : ā gedistribueerde fouttolerante objectopslag , compatibel met klanten die Amazon S3- en REST-API gebruiken en die ook ondersteunt als NFS-server. Er zijn optimalisaties voor zowel kleine als zeer grote objecten, er is een ingebouwd cachemechanisme, en replicatie van opslag tussen datacenters is mogelijk. Onder de doelstellingen van het project valt het bereiken van een betrouwbaarheid van 99.9999999% door middel van redundante replicatie van duplicaten en het uitsluiten van een enkelvoudig foutpunt. De code van het project is geschreven in Erlang.
LeoFS bestaat uit drie componenten:
- ā beheert de operaties van toevoegen, ophalen en verwijderen van objecten en metadata, verantwoordelijk voor het uitvoeren van replicatie, herstel en het vormen van een wachtrij voor klantverzoeken.
- ā verwerkt HTTP-verzoeken en leidt antwoorden om naar klanten met behulp van REST-API of S3-API, zorgt voor caching van de meest gevraagde gegevens in het geheugen en op schijf.
- ā houdt toezicht op de werking van LeoFS Gateway- en LeoFS Storage-knooppunten, monitort de status van knooppunten en controleert de controlesommen. Zorgt voor gegevensintegriteit en hoge beschikbaarheid van de opslag.
In deze post zullen we LeoFS installeren met behulp van ansible-playbook, en S3 en NFS testen.
Als je probeert LeoFS te installeren met de officiƫle playbooks, dan kun je verschillende fouten tegenkomen: ,. In deze post schrijf ik wat nodig is om deze fouten te vermijden.
Waar je de ansible-playbook gaat uitvoeren, moet netcat worden geĆÆnstalleerd.
Voorbeeld inventory
Voorbeeld inventory (in de repository 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_storageServers voorbereiden
Schakel Selinux uit. Ik hoop dat de gemeenschap Selinux-beleidsregels voor LeoFS zal creƫren.
- name: Installeer libselinux als vereiste voor de SELinux Ansible-module
yum:
name: "{{item}}"
state: latest
with_items:
- libselinux-python
- libsemanage-python
- name: Zet SELinux uit bij de volgende herstart
selinux:
state: disabled
- name: Zet SELinux in permissieve modus totdat de machine opnieuw wordt opgestart
command: setenforce 0
ignore_errors: true
changed_when: false
Installatie netcat en redhat-lsb-core. netcat is nodig voor leofs-adm, redhat-lsb-core is nodig voor het bepalen van de OS-versie .
- name: Installeer pakketten
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreMaak de gebruiker leofs aan en voeg deze toe aan de groep wheel
- name: Maak gebruiker leofs aan
group:
name: leofs
state: present
- name: Sta de groep 'wheel' toe om wachtwoordloos sudo te hebben
lineinfile:
dest: /etc/sudoers
state: present
regexp: '^%wheel'
line: '%wheel ALL=(ALL) NOPASSWD: ALL'
validate: 'visudo -cf %s'
- name: Voeg de gebruiker 'leofs' toe aan de groep 'wheel'
user:
name: leofs
groups: wheel
append: yesErlang-installatie
- naam: Remote erlang-20.3.8.23-1.el7.x86_64.rpm installeren met 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
De volledige versie van de gecorrigeerde ansible playbook is hier te vinden:
Installatie, configuratie, uitvoering
Voer verder uit zoals beschreven in zonder 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.ymlControleer de status van de cluster op de Primary LeoManager
leofs-adm statusPrimary en Secondary zijn zichtbaar in de ansible-playbook logs


De uitvoer zal ongeveer zo zijn
[Systeemconfiguratie]
-----------------------------------+----------
Item | Waarde
-----------------------------------+----------
Basis/Consistentie niveau
-----------------------------------+----------
systeemversie | 1.4.3
cluster Id | leofs_1
DC Id | dc_1
Totaal aantal replica's | 2
aantal successen van R | 1
aantal successen van W | 1
aantal successen van D | 1
aantal rack-awareness replica's | 0
ringgrootte | 2^128
-----------------------------------+----------
Multi DC replicatie-instellingen
-----------------------------------+----------
[mdcr] max aantal joinbare DC's | 2
[mdcr] totale replica's per DC | 1
[mdcr] aantal successen van R | 1
[mdcr] aantal successen van W | 1
[mdcr] aantal successen van D | 1
-----------------------------------+----------
Manager RING hash
-----------------------------------+----------
huidige ring-hash | a0314afb
vorige ring-hash | a0314afb
-----------------------------------+----------
[Status van Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
type | node | status | rack-id | huidige ring | vorige ring | bijgewerkt om
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.179 | draaiende | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.181 | draaiende | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.182 | draaiende | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000
S | S0@172.26.9.183 | verbonden | | | | 2019-12-05 10:33:58 +0000
G | G0@172.26.9.180 | draaiende | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
G | G0@172.26.9.184 | draaiende | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Een gebruiker aanmaken
Een gebruiker leofs aanmaken:
leofs-adm create-user leofs leofs
access-key-id: 9c2615f32e81e6a1caf5
secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebLijst van gebruikers:
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 +0000Een Bucket aanmaken
Bucket aangemaakt
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKLijst van buckets:
leofs-adm get-buckets
cluster id | bucket | eigenaar | permissies | aangemaakt op
-------------+----------+--------+------------------+---------------------------
leofs_1 | leofs | leofs | Me(full_control) | 2019-12-02 10:44:02 +0000Configuratie s3cmd
In het veld Naam van de HTTP Proxy-server Geef het IP-adres van de Gateway-server op
s3cmd --configure
Vul nieuwe waarden in of accepteer de standaardwaarden tussen haakjes met Enter.
Raadpleeg de gebruikershandleiding voor een gedetailleerde beschrijving van alle opties.
Toegangssleutel en geheime sleutel zijn uw identificatoren voor Amazon S3. Laat ze leeg om de omgevingsvariabelen te gebruiken.
Toegangssleutel [9c2615f32e81e6a1caf5]:
Geheime sleutel [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]:
Standaardregio [VS]:
Gebruik "s3.amazonaws.com" voor het S3-eindpunt en wijzig dit niet naar het doel Amazon S3.
S3-eindpunt [s3.amazonaws.com]:
Gebruik "%(bucket)s.s3.amazonaws.com" voor het doel Amazon S3. De variabelen "%(bucket)s" en "%(location)s" kunnen worden gebruikt als het doelsystemen S3 DNS-gebaseerde buckets ondersteunt.
DNS-stijl bucket+hospiteinnaam:poort sjabloon voor toegang tot een bucket [%(bucket)s.s3.amazonaws.com]: leofs
Het encryptiewachtwoord wordt gebruikt om uw bestanden te beschermen tegen ongeoorloofde toegang tijdens de overdracht naar S3.
Encryptiewachtwoord:
Pad naar het GPG-programma [\/usr\/bin\/gpg]:
Bij gebruik van het veilige HTTPS-protocol is alle communicatie met Amazon S3-servers beschermd tegen afluisteren door derden. Deze methode is
langzamer dan gewone HTTP en kan alleen worden geproxied met Python 2.7 of nieuwer.
Gebruik HTTPS-protocol [Nee]:
Op sommige netwerken moet al het internetverkeer via een HTTP-proxy verlopen.
Probeer dit hier in te stellen als u geen directe verbinding kunt maken met S3.
Naam van de HTTP Proxy-server [172.26.9.180]:
HTTP Proxy-serverpoort [8080]:
Nieuwe instellingen:
Toegangssleutel: 9c2615f32e81e6a1caf5
Geheime sleutel: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb
Standaardregio: VS
S3-eindpunt: s3.amazonaws.com
DNS-stijl bucket+hospiteinnaam:poort sjabloon voor toegang tot een bucket: leofs
Encryptiewachtwoord:
Pad naar GPG-programma: \/usr\/bin\/gpg
Gebruik HTTPS-protocol: Onwaar
Naam van de HTTP Proxy-server: 172.26.9.180
HTTP Proxy-serverpoort: 8080
Test toegang met de geleverde referenties? [Y\/n] Y
Even Geduld, we proberen alle buckets op te sommen...
Succes. Uw toegangssleutel en geheime sleutel werkten prima :-)
Nu verifiƫren of encryptie werkt...
Niet geconfigureerd. Maak u geen zorgen.
Instellingen opslaan? [y\/N] y
Configuratie opgeslagen in '\/home\/user\/.s3cfg'Als u de foutmelding ERROR: S3-error: 403 (AccessDenied): Toegang geweigerd ontvangt,
s3cmd put test.py s3:\/\/leofs\/\nupload: 'test.py' -> 's3:\/\/leofs\/test.py' [1 van 1]
382 van 382 100% in 0s 3.40 kB\/s voltooid
ERROR: S3-error: 403 (AccessDenied): Toegang geweigerdDan moet je in het s3cmd-configuratiebestand signature_v2 op True zetten. Details hierover .
Als signature_v2 False is, krijg je deze fout:
WAARSCHUWING: Poging tot opnieuw verzenden van de mislukte aanvraag: \/?delimiter= (getaddrinfo() argument 2 moet een integer of string zijn)\nWAARSCHUWING: Wachten 3 sec...\nWAARSCHUWING: Poging tot opnieuw verzenden van de mislukte aanvraag: \/?delimiter= (getaddrinfo() argument 2 moet een integer of string zijn)\nWAARSCHUWING: Wachten 6 sec...\nFOUT: Test mislukt: Aanvraag mislukt voor: \/?delimiter=Upload-test
Maak een bestand van 1 GB aan
fallocate -l 1GB 1gbWe uploaden het naar Leofs
time s3cmd put 1gb s3:\/\/leofs\/\nreal 0m19.099s
user 0m7.855s
sys 0m1.620sStatistieken
leofs-adm du voor 1 knooppunt:
leofs-adm du S0@172.26.9.179
actieve aantal objecten: 156
totaal aantal objecten: 156
actieve grootte van objecten: 602954495
totale grootte van objecten: 602954495
verhouding van actieve grootte: 100.0%
laatste compactie start: ____-__-__ __:__:__
laatste compactie eind: ____-__-__ __:__:__We zien dat de uitvoer niet erg informatief is.
Laten we kijken waar dit bestand zich bevindt.
leofs-adm whereis leofs\/1gb
leofs-adm whereis leofs/1gb
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
del? | node | ring address | size | checksum | has children | total chunks | clock | when
-------+----------------------+--------------------------------------+------------+--------------+----------------+----------------+----------------+----------------------------
| S0@172.26.9.181 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000
| S0@172.26.9.182 | 657a9f3a3db822a7f1f5050925b26270 | 976563K | a4634eea55 | true | 64 | 598f2aa976a4f | 2019-12-05 10:48:15 +0000NFS activeren
NFS activeren op de server Leo Gateway 172.26.9.184.
NFS-utils installeren op de server en client
sudo yum install nfs-utilsDe configuratiebestand aanpassen volgens de instructies /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsStart rpcbind en leofs-gateway op de server 172.26.9.184
sudo service rpcbind start
sudo service leofs-gateway restartMaak een bucket voor NFS aan en genereer een sleutel voor verbinding met NFS op de server waar leo_manager draait.
leofs-adm add-bucket test 05236
leofs-adm gen-nfs-mnt-key test 05236 ip-adres-nfs-clientVerbinden met NFS
sudo mkdir /mnt/leofs
## voor Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>"
sudo mount -t nfs -o nolock ip-adres-nfs-server-waar-gateway-is-geĆÆnstalleerd:/bucket/access_key_id/sleutel-verkregen-van-gen-nfs-mnt-key /mnt/leofs
sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofsWeergave van schijfruimte via NFS-client
Schijfruimte met inachtneming dat elke storage node een schijf van 40GB heeft (3 nodes actief, 1 node aangesloten):
df -hP
Filesystem Size Used Avail Use% Mounted on
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofsInstallatie van LeoFS met 6 storage nodes.
Inventaris (zonder 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_storageleofs-adm status uitvoer
leofs-adm status uitvoer
[System Confiuration]
-----------------------------------+----------
Item | Waarde
-----------------------------------+----------
Basis/Consistentieniveau
-----------------------------------+----------
systeemversie | 1.4.3
cluster Id | leofs_1
DC Id | dc_1
Totaal aantal replicas | 2
aantal succesvolle R | 1
aantal succesvolle W | 1
aantal succesvolle D | 1
aantal rack-awareness replicas | 0
ringgrootte | 2^128
-----------------------------------+----------
Multi DC replicatie-instellingen
-----------------------------------+----------
[mdcr] max aantal joinbare DC's | 2
[mdcr] totaal aantal replicas per DC | 1
[mdcr] aantal succesvolle R | 1
[mdcr] aantal succesvolle W | 1
[mdcr] aantal succesvolle D | 1
-----------------------------------+----------
Manager RING-hash
-----------------------------------+----------
huidige ring-hash | d8ff465e
vorige ring-hash | d8ff465e
-----------------------------------+----------
[Status van Node(s)]
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
type | node | status | rack id | huidige ring | vorige ring | bijgewerkt op
-------+----------------------+--------------+---------+----------------+----------------+----------------------------
S | S0@172.26.9.178 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.179 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.181 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:30 +0000
S | S0@172.26.9.182 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.183 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
S | S0@172.26.9.185 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:29 +0000
G | G0@172.26.9.180 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
G | G0@172.26.9.184 | draaiend | | d8ff465e | d8ff465e | 2019-12-06 05:18:31 +0000
-------+----------------------+--------------+---------+----------------+----------------+----------------------------Opslagcapaciteit, rekening houdend met het feit dat elke storage node een schijf van 40 GB heeft (6 draaiende nodes):
df -hP
Bestandssysteem Grootte Gebruikt Beschikbaar Gebruik% Gemonteerd op
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 120G 3.6G 117G 3% /mnt/leofsAls er 5 storage nodes worden gebruikt
[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/leofsLogs
Logs bevinden zich in de mappen /usr/local/leofs/current/*/log
Telegram-kanaal:
Bron: habr.com
