SeaweedFS es un sistema de archivos distribuido de código abierto, simple y altamente escalable para almacenar y servir miles de millones de archivos rápidamente. Es muy similar a otros sistemas de archivos, incluidos Ceph, GlusterFS y HDFS. Se puede integrar fácilmente con la nube y lograr un tiempo de acceso rápido sin cambios en el lado del cliente. Tiene un amplio conjunto de características que incluyen, conmutación por error automática de servidores maestros, caducidad TTL de entrada automática, procesamiento paralelo, manejo de archivos grandes y pequeños, acceso de baja latencia a cualquier archivo y mucho más.
En este tutorial, le mostraremos cómo configurar el clúster SeaweedFS en el servidor Ubuntu 20.04.
Requisitos
- Un servidor que ejecuta el servidor Ubuntu 20.04.
- Se configura una contraseña raíz en el servidor.
Cómo empezar
Antes de comenzar, se recomienda actualizar los paquetes de su sistema a la última versión. Puede actualizarlos con el siguiente comando:
apt-get update -y
Una vez que todos los paquetes estén actualizados, deberá instalar algunas otras dependencias requeridas en su servidor. Puede instalarlos todos 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 debe instalar Golang en su sistema. Puede instalarlo con el siguiente comando:
apt-get install golang -y
Una vez completada la instalación, puede continuar con el siguiente paso.
Instalar SeaweedFS
De forma predeterminada, SeaweedFS no está disponible en el repositorio predeterminado de Ubuntu 20.04. Por lo tanto, deberá descargarlo y compilarlo desde la fuente.
Primero, descargue la última versión de SeaweedFS del repositorio Git usando el siguiente comando:
git clone https://github.com/chrislusf/seaweedfs.git
Una vez que se complete la descarga, cambie el directorio a SeaweedFS e instálelo con el siguiente comando:
cd ~/seaweedfs
make install
El comando anterior instalará el binario SeaweedFS dentro del directorio ~/go/bin/. Ahora, copie el binario instalado en el directorio /usr/loca/bin con el siguiente comando:
cp ~/go/bin/weed /usr/local/bin/
A continuación, verifique la versión instalada de SeaweedFS con el siguiente comando:
weed version
Deberías obtener el siguiente resultado:
version 30GB 2.14 4211601e linux amd64
Una vez que haya terminado, puede continuar con el siguiente paso.
Crear un archivo de servicio Systemd para Master
Primero, deberá crear un archivo de servicio systemd para administrar el servicio SeaweedFS. Puede crearlo ejecutando el siguiente comando:
nano /etc/systemd/system/seaweedmaster.service
Agregue 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
Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicie el servicio SeaweedFS y habilítelo para que se inicie al reiniciar el sistema con el siguiente comando:
systemctl start seaweedmaster
systemctl enable seaweedmaster
Puede verificar el estado del maestro SeaweedFS con el siguiente comando:
systemctl status seaweedmaster
Deberías obtener el siguiente resultado:
? 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 haya terminado, puede continuar con el siguiente paso.
Crear e iniciar servidores de volumen
En este punto, el servidor maestro se inicia y espera los volúmenes. Primero, cree un directorio de dos volúmenes con el siguiente comando:
mkdir /mnt/{vol1,vol2}
A continuación, cree un archivo de servicio systemd para administrar el Volumen 1 con el siguiente comando:
nano /etc/systemd/system/seaweedvolume1.service
Agregue 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
Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicie el servicio Volume1 y habilítelo para que se inicie al reiniciar el sistema:
systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service
Puede verificar el estado del servicio del Volumen 1 con el siguiente comando:
systemctl status seaweedvolume1
Deberías obtener el siguiente resultado:
? 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, cree un archivo de servicio systemd para el Volumen 2 con el siguiente comando:
nano /etc/systemd/system/seaweedvolume2.service
Agregue 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
Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:
systemctl daemon-reload
A continuación, inicie el servicio Volume2 y habilítelo para que se inicie al reiniciar el sistema:
systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service
Puede verificar el estado del servicio Volume2 con el siguiente comando:
systemctl status seaweedvolume2
Deberías obtener el siguiente resultado:
? 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 haya terminado, puede continuar con el siguiente paso.
Escribir un archivo de muestra en el volumen
Primero, deberá enviar una solicitud HTTP POST, PUT o GET para obtener una ID de archivo y una URL del servidor de volumen. Puedes hacerlo con el siguiente comando:
curl http://localhost:9333/dir/assign
Debería ver el ID de archivo y la URL del servidor de volumen en el siguiente resultado:
{"fid":"7,016bad1bc0","url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080","count":1}
A continuación, agregue un archivo de muestra llamado file1.png al volumen utilizando el ID de archivo y la URL del volumen como se muestra a continuación:
curl -F [email protected]/root/file1.png http://69.87.216.36:8080/7,016bad1bc0
Deberías obtener el siguiente resultado:
{"name":"file1.png","size":74912,"eTag":"7a6511cbeda98ca00346544ca2968046"}
Una vez que haya cargado el archivo en el volumen, puede leerlo con el siguiente comando:
curl http://69.87.216.36:9333/dir/lookup?volumeId=7
Deberías obtener el siguiente resultado:
{"volumeId":"7","locations":[{"url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080"}]}
Una vez que haya terminado, puede continuar con el siguiente paso.
Acceder a SeaweedFS
Ahora puede acceder a SeaweedFS usando la URL http://your-server-ip:8080/7,016bad1bc0 para ver el archivo que almacenó en el almacén de objetos de SeaweedFS:
Puede ver el archivo que cargó anteriormente en la pantalla anterior.
Conclusión
¡Felicidades! Ha instalado y configurado con éxito el clúster SeaweedFS en el servidor Ubuntu 20.04. Para obtener más información, visite la página de documentación de SeaweedFS. Siéntase libre de preguntarme si tiene alguna pregunta.