Поиск по сайту:

Как установить и настроить кластер SeaweedFS в Ubuntu 20.04


На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установить SeaweedFS
  4. Создание служебного файла Systemd для мастера
  5. Создание и запуск серверов томов
  6. Запись образца файла на том
  7. Доступ к SeaweedFS
  8. Заключение

SeaweedFS — это простая и масштабируемая распределенная файловая система с открытым исходным кодом для быстрого хранения и обслуживания миллиардов файлов. Он очень похож на другие файловые системы, включая Ceph, GlusterFS и HDFS. Его можно легко интегрировать с облаком и обеспечить быстрое время доступа без каких-либо изменений на стороне клиента. Он имеет богатый набор функций, включая автоматическое переключение главных серверов при сбое, автоматическое истечение TTL входа, параллельную обработку, обработку больших и малых файлов, доступ к любому файлу с малой задержкой и многое другое.

В этом руководстве мы покажем вам, как настроить кластер SeaweedFS на сервере Ubuntu 20.04.

Предпосылки

  • Сервер с Ubuntu 20.04.
  • На сервере настроен пароль root.

Начиная

Перед запуском рекомендуется обновить системные пакеты до последней версии. Вы можете обновить их с помощью следующей команды:

apt-get update -y

После того, как все пакеты будут обновлены, вам нужно будет установить некоторые другие необходимые зависимости на вашем сервере. Вы можете установить их все, выполнив следующую команду:

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

После установки всех зависимостей вам также необходимо установить Golang в вашей системе. Вы можете установить его с помощью следующей команды:

apt-get install golang -y

После завершения установки можно переходить к следующему шагу.

Установить SeaweedFS

По умолчанию SeaweedFS недоступен в стандартном репозитории Ubuntu 20.04. Поэтому вам нужно будет скачать и скомпилировать его из исходников.

Сначала загрузите последнюю версию SeaweedFS из репозитория Git с помощью следующей команды:

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

После завершения загрузки измените каталог на SeaweedFS и установите его с помощью следующей команды:

cd ~/seaweedfs
make install

Приведенная выше команда установит двоичный файл SeaweedFS в каталог ~/go/bin/. Теперь скопируйте установленный двоичный файл в каталог /usr/loca/bin с помощью следующей команды:

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

Затем проверьте установленную версию SeaweedFS с помощью следующей команды:

weed version

Вы должны получить следующий результат:

version 30GB 2.14 4211601e linux amd64

Как только вы закончите, вы можете перейти к следующему шагу.

Создайте служебный файл Systemd для мастера

Во-первых, вам нужно будет создать файл службы systemd для управления службой SeaweedFS. Вы можете создать его, выполнив следующую команду:

nano /etc/systemd/system/seaweedmaster.service

Добавьте следующие строки:

[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

Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:

systemctl daemon-reload

Затем запустите службу SeaweedFS и включите ее запуск при перезагрузке системы с помощью следующей команды:

systemctl start seaweedmaster
systemctl enable seaweedmaster

Вы можете проверить статус мастера SeaweedFS с помощью следующей команды:

systemctl status seaweedmaster

Вы должны получить следующий результат:

? 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 ubunt4 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:107] Volume Size Limit is 30000 MB
Dec 09 08:30:06 ubunt4 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:192] adminScripts:
Dec 09 08:30:06 ubunt4 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 ubunt4 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 ubunt4 seaweedfs-master[25740]: I1209 08:30:06 25740 raft_server.go:129] current cluster leader:
Dec 09 08:30:06 ubunt4 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 ubunt4 seaweedfs-master[25740]: I1209 08:30:08 25740 masterclient.go:78] No existing leader found!
Dec 09 08:30:08 ubunt4 seaweedfs-master[25740]: I1209 08:30:08 25740 raft_server.go:154] Initializing new cluster
Dec 09 08:30:08 ubunt4 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 ubunt4 seaweedfs-master[25740]: I1209 08:30:08 25740 master_server.go:143] [ 69.87.216.36:9333 ] 69.87.216.36:9333 becomes>

Как только вы закончите, вы можете перейти к следующему шагу.

Создание и запуск серверов томов

В этот момент главный сервер запущен и ожидает тома. Сначала создайте двухтомный каталог с помощью следующей команды:

mkdir /mnt/{vol1,vol2}

Затем создайте служебный файл systemd для управления Volume1 с помощью следующей команды:

nano /etc/systemd/system/seaweedvolume1.service

Добавьте следующие строки:

[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

Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:

systemctl daemon-reload

Затем запустите службу Volume1 и включите ее запуск при перезагрузке системы:

systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service

Вы можете проверить статус службы Volume1 с помощью следующей команды:

systemctl status seaweedvolume1

Вы должны получить следующий вывод:

? 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 ubunt4 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:31:14 ubunt4 seaweedfs-volume[25870]: I1209 08:31:14 25870 file_util.go:23] Folder /mnt/vol1 Permission: -rwxr-xr-x
Dec 09 08:31:14 ubunt4 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 ubunt4 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 ubunt4 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 ubunt4 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 ubunt4 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

Затем создайте служебный файл systemd для Volume2 с помощью следующей команды:

nano /etc/systemd/system/seaweedvolume2.service

Добавьте следующие строки:

[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

Сохраните и закройте файл, затем перезагрузите демон systemd с помощью следующей команды:

systemctl daemon-reload

Затем запустите службу Volume2 и включите ее запуск при перезагрузке системы:

systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service

Вы можете проверить статус службы Volume2 с помощью следующей команды:

systemctl status seaweedvolume2

Вы должны получить следующий результат:

? 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 ubunt4 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:32:03 ubunt4 seaweedfs-volume2[25921]: I1209 08:32:03 25921 file_util.go:23] Folder /mnt/vol2 Permission: -rwxr-xr-x
Dec 09 08:32:03 ubunt4 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 ubunt4 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 ubunt4 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 ubunt4 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 ubunt4 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

Как только вы закончите, вы можете перейти к следующему шагу.

Запишите образец файла на том

Во-первых, вам нужно будет отправить HTTP-запрос POST, PUT или GET, чтобы получить идентификатор файла и URL-адрес сервера тома. Вы можете сделать это с помощью следующей команды:

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

Вы должны увидеть идентификатор файла и URL-адрес сервера тома в следующем выводе:

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

Затем добавьте образец файла с именем file1.png в том, используя идентификатор файла и URL-адрес тома, как показано ниже:

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

Вы должны получить следующий результат:

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

После того, как вы загрузили файл на том, вы можете прочитать его с помощью следующей команды:

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

Вы должны получить следующий результат:

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

Как только вы закончите, вы можете перейти к следующему шагу.

Доступ к SeaweedFS

Теперь вы можете получить доступ к SeaweedFS, используя URL-адрес http://your-server-ip:8080/7,016bad1bc0, чтобы просмотреть файл, который вы сохранили в хранилище объектов SeaweedFS:

Вы можете увидеть свой файл, который вы загрузили ранее, на экране выше.

Заключение

Поздравляем! вы успешно установили и настроили кластер SeaweedFS на сервере Ubuntu 20.04. Для получения дополнительной информации посетите страницу документации SeaweedFS. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.