Instalación de la instalación de almacenamiento a prueba de fallas distribuida de LeoFS compatible con clientes que usan S3, NFS

Soy de Luxoft
Según Opennet : LeoFS es una instalación de almacenamiento tolerante a fallas distribuida para objetos LeoFS , compatible con clientes que utilizan la API de Amazon S3 y REST-API, y también admite el modo de operación como un servidor NFS. Hay optimizaciones para almacenar objetos pequeños y muy grandes, hay un mecanismo de almacenamiento en caché incorporado, es posible la replicación de almacenamientos entre centros de datos. Entre los objetivos del proyecto se encuentra el logro del 99.9999999% de confiabilidad debido a la replicación excesiva de duplicados y la eliminación de un solo punto de falla. El código del proyecto está escrito en Erlang.


LeoFS consta de tres componentes:


  • LeoFS Storage : presta servicios a las operaciones de agregar, recuperar y eliminar objetos y metadatos, es responsable de replicar, restaurar y poner en cola las solicitudes de los clientes.
  • LeoFS Gateway : atiende las solicitudes HTTP y redirige las respuestas a los clientes que utilizan REST-API o S3-API, proporciona el almacenamiento en caché de los datos más solicitados en la memoria y en el disco.
  • LeoFS Manager : supervisa el funcionamiento de los nodos LeoFS Gateway y LeoFS Storage, supervisa el estado de los nodos y comprueba las sumas de comprobación. Garantiza la integridad de los datos y la alta disponibilidad de almacenamiento.

En esta publicación, instale Leofs usando ansible-playbook, test S3, NFS.


Si intenta instalar LeoFS utilizando los libros de jugadas oficiales, le esperan diferentes errores: 1 , 2 . En esta publicación escribiré lo que hay que hacer para evitar estos errores.


Donde ejecutará ansible-playbook, debe instalar netcat.


Ejemplo de inventario


Inventario de ejemplo (en el repositorio 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 

Preparación del servidor


Desactivar Selinux. Espero que la comunidad cree políticas de Selinux para 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 

Instale netcat y redhat-lsb-core . netcat necesita leofs-adm para leofs-adm , netcat necesita redhat-lsb-core para determinar la versión del sistema operativo aquí .


  - name: Install Packages yum: name={{ item }} state=present with_items: - nmap-ncat - redhat-lsb-core 

Crear un juego de usuarios y agregarlo al grupo de ruedas


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

Instalar Erlang


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

La versión completa del libro de jugadas ansible corregido se puede encontrar aquí: https://github.com/patsevanton/leofs_ansible


Instalación, configuración, inicio


A continuación, ejecute como está escrito en https://github.com/leo-project/leofs_ansible sin 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 

Comprobación del estado del clúster en LeoManager primario


 leofs-adm status 

Primaria y Secundaria se pueden ver en los registros del libro de jugadas ansible




La conclusión será algo como esto
  [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 | a0314afb previous ring-hash | a0314afb -----------------------------------+---------- [State of Node(s)] -------+----------------------+--------------+---------+----------------+----------------+---------------------------- type | node | state | rack id | current ring | prev ring | updated at -------+----------------------+--------------+---------+----------------+----------------+---------------------------- S | S0@172.26.9.179 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.181 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.182 | running | | a0314afb | a0314afb | 2019-12-05 10:33:47 +0000 S | S0@172.26.9.183 | attached | | | | 2019-12-05 10:33:58 +0000 G | G0@172.26.9.180 | running | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000 G | G0@172.26.9.184 | running | | a0314afb | a0314afb | 2019-12-05 10:33:49 +0000 -------+----------------------+--------------+---------+----------------+----------------+---------------------------- 

Crear un usuario


Crear leofs de usuario:


 leofs-adm create-user leofs leofs access-key-id: 9c2615f32e81e6a1caf5 secret-access-key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb 

Lista de usuarios:


 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 

Crear un cubo


Hecho un balde


 leofs-adm add-bucket leofs 9c2615f32e81e6a1caf5 OK 

Lista de cubo:


  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 

Configurando s3cmd


En el campo HTTP Proxy server name , especifique la IP del servidor Gateway


 s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables. Access Key [9c2615f32e81e6a1caf5]: Secret Key [8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb]: Default Region [US]: Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3. S3 Endpoint [s3.amazonaws.com]: Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used if the target S3 system supports dns based buckets. DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: leofs Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: Path to GPG program [/usr/bin/gpg]: When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP, and can only be proxied with Python 2.7 or newer Use HTTPS protocol [No]: On some networks all internet access must go through a HTTP proxy. Try setting it here if you can't connect to S3 directly HTTP Proxy server name [172.26.9.180]: HTTP Proxy server port [8080]: New settings: Access Key: 9c2615f32e81e6a1caf5 Secret Key: 8aaaa35c1ad78a2cbfa1a6cd49ba8aaeb3ba39eb Default Region: US S3 Endpoint: s3.amazonaws.com DNS-style bucket+hostname:port template for accessing a bucket: leofs Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: 172.26.9.180 HTTP Proxy server port: 8080 Test access with supplied credentials? [Y/n] Y Please wait, attempting to list all buckets... Success. Your access key and secret key worked fine :-) Now verifying that encryption works... Not configured. Never mind. Save settings? [y/N] y Configuration saved to '/home/user/.s3cfg' 

Si recibe un error ERROR: error S3: 403 (AccessDenied): acceso denegado:


 s3cmd put test.py s3://leofs/ upload: 'test.py' -> 's3://leofs/test.py' [1 of 1] 382 of 382 100% in 0s 3.40 kB/s done ERROR: S3 error: 403 (AccessDenied): Access Denied 

Luego debe corregir signature_v2 en la configuración True s3cmd. Detalles en este número .


Si signature_v2 es False, habrá un error de este tipo:


 WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string) WARNING: Waiting 3 sec... WARNING: Retrying failed request: /?delimiter=%2F (getaddrinfo() argument 2 must be integer or string) WARNING: Waiting 6 sec... ERROR: Test failed: Request failed for: /?delimiter=%2F 

Prueba de arranque


Crea un archivo de 1GB


 fallocate -l 1GB 1gb 

Subelo a Leofs


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

Estadísticas


leofs-adm du para 1 nodo:


 leofs-adm du S0@172.26.9.179 active number of objects: 156 total number of objects: 156 active size of objects: 602954495 total size of objects: 602954495 ratio of active size: 100.0% last compaction start: ____-__-__ __:__:__ last compaction end: ____-__-__ __:__:__ 

Vemos que la conclusión no es muy informativa.


Veamos dónde se encuentra este archivo.
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 +0000 

Activar NFS


Activamos NFS en el servidor Leo Gateway 172.26.9.184.


En el servidor y el cliente, instale nfs-utils


 sudo yum install nfs-utils 

De acuerdo con las instrucciones, arreglaremos el archivo de configuración /usr/local/leofs/current/leo_gateway/etc/leo_gateway.conf


 protocol = nfs 

En el servidor 172.26.9.184, ejecute rpcbind y leofs-gateway


 sudo service rpcbind start sudo service leofs-gateway restart 

En el servidor donde se ejecuta leo_manager, cree un depósito para NFS y genere una clave para conectarse a NFS


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

Conectarse a NFS


 sudo mkdir /mnt/leofs ## for Linux - "sudo mount -t nfs -o nolock <host>:/<bucket>/<token> <dir>" sudo mount -t nfs -o nolock ip--nfs-------gateway:/bucket/access_key_id/---gen-nfs-mnt-key /mnt/leofs sudo mount -t nfs -o nolock 172.26.9.184:/test/05236/bb5034f0c740148a346ed663ca0cf5157efb439f /mnt/leofs 

Ver espacio en disco a través de un cliente NFS


Espacio en disco teniendo en cuenta que cada nodo de almacenamiento tiene un disco de 40 GB (3 nodos en ejecución, 1 nodo conectado):


 df -hP Filesystem Size Used Avail Use% Mounted on 172.26.9.184:/test/05236/e7298032e78749149dd83a1e366afb328811c95b 60G 3.6G 57G 6% /mnt/leofs 

Instale LeoFS con 6 nodos de almacenamiento.


Inventario (sin constructor):
 # 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 

Salida de estado de Leofs-adm


Salida de estado de Leofs-adm
  [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 -------+----------------------+--------------+---------+----------------+----------------+---------------------------- 

Espacio en disco, teniendo en cuenta que cada nodo de almacenamiento tiene un disco de 40 GB (6 nodos en ejecución):


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

Si se usan 5 nodos de almacenamiento


 [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 

Registros


Los registros se encuentran en los directorios /usr/local/leofs/current/*/log


Si instala / configura Leofs manualmente, puede encontrar los siguientes errores.


[ERROR] Mnesia no está disponible

Iniciar el servicio systemctl iniciar leofs-manager-master


 leofs-adm status [ERROR] Mnesia is not available 

Necesito iniciar systemctl start leofs-manager-slave en leo_manager_1


Leofs-storage no se inicia.

Es necesario que leofs-manager-master y leofs-manager-slave y leofs-adm se ejecuten para mostrar el estado.


Nodos adjuntos menos de # de réplicas

Cuando inicia leofs-adm start, obtiene este error:


 leofs-adm start [ERROR] Attached nodes less than # of replicas 

No hay suficientes nodos de almacenamiento. El estado de leofs-adm le mostrará menos de 2 nodos de almacenamiento. Número mínimo requerido de nodos de almacenamiento 2.


el estado de leofs-adm se muestra adjunto, el resto se está ejecutando.

Necesidad de reequilibrar los nodos


 leofs-adm rebalance 

Después de iniciar leofs-gateway, no verá el nodo Gateway en estado leofs-adm

Necesito comenzar leofs-adm


 leofs-adm start 

no se pudo conectar con LeoFS Manager en el nodo Esclavo

(¡De forma predeterminada, leofs-adm no funciona en el nodo esclavo!] ( Https://leo-project.net/leofs/docs/issues/documentation-issues/ )


Prueba de carga


Las pruebas se realizan en 2 nodos con la configuración:


 CPU: Single Core Intel Core (Broadwell) (-MCP-) speed: 2295 MHz Kernel: 3.10.0-862.3.2.el7.x86_64 x86_64 Up: 1h 08m Mem: 1023.8/1999.6 MiB (51.2%) Storage: 10.00 GiB (43.5% used) Procs: 98 Shell: bash 4.2.46 inxi: 3.0.37 

Para probar, tome un disco pequeño
En ambos nodos vemos un disco de espacio libre de 9.4G y 5.9G.


 df -hP Filesystem Size Used Avail Use% Mounted on /dev/vda1 9.4G 5.9G 3.1G 66% / 

Canal de Telegram: SDS y Cluster FS

Source: https://habr.com/ru/post/478990/


All Articles