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