SeaweedFS Cluster installeren en configureren op Ubuntu 20.04

SeaweedFS is een open-source, eenvoudig, en zeer schaalbaar gedistribueerd bestandssysteem om miljarden bestanden snel op te slaan en te serveren. Het lijkt erg op andere bestandssystemen waaronder, Ceph, GlusterFS, en HDFS. Het kan gemakkelijk met de cloud geïntegreerd worden en zowel snelle toegangstijd als snelle toegangstijd bereiken zonder veranderingen aan de client-kant. Het heeft een rijke reeks functies waaronder, Automatische failover van master servers, Automatische TTL-verval van invoer, Parallelle verwerking, Grote en kleine bestanden verwerken, Lage latentie toegang tot elk bestand, en nog veel meer.

In deze zelfstudie laten we je zien hoe je het SeaweedFS cluster opzet op een Ubuntu 20.04 server.

Vereisten

  • Een server waarop Ubuntu 20.04 draait.
  • Een root wachtwoord is op de server ingesteld.

Aan de slag

Alvorens te beginnen is het aan te raden je systeempakketten bij te werken naar de laatste versie. Je kunt ze bijwerken met het volgende commando:

apt-get update -y

Als alle pakketten zijn bijgewerkt, moet je nog enkele andere vereiste afhankelijkheden in je server installeren. Je kunt ze allemaal installeren door het volgende commando uit te voeren:

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

Nadat je alle afhankelijkheden geïnstalleerd hebt, moet je ook Golang in je systeem installeren. Je kunt het installeren met het volgende commando:

apt-get install golang -y

Als de installatie voltooid is, kun je verder gaan met de volgende stap.

Installeer SeaweedFS

SeaweedFS is standaard niet beschikbaar in de Ubuntu 20.04 standaard repository. Je zult het dus vanaf de broncode moeten downloaden en compileren.

Download eerst de nieuwste versie van SeaweedFS uit de Git repository met het volgende commando:

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

Als de download voltooid is, verander je de directory in SeaweedFS en installeer je het met het volgende commando:

cd ~/seaweedfs
make install

Het bovenstaande commando installeert de binary van SeaweedFS in de map ~/go/bin/. Kopieer nu de geïnstalleerde binary naar de map /usr/loca/bin met het volgende commando:

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

Controleer vervolgens de geïnstalleerde versie van SeaweedFS met het volgende commando:

weed version

Je zou de volgende uitvoer moeten krijgen:

version 30GB 2.14 4211601e linux amd64

Als je klaar bent, kun je verder gaan met de volgende stap.

Maak een Systemd Service bestand voor Master

Eerst moet je een systemd dienstbestand aanmaken om de SeaweedFS dienst te beheren. Je kunt het aanmaken door het volgende commando uit te voeren:

nano /etc/systemd/system/seaweedmaster.service

Voeg de volgende regels toe:

[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

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de SeaweedFS dienst en zet hem aan om te starten bij het herstarten van het systeem met het volgende commando:

systemctl start seaweedmaster
systemctl enable seaweedmaster

Je kunt de status van SeaweedFS master controleren met het volgende commando:

systemctl status seaweedmaster

Je zou de volgende uitvoer moeten krijgen:

? 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>

Als je klaar bent, kun je verder gaan met de volgende stap.

Volume Servers aanmaken en starten

Op dit punt is de master server gestart en wacht op de volumes. Maak eerstetwee volumes aan met het volgende commando:

mkdir /mnt/{vol1,vol2}

Maak vervolgens een systemd service bestand om de Volume1 te beheren met het volgende commando:

nano /etc/systemd/system/seaweedvolume1.service

Voeg de volgende regels toe:

[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

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de Volume1 service en zet hem aan om te starten bij het herstarten van het systeem:

systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service

Je kunt de status van de Volume1 service verifiëren met het volgende commando:

systemctl status seaweedvolume1

Je zou de volgende uitvoer moeten krijgen:

? 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

Maak vervolgens een systemd service bestand voor Volume2 met het volgende commando:

nano /etc/systemd/system/seaweedvolume2.service

Voeg de volgende regels toe:

[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

Bewaar en sluit het bestand en herlaad dan de systemd daemon met het volgende commando:

systemctl daemon-reload

Start vervolgens de Volume2 service en zet hem aan om te starten bij het herstarten van het systeem:

systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service

Je kunt de status van de Volume2 service verifiëren met het volgende commando:

systemctl status seaweedvolume2

Je zou de volgende uitvoer moeten krijgen:

? 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

Als je klaar bent, kun je verder gaan met de volgende stap.

Schrijf een voorbeeldbestand naar de Volume

Eerst zul je een HTTP POST, PUT, of GET verzoek moeten sturen om een bestands-ID en de URL van de volumeserver te krijgen. Je kunt dat doen met het volgende commando:

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

Je zou het bestands-ID en de volumeserver URL in de volgende uitvoer moeten zien:

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

Voeg vervolgens een voorbeeldbestand met de naam file1.png aan het volume toe met het bestands-ID en de volume URL zoals hieronder getoond:

curl -F [email protected]/root/file1.png http://69.87.216.36:8080/7,016bad1bc0

Je zou de volgende uitvoer moeten krijgen:

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

Als je bestand op het volume geüpload is, kun je het lezen met het volgende commando:

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

Je zou de volgende uitvoer moeten krijgen:

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

Als je klaar bent, kun je verder gaan met de volgende stap.

Toegang tot SeaweedFS

Je kunt nu SeaweedFS benaderen met de URL http://your-server-ip:8080/7,016bad1bc0 om het bestand te bekijken dat je in SeaweedFS object store hebt opgeslagen:

Zeewier FS Schema

Je ziet je bestand dat je eerder geüpload hebt in het bovenstaande scherm.

Conclusie

Gefeliciteerd! Je hebt met succes het SeaweedFS cluster op Ubuntu 20.04 server geïnstalleerd en ingesteld. Bezoek voor meer informatie de SeaweedFS documentatie pagina. Voel je vrij me te vragen als je vragen hebt.