Как печатать со смартфона или планшета

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

С помощью GlusterFS можно создать масштабированный, виртуальный пул, приспособленный для работы RAID через сеть интернет. с различными методами объединения пространства. В дополнение здесь есть возможности, которых нет в аппаратных решениях. В этой статье мы рассмотрим как выполняется настройка GlusterFS в Ubuntu и на что способна эта файловая система.

Как работает GlusterFS

GlusterFS создает общий пул для хранения данных на основе нескольких сетевых устройств. Все это объединяется общим пространством имен, к которому есть доступ у всех пользователей. В качестве пользователей могут выступать как локальные программы, так и облачные сервисы.

В отличие от других подобных программных продуктов для GlusterFS не обязательно иметь отдельный сервер с метаданными для поиска файлов в пуле. Все файлы идентифицируются по хэшу и становятся очень просто доступными.

Настройка GlusterFS

Файловая система реализована в пространстве пользователя и для доступа к реальной файловой системе используется Fuse. Это позволяет работать с файловой системой более просто и прозрачно. Хотя существует библиотека libgfapi, которая дает прямой доступ к жесткому диску, позволяет более эффективно хранить образы виртуальных машин qemu.

Как уже говорилось GlusterFS позволяет объединять несколько сетевых устройств в одну файловую систему. Они могут связываться между собой с помощью TCP/IP или InfiniBand. Общее хранилище будет доступно с помощью клиента GlusterFS, по NFS или Samba.

При зеркалировании данных элементарной единицей считается один файл, а при разделении, отдельные части файла разделяются между системами. Этот подход хорошо масштабируется при использовании больших систем, и чем больше систем, тем выше производительность. Вы можете создавать несколько копий файла и использовать разделение одновременно. Баланс между зеркалированием и разделением важен для максимальной производительности и безопасности данных.

Объем GlusterFS очень просто расширить, для этого достаточно добавить еще одно устройство.

Установка GlusterFS

Все необходимые пакеты есть в официальных репозиториях большинства дистрибутивов. Например, для установки GlusterFS в Fedora достаточно выполнить:

sudo dnf install glusterfs glusterfs-cli glusterfs-server

sudo apt install glusterfs glusterfs-cli glusterfs-server

Дальше нам нужно запустить сервис и убедится, что он запущен и работает:

sudo systemctl start glusterd.service
$ sudo systemctl status glusterd.service

sudo systemctl start glusterfs-server.service
$ sudo systemctl status glusterfs-server.service

Команда gluster

Для управления всеми возможностями Glusterfs используется утилита gluster. Для того чтобы вы могли лучше ориентироваться в ней мы рассмотрим ее синтаксис и использование. Синтаксис команды выглядит следующим образом:

$ gluster команда подкоманда параметры

Вот основные команды:

  • volume – управление разделами;
  • peer – управление подключенными машинами;
  • snapshot – работа со снапшотами;

Рассмотрим синтаксис основных команд volume, с помощью которых будет выполняться настройка glusterfs:

  • volume info – информация о томе;
  • volume create – создать новый том на устройстве;
  • volume delete – удалить том;
  • volume start – запустить том;
  • volume stop – временно остановить том;
  • volume add-brick – добавить раздел к тому;
  • volume remove-brick – удалить раздел из тома;
  • volume replace-brick – заменить раздел на другой;
  • volume rebalance – перебалансировать файлы.

Дальше рассмотрим команды peer, которые мы тоже сегодня будем использовать:

  • peer probe – подключить новый компьютер к пулу;
  • peer detach – отключить компьютер от пула;
  • peer status – отобразить подключенные устройства.

Теперь вы знаете достаточно, чтобы продолжить работу с программой. И разобраться в возможных проблемах. Дальше мы рассмотрим как настроить Glusterfs для хранения данных.

Настройка Glusterfs

Мы будем настраивать распределение данных GlusterFS между двумя системами, сервис должен быть установлен и настроен на обоих из них. На обоих компьютерах наши устройства хранения смонтированы в /storage. Перед тем как начать работать с Glusterfs, давайте добавим ip адреса наших серверов /etc/hosts, чтобы обращаться с ними было легче:

sudo vi /etc/hosts

192.168.51.1 gluster1
192.168.51.2 gluster2

Это необходимо сделать на обоих машинах. Дальше нам нужно создать пул. Неважно какую машину вы выберете для этого все будет работать одинаково. Мы будем использовать gluster1. Чтобы комьпютеры могли получить доступ друг к другу, нужно открыть несколько портов в брандмауэре:

firewall-cmd –zone=public –add-port=24007-24008/tcp –permanent
$ firewall-cmd –zone=public –add-port=24009/tcp –permanent
$ firewall-cmd –zone=public –add-service=nfs –add-service=samba –add-service=samba-client –permanent
$ firewall-cmd –zone=public –add-port=111/tcp –add-port=139/tcp –add-port=445/tcp –add-port=965/tcp –add-port=2049/tcp –add-port=38465-38469/tcp –add-port=631/tcp –add-port=111/udp –add-port=963/udp –add-port=49152-49251/tcp –permanent
$ firewall-cmd –reload

Для подключения машины gluster2 выполните команду:

sudo gluster peer probe gluster2

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

sudo gluster volume create gv0 replica gluster1:/storage/brick1/gv0/ gluster2:/storage/brick1/gv0/

По умолчанию используется протокол TCP/IP для взаимодействия, но вы можете вручную указать InfiniBand. Если вы попытаетесь создать хранилище на корневом разделе, то у вас ничего не получиться, для его создания нужно добавить в конец команды опцию force. Далее смотрим информацию о созданном хранилище:

sudo gluster volume info gv0

Дальше можно запустить созданную группу:

sudo gluster volume start gv0

Существует несколько способов получить доступ к хранилищу GlusterFS. Работа через FUSE будет наиболее быстрой. Также можно использовать Samba или NFS. Кроме того, преимущество использование официального клиента, в том, что вы можете получить доступ к отдельным хранилищам. Для подключения Glusterfs с помощью официального инструмента используйте mount:

sudo mount -t glusterfs gluster1:/gv0 /mnt/glusterfs/

Для настройки автоматического монтирования вам понадобится добавить строку в /etc/fstab. Вы можете очень легко расширить существующий пул при необходимости, для этого просто добавьте новый раздел:

sudo gluster peer probe gluster3

sudo gluster volume add-brick replica 3 gv0 gluster3:/storage/brick1/gv0/

Естественно, что ip адрес узла gluster3 должен быть добавлен в файл /etc/hosts. Сначала мы добавляем его в список пиров, затем инициализируем на нем наш раздел. После выполнения команды наше хранилище будет состоять из трех устройств. Вы можете очень просто удалить один из разделов и открепить устройство:

sudo gluster volume remove-brick gv0 gluster3:/storage/brick1/gv0/
$ sudo gluster peer detach gluster3

Когда вы добавляете или удаляете разделы, необходимо пересортировать данные, система работала наиболее эффективно. Для этого выполните:

gluster volume rebalance gv0 start

Чтобы посмотреть статус балансировки используйте команду status:

gluster volume rebalance gv0 status

Настройка шифрования GlusterFS

Если все узлы находятся в приватной сети, то это еще ничего, но если вы собираетесь применять GlusterFS через сеть, то желательно включить шифрование и аутентификацию по RSA ключу. По умолчанию никакая аутентификация не используется. Сначала создаем серитфикаты на каждом узле:

cd /etc/ssl/
$ sudo openssl genrsa -out glusterfs.key 2048
$ sudo openssl req -new -x509 -key glusterfs.key -subj “/CN=gluster1” -out glusterfs.pem

Скопируйте ключ gluster.key на другой сервер и создайте там на основе него сертификат, вместо gluster0 используйте имя своего хоста:

cd /etc/ssl/
$ sudo openssl req -new -x509 -key glusterfs.key -subj “/CN=gluster2” -out glusterfs.pem

Объедините содержимое обоих файлов pem и файле .ca и разместите его на всех серверах в папке /etc/ssl:

cat /etc/ssl/glusterfs.pem gluster2.pem > glusterfs.ca

Включите поддержку шифрования и перезапустите сервер:

sudo touch /var/lib/glusterd/secure-access
$ sudo systemctl restart glusterd

Включите ssl на всех серверах и клиентах:

sudo gluster volume set gv0 auth.ssl-allow ‘*’
$ gluster volume set gv0 server.ssl on

Теперь перезапустите группу томов:

sudo gluster vol stop gv0
$ sudo gluster vol start gv0

Проверить работает ли ssl сейчас вы можете посмотрев лог файл:

grep -i ssl /var/log/glusterfs/gv0.log

Выводы

В этой статье мы рассмотрели как выполняется настройка Glusterfs для хранения и репликации данных на нескольких серверах в сети. Этому может быть мало применений для домашних пользователей, но такая технология незаменима при обработке больших объемов данных в организациях. Жаль, что пока Glusterfs работает очень медленно, особенно с небольшими файлами и если узлов не много, а синхронизация будет выполняться через интернет, то целесообразнее использовать lsyncd.

Вы пропустили

AEGIS Algorithms Android Angular Apache Airflow Apache Druid Apache Flink Apache Spark API API Canvas AppSec Architecture Artificial Intelligence Astro Authentication Authorization AutoGPT AWS AWS Aurora AWS Boto3 AWS EC2 AWS Lambda Azure Babylon.js Backend bash Beautiful Soup Bento UI Big Data Binary Tree Browser API Bun Career Cassandra Charts ChatGPT Chrome Extension Clean Code CLI ClickHouse Coding Codux Combine Compose Computer Context Fusion Copilot Cosmo Route CProgramming cron Cryptography CSS CTF Cypress DALL-E Data Analysis Data science Database dbt dbt Cloud deno Design Design Patterns Detekt Development Distributed Systems Django Docker Docker Hub Drizzle DRY DuckDB Express FastAPI Flask Flutter For Beginners Front End Development Game Development GCN GCP Geospatial Git GitHub Actions GitHub Pages Gitlab GMS GoFr Golang Google Google Sheets Google Wire GPT-3 GPT3 Gradio Gradle Grafana Graphic Design GraphQL gRPC Guidance HMS Hotwire HTML Huawei HuggingFace IndexedDB InfoSec Interview iOS Jackknife Java JavaScript Jetpack Compose JSON Kafka Kotlin Kubernetes LangChain Laravel Linux LlaMA LLM localStorage Logging Machine Learning Magento Math Mermaid Micro Frontends Mobile Mobile App Development mondayDB MongoDB Mongoose MySQL Naming NestJS NET NetMock Networks NextJS NLP Node.js Nodejs NoSQL NPM OOP OpenAI OTP Pandas PDF PHP Playwright Plotly Polars PostgreSQL Prefect Productivity Programming Prometheus Puppeteer Pushover Python Pytorch Quarkus Rabbitmq RAG Ramda Raspberry Pi React React Native Reactor Redis REST API Revolut Riverpod RProgramming Ruby Ruby on Rails Rust Scalene SCDB ScyllaDB Selenium Servers Sklearn SLO SnowFlake Snowkase Software Architecture Software Development Solara Solid Spring Boot SQL SQLite Streamlit SudoLang Supabase Swift SwiftUI Tailwind CSS Taipy Terraform Testing Transformers TURN TypeScript Ubuntu UI Design Unix UX UX Design Vim Vite VSCode Vue Web Architecture Web Components Web Development Web Frameworks Web Scraping Web-разработка Webassembly Websocket Whisper Widgets WordPress YAML YouTube Zed Наука о данных Разное Тренды

Современный подход к разработке с использованием Next.js