Как создать резервный пул хранения с помощью GlusterFS на серверах Ubuntu
Статус: устарело
В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:
- Обновите Ubuntu до версии 14.04.
- Обновление Ubuntu 14.04 до Ubuntu 16.04
- Перенесите данные сервера в поддерживаемую версию.
Причина:
Смотрите вместо этого:
Введение
Избыточность и высокая доступность необходимы для самых разных действий сервера. Наличие единой точки отказа с точки зрения хранения данных — очень опасная конфигурация для любых критических данных.
В то время как многие базы данных и другое программное обеспечение позволяют распределять данные в контексте одного приложения, другие системы могут работать на уровне файловой системы, чтобы гарантировать, что данные копируются в другое место всякий раз, когда они записываются на диск. Кластерное решение для хранения, такое как GlusterFS, обеспечивает именно эту функциональность.
В этом руководстве мы настроим резервный кластер GlusterFS между двумя 64-битными экземплярами Ubuntu 12.04 VPS. Это будет действовать аналогично серверу NAS с зеркальным RAID. Затем мы получим доступ к кластеру с третьего 64-битного Ubuntu 12.04 VPS.
Общие понятия
Кластерная среда позволяет вам объединять ресурсы (как правило, либо вычислительные, либо хранилища), чтобы вы могли рассматривать различные компьютеры как единую, более мощную единицу. С помощью GlusterFS мы можем объединить хранилище различных экземпляров VPS и получить к ним доступ, как если бы это был один сервер.
GlusterFS позволяет создавать различные конфигурации хранилищ, многие из которых функционально аналогичны уровням RAID. Например, вы можете распределить данные по разным узлам в кластере или реализовать избыточность для повышения доступности данных.
В этом руководстве мы будем создавать избыточный кластерный массив хранения, также известный как распределенная файловая система. По сути, это позволит нам иметь функциональность, аналогичную зеркальной конфигурации RAID по сети. Каждый независимый сервер будет содержать свою собственную копию данных, позволяя нашим приложениям получать доступ к любой копии, что поможет распределить нашу нагрузку чтения.
Шаги для каждого VPS
Есть несколько шагов, которые мы предпримем для каждого экземпляра VPS, используемого в этом руководстве. Нам нужно будет настроить разрешение DNS между каждым хостом и настроить источники программного обеспечения, которые мы будем использовать для установки пакетов GlusterFS.
Настроить разрешение DNS
Чтобы наши различные компоненты могли легко взаимодействовать друг с другом, лучше всего установить какое-то разрешение имени хоста между каждым компьютером.
Если у вас есть доменное имя, которое вы хотите настроить так, чтобы оно указывало на каждую систему, вы можете следовать этому руководству, чтобы настроить доменные имена с помощью DigitalOcean.
Если у вас нет свободного доменного имени или вы просто хотите быстро и легко что-то настроить, вместо этого вы можете отредактировать файл hosts на каждом компьютере.
Откройте этот файл с привилегиями root на своем первом компьютере:
sudo nano /etc/hosts
Вы должны увидеть что-то похожее на это:
127.0.0.1 localhost gluster2
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Под определением локального хоста вы должны добавить IP-адрес каждого VPS, за которым следует длинное и короткое имя, которое вы хотите использовать для ссылки на него.
Когда вы закончите, это должно выглядеть примерно так:
<пред>
::1 ip6-localhost ip6-loopback
Части строк gluster0.droplet.com
и gluster0
можно изменить на любое имя, которое вы хотели бы использовать для доступа к каждой капле. Мы будем использовать эти настройки для этого руководства.
Когда вы закончите, скопируйте добавленные строки и добавьте их в файлы /etc/hosts
на других ваших экземплярах VPS. Каждый файл /etc/hosts
должен содержать строки, связывающие ваши IP-адреса с выбранными вами именами.
Сохраните и закройте каждый файл, когда закончите.
Настройка источников программного обеспечения
Хотя Ubuntu 12.04 содержит пакеты GlusterFS, они довольно устарели, поэтому мы будем использовать последнюю стабильную версию на момент написания этой статьи (версия 3.4) из проекта GlusterFS.
Мы будем настраивать источники программного обеспечения на всех компьютерах, которые будут функционировать как узлы в нашем кластере, а также на клиентском компьютере.
На самом деле мы добавим PPA (личный архив пакетов), который проект рекомендует пользователям Ubuntu. Это позволит нам управлять нашими пакетами с помощью тех же инструментов, что и другое системное программное обеспечение.
Во-первых, нам нужно установить пакет python-software-properties
, который позволит нам легко управлять PPA с помощью apt:
sudo apt-get update
sudo apt-get install python-software-properties
После установки инструментов PPA мы можем добавить PPA для пакетов GlusterFS, набрав:
sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4
После добавления PPA нам нужно обновить нашу локальную базу данных пакетов, чтобы наша система знала о новых пакетах, доступных из PPA:
sudo apt-get update
Повторите эти шаги на всех экземплярах VPS, которые вы используете для этого руководства.
Установить серверные компоненты
В этом руководстве мы назначим две наши машины членами кластера, а третью — клиентом.
Мы будем настраивать компьютеры, помеченные как gluster0
и gluster1
, как компоненты кластера. Мы будем использовать gluster2
в качестве клиента.
На наших компьютерах-членах кластера (gluster0 и gluster1) мы можем установить серверный пакет GlusterFS, набрав:
sudo apt-get install glusterfs-server
Как только это будет установлено на обоих узлах, мы можем приступить к настройке тома хранилища.
На одном из хостов нам нужно выполнить пиринг со вторым хостом. Неважно, какой сервер вы используете, но для простоты мы будем выполнять эти команды с нашего сервера gluster0:
sudo gluster peer probe gluster1.droplet.com
peer probe: success
Это означает, что пиринг прошел успешно. Мы можем проверить, что узлы общаются в любое время, набрав:
sudo gluster peer status
Number of Peers: 1
Hostname: gluster1.droplet.com
Port: 24007
Uuid: 7bcba506-3a7a-4c5e-94fa-1aaf83f5729b
State: Peer in Cluster (Connected)
На данный момент наши два сервера взаимодействуют друг с другом и могут совместно настраивать тома хранения.
Создать том хранения
Теперь, когда у нас есть доступный пул серверов, мы можем создать наш первый том.
Поскольку нас интересует избыточность, мы настроим том с функцией реплики. Это позволит нам хранить несколько копий наших данных, избавляя нас от единой точки отказа.
Поскольку нам нужна одна копия данных на каждом из наших серверов, мы установим для параметра реплики значение «2», что соответствует количеству серверов, которые у нас есть. Общий синтаксис, который мы будем использовать для создания тома, таков:
<пред>
Точная команда, которую мы запустим, такова:
sudo gluster volume create volume1 replica 2 transport tcp gluster0.droplet.com:/gluster-storage gluster1.droplet.com:/gluster-storage force
volume create: volume1: success: please start the volume to access data
Это создаст том с именем volume1
. Он будет хранить данные из этого тома в каталогах на каждом хосте в /gluster-storage
. Если этот каталог не существует, он будет создан.
На данный момент наш том создан, но неактивен. Мы можем запустить том и сделать его доступным для использования, набрав:
sudo gluster volume start volume1
volume start: volume1: success
Наш том должен быть онлайн в настоящее время.
Установка и настройка клиентских компонентов
Теперь, когда мы настроили наш том, он доступен для использования нашей клиентской машиной.
Прежде чем мы начнем, нам нужно фактически установить соответствующие пакеты из PPA, который мы настроили ранее.
На клиентской машине (в данном примере gluster2) введите:
sudo apt-get install glusterfs-client
Это установит клиентское приложение, а также установит необходимые инструменты файловой системы Fuse, необходимые для обеспечения функциональности файловой системы вне ядра.
Мы собираемся смонтировать наш удаленный том хранилища на клиентском компьютере. Для этого нам нужно создать точку монтирования. Традиционно он находится в каталоге /mnt
, но его можно использовать в любом удобном месте.
Мы создадим каталог в /storage-pool
:
sudo mkdir /storage-pool
Сделав этот шаг, мы можем смонтировать удаленный том. Для этого нам просто нужно использовать следующий синтаксис:
<пред>
Обратите внимание, что мы используем имя тома в команде mount. GlusterFS абстрагирует фактические каталоги хранилища на каждом хосте. Нам нужно монтировать не каталог /gluster-storage
, а том volume1
.
Также обратите внимание, что нам нужно указать только одного члена кластера хранения.
Фактическая команда, которую мы собираемся запустить, такова:
sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool
Это должно увеличить наш объем. Если мы используем команду df
, вы увидите, что наша GlusterFS смонтирована в правильном месте.
Тестирование функций резервирования
Теперь, когда мы настроили наш клиент для использования нашего пула хранилища, давайте проверим функциональность.
На нашей клиентской машине (gluster2) мы можем ввести это, чтобы добавить некоторые файлы в наш каталог пула хранения:
cd /storage-pool
sudo touch file{1..20}
Это создаст 20 файлов в нашем пуле хранения.
Если мы посмотрим на наши каталоги /gluster-storage
на каждом хосте хранилища, мы увидим, что все эти файлы присутствуют в каждой системе:
# on gluster0.droplet.com and gluster1.droplet.com
cd /gluster-storage
ls
file1 file10 file11 file12 file13 file14 file15 file16 file17 file18 file19 file2 file20 file3 file4 file5 file6 file7 file8 file9
Как видите, это записало данные от нашего клиента на оба наших узла.
Если когда-либо возникнет ситуация, когда один из узлов в вашем кластере хранения выйдет из строя и в файловую систему будут внесены изменения. Выполнение операции чтения в точке монтирования клиента после того, как узел вернется в оперативный режим, должно предупредить его о получении любых отсутствующих файлов:
ls /storage-pool
Ограничить доступ к тому
Теперь, когда мы убедились, что наш пул хранения можно смонтировать и реплицировать данные на обе машины в кластере, мы должны заблокировать наш пул.
В настоящее время любой компьютер может подключиться к нашему объему хранилища без каких-либо ограничений. Мы можем изменить это, установив параметр на нашем томе.
На одном из ваших узлов хранения введите:
<пред>
Вам нужно будет заменить IP-адрес вашего клиента кластера (gluster2) в этой команде. В настоящее время, по крайней мере, с конфигурацией /etc/hosts
, ограничения доменного имени работают неправильно. Если вы установите ограничение таким образом, оно заблокирует весь трафик. Вместо этого вы должны использовать IP-адреса.
Если вам нужно снять ограничение в любой момент, вы можете ввести:
sudo gluster volume set volume1 auth.allow *
Это снова позволит подключаться с любой машины. Это небезопасно, но может быть полезно для отладки.
Если у вас несколько клиентов, вы можете указать их IP-адреса одновременно через запятую:
<пред>
Получение информации с помощью команд GlusterFS
Когда вы начнете изменять некоторые параметры хранилища GlusterFS, вы можете запутаться в том, какие параметры у вас есть, какие тома активны и какие узлы связаны с каждым томом.
На ваших узлах доступно несколько различных команд для извлечения этих данных и взаимодействия с вашим пулом хранения.
Если вам нужна информация о каждом из ваших томов, введите:
sudo gluster volume info
Volume Name: volume1
Type: Replicate
Volume ID: 3634df4a-90cd-4ef8-9179-3bfa43cca867
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster0.droplet.com:/gluster-storage
Brick2: gluster1.droplet.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11
Точно так же, чтобы получить информацию о пирах, к которым подключен этот узел, вы можете ввести:
sudo gluster peer status
Number of Peers: 1
Hostname: gluster0.droplet.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)
Если вам нужна подробная информация о том, как работает каждый узел, вы можете профилировать том, набрав:
<пред>
Когда эта команда будет завершена, вы можете получить собранную информацию, набрав:
<пред> профиль тома sudo gluster volume_name информация <пред> Блок: gluster1.droplet.com:/gluster-storage
Совокупная статистика:
0.00 0.00 us 0.00 us 0.00 us 20 RELEASE
0.00 0.00 us 0.00 us 0.00 us 6 RELEASEDIR
10.80 113.00 us 113.00 us 113.00 us 1 GETXATTR
28.68 150.00 us 139.00 us 161.00 us 2 STATFS
60.52 158.25 us 117.00 us 226.00 us 4 LOOKUP
Duration: 8629 seconds
Чтение данных: 0 байт
С помощью этой команды вы получите много информации о каждом узле.
Чтобы получить список всех связанных с GlusterFS компонентов, работающих на каждом из ваших узлов, вы можете ввести:
sudo gluster volume status
Status of volume: volume1
Gluster process Port Online Pid
------------------------------------------------------------------------------
Brick gluster0.droplet.com:/gluster-storage 49152 Y 2808
Brick gluster1.droplet.com:/gluster-storage 49152 Y 2741
NFS Server on localhost 2049 Y 3271
Self-heal Daemon on localhost N/A Y 2758
NFS Server on gluster0.droplet.com 2049 Y 3211
Self-heal Daemon on gluster0.droplet.com N/A Y 2825
There are no active volume tasks
Если вы собираетесь администрировать свои тома хранилища GlusterFS, может быть хорошей идеей зайти в консоль GlusterFS. Это позволит вам взаимодействовать с вашей средой GlusterFS без необходимости вводить sudo gluster
перед всем:
sudo gluster
Это даст вам подсказку, где вы можете ввести свои команды. Это хороший способ сориентироваться:
help
Когда вы закончите, выйдите следующим образом:
exit
Заключение
На этом этапе у вас должна быть избыточная система хранения, которая позволит нам одновременно записывать на два отдельных сервера. Это может быть полезно для большого количества приложений и может гарантировать, что наши данные будут доступны, даже если один сервер выйдет из строя.