Не буду вдаваться в описание что это такое и как с ним работать, возможно в другой статье. В этой статье покажу как поднять в кластере SeaWeedFS, с помощью которого уже и сделаем свое облачное хранилище.
Для кластера нам понадобится 9 хостов (это самый начальный кластер). Хост не обязательно отдельная тачка, это может быть LXD контейнер на железке, но как минимум должно быть 3 разных железки, иначе смысл кластера пропадает. НО! Все действия из статьи будут выполняться на одной тачке, поднимем по одной копии каждого сервиса заместо трех, дальше по аналогии уже поднимете сколько вам нужно.
Ссылки
Офф. репозиторий — https://github.com/chrislusf/seaweedfs/
Офф. документация (есть ссылка из репы) — https://github.com/chrislusf/seaweedfs/wiki
Как оно работает?
Все как обычно:
- у нас есть master — отвечает за подключение всего ко всему, т.е все кластеризируется с помощью мастеров, все диски и другие плюшки подключаются и работают так же через мастеров. Мастеров в кластере может быть только нечетное количество (т.е. два или четыре мастера не можем завести в кластер, сам сиавидфс этого не даст сделать)
- дальше главным компонентов является сам сторадж — volume. Все волюмы подключаются к мастерам. Волюмы можно делить / объединять с помощью датацентров / реков. При создании волюма указывается папка на жестком диске, куда складываются сжатые файлы (не в чистом виде)
- поверх всего можно поставить filer — через который проще всего управлять файлами в кластере SeaWeedFS. Filer кластеризуется с помощью, например, баз данных — mysql / redis / postresql / cassandra / etcd и др.
У каждого компонента есть API, через которое можно просматривать ту или иную информацию о кластере / данных. Вся подробная информация о загруженных файлах хранится в API Filer’a.
Как настроить?
Настройка не сложная, все бинарники запускаются с параметрами. Главными параметрами является указание папки на жестком диске и перечень мастеров. Ниже приведены настройки для master / volume / filer.
/etc/systemd/system/swfs-master.service
[Unit]
Description=weed master server of cluster
[Service]
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/weed master -mdir="/opt/seaweedfs"
-ip="IP_ADDRESS"
-port=9333
-peers=IP_ADDRESS:PORT (через запятую перечень всех мастеров)
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
/etc/systemd/systemc/swfs-volume.service
[Unit]
Description=weed volume server of cluster
[Service]
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/weed volume -dir=/opt/seaweedfs -mserver=MASTER_IP_ADDRESS_OR_DNS:PORT -dataCenter="stage"
-rack="rack2"
-port=8080
-max=100
-ip="LOCAL_IP_ADDRESS"
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
/etc/systemd/system/swfs-filer.service
[Unit]
Description=weed filer server of cluster
[Service]
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/weed filer -dataCenter="stage"
-ip="LOCAL_IP_ADDRESS"
-master=MASTER_IP_ADDRESS_OR_DNS:PORT -defaultReplicaPlacement=010
Restart=always
RestartSec=5s
[Install]
WantedBy=multi-user.target
Как уже писал выше — вся работа всех компонентов осуществляется через master. Следовательно главным параметров является указание перечня мастеров(указываются через запятую). Указывается ИП_АДРЕС:ПОРТ мастера.
Репликация
Глядя на таблички ниже можно понять, что репликация очень гибкая, можно настроить как угодно между ДЦ / Рек, а совсем для параноиков можно сделать по несколько копий файлов в одном ДЦ / Рек.
Value | Meaning |
---|---|
Value | Meaning |
000 | no replication, just one copy |
001 | replicate once on the same rack |
010 | replicate once on a different rack in the same data center |
100 | replicate once on a different data center |
200 | replicate twice on two other different data center |
110 | replicate once on a different rack, and once on a different data center |
… | … |
So if the replication type is xyz
Column | Meaning |
---|---|
x | number of replica in other data centers |
y | number of replica in other racks in the same data center |
z | number of replica in other servers in the same rack |
x,y,z each can be 0, 1, or 2. So there are 9 possible replication types, and can be easily extended. Each replication type will physically create x+y+z+1 copies of volume data files.
Кластеризация Filer
Filer содержит метаданные о расположении файлов на волюмах. Через Filer’s API можно заливать / забирать файлы, смотреть всю информацию по файлам и всю файловую структуру, которая находится на volume. Следовательно если мы имеем один filer, то при выходе из строя диска, где стоял этот filer, мы сталкиваемся с проблемой потери всех метаданных. Т.е файлы на volume остались, а обратиться через filer мы не можем, т.к в новом filer не будет данных. Чтобы избежать данной проблемы, к filer подключается одна из баз данных (mysql / redis / postresql / cassandra / etcd и др), в которую filer записывает метаданные по файлам. Настраивается все очень легко: нужно поднять базу данных (а точнее лучше сразу кластер, чтобы было прям совсем наверняка и не потерять данные) и внести пару строк в файл конфигурации.
Файл конфигурации для filer — /etc/seaweedfs/filer.toml
[etcd]
enabled = true
servers = "localhost:2379"
timeout = "3s"
Я поднял кластер хранилища Etcd, которое подключил к Filer. После чего просто перезапускаем filer и радуемся
systemctl restart swfs-filer
Каждая нода Etcd находится на тачке с Filer. Настройку кластера Etcd можно найти в интернете или ждите статьи =)
Отправить ответ