Podle : — distribuované, vysoce dostupné úložiště objektů , 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ů:
- — 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ů.
- — 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.
- — 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: ,. 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_storagePří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 .
- name: Install Packages
yum: name={{ item }} state=present
with_items:
- nmap-ncat
- redhat-lsb-coreVytvoř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: yesInstalace 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:
Instalace, konfigurace, spuštění
Dále provádíme podle uvedeného v 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.ymlKontrolujeme stav klastru na Primárním LeoManageru
leofs-adm statusPrimární a sekundární lze vidět v logách ansible-playbooku


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: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39ebSeznam 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 +0000Vytváříme bucket
Bucket vytvořen
leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5
OKSeznam 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 +0000Konfigurace 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ítnutPak je třeba v konfiguračním souboru s3cmd opravit signature_v2 na True. Podrobnosti naleznete v této .
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 1gbNahráváme ho do Leofs
time s3cmd put 1gb s3:\/\/leofs\/\nreal 0m19.099s
user 0m7.855s
sys 0m1.620sStatistika
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 +0000Aktivujeme NFS
Aktivujeme NFS na serveru Leo Gateway 172.26.9.184.
Na serveru a klientovi nainstalujeme nfs-utils
sudo yum install nfs-utilsPodle pokynů upravíme konfigurační soubor /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf
protocol = nfsNa serveru 172.26.9.184 spustíme rpcbind a leofs-gateway
sudo service rpcbind start
sudo service leofs-gateway restartNa 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-klientaPř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/leofsZobrazení 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/leofsInstalace 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_storageVý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/leofsPokud 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.183df -hP
172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 100G 3.0G 97G 3% /mnt/leofsLogy
Logy se nacházejí v adresářích /usr/local/leofs/current/*/log
Telegram kanál:
Zdroj: habr.com
