Кластер SeaweedFS

В статье рассматривается пример установки SeaweedFS в качестве объектного хранилища S3 для программного комплекса ELMA365.

Перед установкой ознакомьтесь с информацией:

Топология и репликация в SeaweedFS

Рекомендуемой топологией SeaweedFS для ELMA365 является распределённая (distributed) конфигурация. С помощью настроек репликации вы можете определить, сколько копий ваших данных будут храниться и где именно.

Для этого при конфигурации серверов кластера используйте параметр репликации, задавая его в формате XYZ. Где:

  • X — количество дополнительных копий в разных дата‑центрах (DC);
  • Y — количество дополнительных копий в разных стойках (rack);
  • Z — количество дополнительных копий в одной стойке.

Общее количество копий = одна основная + сумма всех цифр, указанных в параметре репликации. С примерами этого параметра можно ознакомиться в таблице.

Параметр

Всего копий

Где хранится

000

1

Одна основная копия (volume) без репликации

001

2

Две копии в одной стойке

010

2

Две копии в разных стойках одного дата-центра

020

3

Три копии в разных стойках одного дата-центра

100

2

Две копии в разных дата-центрах

Рассмотрим подробнее несколько примеров параметра репликации:

 

  1. replication=001:
  • всего — две копии (основная + 1);
  • хранятся в одной стойке;
  • если у вас три виртуальные машины, такая репликация не гарантирует, что каждая виртуальная машина получит свою копию.
  1. replication=002:
  • всего — три копии (основная + 2);
  • хранятся в одной стойке;
  • при наличии трёх виртуальных машин на каждой будет одна копия.
  1. replication=020:
  • всего — три копии (основная + 2);
  • хранятся в трёх разных стойках (rack1, rack2, rack3);
  • при наличии трёх виртуальных машин на каждой из них есть одна копия;
  • ограничение: при выходе из строя одной из трёх стоек кластер прекращает работу.

 

Подробнее о репликации читайте в официальной документации SeaweedFS.

 

Установка SeaweedFS

 

Состоит из нескольких этапов:

  1. Подготовка серверов.
  2. Установка Docker и Docker Compose.
  3. Установка SeaweedFS.
  4. Настройка включения TLS/SSL в SeaweedFS.
  5. Установка MC Client.
  6. Запуск сервиса SeaweedFS.
  7. Настройка подключения к SeaweedFS.
  8. Создание бакетов.
  9. Конфигурация HAproxy.
  10. Подключение к SeaweedFS.

Шаг 1. Подготовка серверов

Создайте три сервера (ноды) с последовательно пронумерованными именами хостов, например:

  • seaweedfs-server1.your_domain;
  • seaweedfs-server2.your_domain;
  • seaweedfs-server3.your_domain.

Шаг 2. Установка Docker и Docker Compose

На созданных серверах установите:

Шаг 3. Установка SeaweedFS

  1. Создайте каталог для монтирования диска на всех серверах:

mkdir -p /opt/seaweedfs/data/{master,volume,filer}

  1. Создайте файл /opt/seaweedfs/s3.json на всех серверах:

{
 "identities": [
   {
     "name": "admin",
     "credentials": [
       {
         "accessKey": "elma365user",
         "secretKey": "SecretPassword"
       }
     ],
     "actions": ["Admin", "Read", "Write"]
   }
 ]
}

 

  1. По умолчанию в SeaweedFS используется база данных LevelDB. Она поддерживает несколько реплик файлового сервера, которые будут автоматически синхронизироваться с некоторыми ограничениями. Подробнее читайте в официальной документации SeaweedFS.
     
    При наличии ограничений или при большом количестве реплик файлового сервера рекомендуем использовать внешнее хранилище данных, например PostgreSQL или MySQL.
     
    Рассмотрим, как настроить такое внешнее хранилище в PostgreSQL. Создайте базу данных в PostgreSQL и свяжите конфигурацию с компонентом filer: /opt/seaweedfs/filer.toml. Пример:

#/etc/seaweedfs/filer.toml
[leveldb2]
enabled = false
[postgres2]
enabled = true
createTable = """
 CREATE TABLE IF NOT EXISTS "%s" (
   dirhash   BIGINT,
   name      VARCHAR(65535),
   directory VARCHAR(65535),
   meta      bytea,
   PRIMARY KEY (dirhash, name)
 )
"""
hostname = "hostname"
port = 5432
username = "username"
password = "password"
database = "database"
scheme = "scheme"
sslmode = "disable"

 

  1. Создайте файл docker-compose.yml на всех серверах.

Пример конфигураций для первого сервера

 

Пример конфигураций для второго сервера

 

Пример конфигураций для третьего сервера

 

Шаг 4. Настройка включения TLS/SSL в SeaweedFS

Для включения поддержки TLS/SSL в SeaweedFS на каждом сервере:

  1. Сохраните файл сертификата и файл закрытого ключа в каталоге /opt/seaweedfs/ssl.
  2. Переименуйте файл сертификата сервера в cert.pem.
  3. Переименуйте файл закрытого ключа в key.pem.
  4. При использовании самоподписанных сертификатов сохраните файл корневого CA в каталоге /opt/seaweedfs/certs.
  5. Подготовьте файл настроек безопасности security.toml:

[jwt.signing]
key = "MASTERVOLUMESECRET"
[jwt.filer_signing]
key = "FILERSECRET"
[grpc]
ca = "/etc/seaweedfs/certs/ca.pem"
[grpc.master]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
[grpc.volume]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
[grpc.filer]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
[grpc.client]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
[https.client]
enabled = true
ca = "/etc/seaweedfs/certs/ca.pem"
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
[https.volume]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
ca = "/etc/seaweedfs/certs/ca.pem"
[https.master]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
ca = "/etc/seaweedfs/certs/ca.pem"
[https.filer]
cert = "/etc/seaweedfs/certs/cert.pem"
key = "/etc/seaweedfs/certs/key.pem"
ca = "/etc/seaweedfs/certs/ca.pem"

 

Пример конфигураций для первого сервера c TLS

 

Пример конфигураций для второго сервера c TLS

 

Пример конфигураций для третьего сервера c TLS

 

Шаг 5. Установка MC Client

Загрузите последний стабильный binary файл SeaweedFS Client и установите его в систему:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mс
sudo mv mc /usr/local/bin/

Шаг 6. Запуск сервиса SeaweedFS

Запустите манифест:

docker-compose -f docker-compose.yml up -d

Шаг 7. Настройка подключения к SeaweedFS

Создайте алиас для SeaweedFS:

/usr/local/bin/mc alias set seaweedfs http://seaweedfs.your_domain:8333 elma365user SecretPassword

Шаг 8. Создание бакетов

Важно: наименование бакетов в S3 должно соответствовать формату s3elma365*. Для примера в статье используется имя бакета s3elma365, пользователь elma365user и пароль SecretPassword. При настройке задайте эти данные согласно политике безопасности, принятой в вашей организации.

Примеры наименований для бакетов: s3elma365; s3elma365-dev; s3elma365-prod.

Для работы ELMA365 создайте бакет c наименованием s3elma365, используя команду:

/usr/local/bin/mc mb -p seaweedfs/s3elma365 --region=ru-central-1

Создание в S3 бакетов для работы ELMA Bot

 

Шаг 9. Конфигурация HAproxy

В рамках статьи пользовательский трафик приходит в HAproxy по подключению seaweedfs.your_domain:8333 и равномерно балансируется между серверами кластера SeaweedFS. Для этого выполните настройки согласно статье «Конфигурация HAProxy для S3».

Шаг 10. Подключение к SeaweedFS

Параметры для подключения к SeaweedFS:

  • address — seaweedfs.your_domain:8333;
  • bucket — s3elma365;
  • region — ru-central-1;
  • access key ID — elma365user;
  • secret access key — SecretPassword;
  • upload method — PUT;
  • enable SSL — No.

Если SeaweedFS ожидает подключения с использованием TLS/SSL, укажите:

  • в параметре enable SSL — значение Yes;
  • в параметр address — порт подключения seaweedfs.your_domain:8334.