Cómo instalar y configurar el clúster SeaweedFS en Ubuntu 20.04

SeaweedFS es un sistema de archivos distribuido de código abierto, sencillo y altamente escalable para almacenar y servir miles de millones de archivos con rapidez. Es muy similar a otros sistemas de archivos, como Ceph, GlusterFS y HDFS. Puede integrarse fácilmente con la nube y conseguir un tiempo de acceso rápido sin ningún cambio en el lado del cliente. Tiene un rico conjunto de características, entre las que se incluyen, la conmutación por error automática de los servidores maestros, la expiración automática del TTL de entrada, el procesamiento paralelo, el manejo de archivos grandes y pequeños, el acceso de baja latencia a cualquier archivo, y muchas más.

En este tutorial, te mostraremos cómo configurar el clúster SeaweedFS en un servidor Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Una contraseña de root configurada en el servidor.

Cómo empezar

Antes de empezar, se recomienda actualizar los paquetes del sistema a la última versión. Puedes actualizarlos con el siguiente comando:

apt-get update -y

Una vez actualizados todos los paquetes, necesitarás instalar algunas otras dependencias necesarias en tu servidor. Puedes instalarlas todas ejecutando el siguiente comando:

apt-get install build-essential autoconf automake gdb git libffi-dev zlib1g-dev libssl-dev unzip -y

Después de instalar todas las dependencias, también necesitas instalar Golang en tu sistema. Puedes instalarlo con el siguiente comando:

apt-get install golang -y

Una vez completada la instalación, puedes pasar al siguiente paso.

Instalar SeaweedFS

Por defecto, SeaweedFS no está disponible en el repositorio por defecto de Ubuntu 20.04. Así que tendrás que descargarlo y compilarlo desde el código fuente.

Primero, descarga la última versión de SeaweedFS desde el repositorio Git utilizando el siguiente comando:

git clone https://github.com/chrislusf/seaweedfs.git

Una vez completada la descarga, cambia el directorio a SeaweedFS e instálalo con el siguiente comando:

cd ~/seaweedfs
make install

El comando anterior instalará el binario de SeaweedFS dentro del directorio ~/go/bin/. Ahora, copia el binario instalado en el directorio /usr/loca/bin con el siguiente comando:

cp ~/go/bin/weed /usr/local/bin/

A continuación, verifica la versión instalada de SeaweedFS con el siguiente comando:

weed version

Deberías obtener la siguiente salida:

version 30GB 2.14 4211601e linux amd64

Una vez que hayas terminado, puedes pasar al siguiente paso.

Crear un archivo de servicio Systemd para el Maestro

En primer lugar, tendrás que crear un archivo de servicio systemd para gestionar el servicio SeaweedFS. Puedes crearlo ejecutando el siguiente comando:

nano /etc/systemd/system/seaweedmaster.service

Añade las siguientes líneas:

[Unit]
Description=SeaweedFS Master
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed master
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-master

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y luego recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio SeaweedFS y permite que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start seaweedmaster
systemctl enable seaweedmaster

Puedes verificar el estado del maestro SeaweedFS con el siguiente comando:

systemctl status seaweedmaster

Deberías obtener la siguiente salida:

? seaweedmaster.service - SeaweedFS Master
     Loaded: loaded (/etc/systemd/system/seaweedmaster.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:30:06 UTC; 3s ago
   Main PID: 25740 (weed)
      Tasks: 10 (limit: 4691)
     Memory: 8.0M
     CGroup: /system.slice/seaweedmaster.service
             ??25740 /usr/local/bin/weed master

Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:107] Volume Size Limit is 30000 MB
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:192] adminScripts:
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master.go:122] Start Seaweed Master 30GB 2.14 4211601e at 0.0.0.0:9333
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 raft_server.go:70] Starting RaftServer with 69.87.216.36:9333
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 raft_server.go:129] current cluster leader:
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master.go:146] Start Seaweed Master 30GB 2.14 4211601e grpc server at>
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 masterclient.go:78] No existing leader found!
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 raft_server.go:154] Initializing new cluster
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 master_server.go:141] leader change event:  => 69.87.216.36:9333
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 master_server.go:143] [ 69.87.216.36:9333 ] 69.87.216.36:9333 becomes>

Una vez que hayas terminado, puedes pasar al siguiente paso.

Crear e iniciar servidores de volumen

En este punto, el servidor maestro está iniciado y esperando los volúmenes. En primer lugar, crea un directorio de volúmenes con el siguiente comando:

mkdir /mnt/{vol1,vol2}

A continuación, crea un archivo de servicio systemd para gestionar el Volumen1 con el siguiente comando:

nano /etc/systemd/system/seaweedvolume1.service

Añade las siguientes líneas:

[Unit]
Description=SeaweedFS Volume
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol1" -max=10 -mserver="69.87.216.36:9333" -port=8081
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y luego recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio del Volumen1 y habilítalo para que se inicie al reiniciar el sistema:

systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service

Puedes verificar el estado del servicio Volume1 con el siguiente comando:

systemctl status seaweedvolume1

Deberías obtener la siguiente salida:

? seaweedvolume1.service - SeaweedFS Volume
     Loaded: loaded (/etc/systemd/system/seaweedvolume1.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:31:14 UTC; 4s ago
   Main PID: 25870 (weed)
      Tasks: 9 (limit: 4691)
     Memory: 7.3M
     CGroup: /system.slice/seaweedvolume1.service
             ??25870 /usr/local/bin/weed volume -dir=/mnt/vol1 -max=10 -mserver=69.87.216.36:9333 -port=8081

Dec 09 08:31:14 ubuntu2004 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 file_util.go:23] Folder /mnt/vol1 Permission: -rwxr-xr-x
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 disk_location.go:154] Store started on dir: /mnt/vol1 with 0 volumes >
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 disk_location.go:157] Store started on dir: /mnt/vol1 with 0 ec shards
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume_grpc_client_to_master.go:52] Volume server start with seed mas>
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume.go:334] Start Seaweed volume server 30GB 2.14 4211601e at 0.0.>
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

A continuación, crea un archivo de servicio systemd para el Volumen2 con el siguiente comando:

nano /etc/systemd/system/seaweedvolume2.service

Añade las siguientes líneas:

[Unit]
Description=SeaweedFS Volume
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol2" -max=5  -mserver="69.87.216.36:9333" -port=8080
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume2

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y luego vuelve a cargar el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio de Volume2 y habilítalo para que se inicie al reiniciar el sistema:

systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service

Puedes verificar el estado del servicio Volume2 con el siguiente comando:

systemctl status seaweedvolume2

Deberías obtener la siguiente salida:

? seaweedvolume2.service - SeaweedFS Volume
     Loaded: loaded (/etc/systemd/system/seaweedvolume2.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:32:03 UTC; 4s ago
   Main PID: 25921 (weed)
      Tasks: 10 (limit: 4691)
     Memory: 7.7M
     CGroup: /system.slice/seaweedvolume2.service
             ??25921 /usr/local/bin/weed volume -dir=/mnt/vol2 -max=5 -mserver=69.87.216.36:9333 -port=8080

Dec 09 08:32:03 ubuntu2004 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 file_util.go:23] Folder /mnt/vol2 Permission: -rwxr-xr-x
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 disk_location.go:154] Store started on dir: /mnt/vol2 with 0 volumes>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 disk_location.go:157] Store started on dir: /mnt/vol2 with 0 ec shar>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume.go:334] Start Seaweed volume server 30GB 2.14 4211601e at 0.0>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume_grpc_client_to_master.go:52] Volume server start with seed ma>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

Una vez que hayas terminado, puedes pasar al siguiente paso.

Escribir un archivo de muestra en el volumen

En primer lugar, tendrás que enviar una petición HTTP POST, PUT o GET para obtener el ID del archivo y la URL del servidor del volumen. Puedes hacerlo con el siguiente comando:

curl http://localhost:9333/dir/assign

Deberías ver el ID del archivo y la URL del servidor de volumen en la siguiente salida:

{"fid":"7,016bad1bc0","url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080","count":1}

A continuación, añade un archivo de muestra llamado archivo1.png al volumen utilizando el ID de archivo y la URL del volumen como se muestra a continuación:

curl -F file=@/root/file1.png http://69.87.216.36:8080/7,016bad1bc0

Deberías obtener la siguiente salida:

{"name":"file1.png","size":74912,"eTag":"7a6511cbeda98ca00346544ca2968046"}

Una vez que tengas el archivo cargado en el volumen, puedes leerlo con el siguiente comando:

curl http://69.87.216.36:9333/dir/lookup?volumeId=7

Deberías obtener la siguiente salida:

{"volumeId":"7","locations":[{"url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080"}]}

Una vez que hayas terminado, puedes pasar al siguiente paso.

Acceder a SeaweedFS

Ahora puedes acceder a SeaweedFS utilizando la URL http://your-server-ip:8080/7,016bad1bc0 para ver el archivo que has almacenado en el almacén de objetos SeaweedFS:

Esquema FS de algas marinas

Puedes ver el archivo que has subido antes en la pantalla anterior.

Conclusión

Enhorabuena! has instalado y configurado con éxito el cluster SeaweedFS en el servidor Ubuntu 20.04. Para más información, visita la página de documentación deSeaweedFS. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...