Создание резервного пула хранения данных GlusterFS в Ubuntu

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

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

Данное руководство поможет создать резервное хранилище GlusterFS между двумя 64-битными серверами Ubuntu 12.04, доступ к которому можно будет получить с третьего 64-битного сервера Ubuntu 12.04.

Общие понятия

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

В руководстве показано, как создать избыточное кластеризованное хранилище, или так называемую распределённую файловую систему. Каждый независимый сервер будет содержать собственную копию данных, и приложение сможет использовать любую из этих копий.

Требования

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

  • Настроить разрешение DNS
  • Установить зависимости и код GlusterFS

Настройка разрешения DNS

Чтобы компоненты могли взаимодействовать между собой, нужно настроить разрешение DNS между серверами.

Если у вас нет доменного имени, отредактируйте файл 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-адреса и имена всех серверов.

Например:

127.0.0.1       localhost hostname
first_ip gluster0.server.com gluster0
second_ip gluster1.server.com gluster1
third_ip gluster2.server.com 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

Примечание: Строки gluster0.server.com и gluster0 можно заменить своими значениями.

Скопируйте содержимое готового файла /etc/hosts в файлы hosts других серверов кластера.

Сохраните и закройте файл.

Установка зависимостей и кода

В репозитории Ubuntu 12.04 есть пакет GlusterFS, но он устарел. Чтобы получить более новую версию пакета, обратитесь к сайту GlusterFS.

Установите код на все ноды кластера.

Чтобы установить GlusterFS, нужно добавить в систему PPA для системы Ubuntu.

Установите пакет python-software-properties, с помощью которого можно управлять PPA.

sudo apt-get update
sudo apt-get install python-software-properties

Теперь можно добавить PPA для GlusterFS:

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.4

После этого нужно обновить индекс пакетов:

sudo apt-get update

1: Установка нод кластера

В данном руководстве два сервера (gluster0 и gluster1) будут использоваться как ноды кластера, один – как клиент (gluster2).

Установите GlusterFS на ноды кластера (gluster0 и gluster1):

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: Создание хранилища

Теперь на основе пула серверов можно создать первый том данных.

Чтобы обеспечить избыточность данных, нужно настроить репликацию данных. Таким образом можно хранить несколько копий данных, что устраняет единую точку отказа.

Чтобы каждый сервер хранил одну копию данных, в директиве replica укажите количество серверов (2 в данном случае) и задайте пути к ним. Общий синтаксис выглядит так:

sudo gluster volume create volume_name replica num_of_servers transport tcp domain1.com:/path/to/data/directory domain2.com:/path/to/data/directory ... force

В данном случае команда имеет такой вид:

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) на каждом хосте. Если указанного каталога не существует, система создаст его автоматически.

Теперь том готов, но он не активен. Чтобы запустить его, введите:

volume start: volume1: success

3: Установка и настройка клиента

Теперь том данных настроен и включен.

Установите на сервер gluster2 программу из загруженного архива PPA.

sudo apt-get install glusterfs-client

Эта команда установит клиентское приложение и все инструменты, необходимые для работы файловой системы вне ядра.

Смонтируйте удалённое хранилище на клиентском сервере. Для этого нужно создать точку монтирования. Как правило, для этого используется каталог /mnt.

Создайте каталог в /storage-pool:

sudo mkdir /storage-pool

После этого можно монтировать удалённый том. Для этого используется такой синтаксис:

sudo mount -t glusterfs domain1.com:volume_name path_to_mount_point

Обратите внимание: в команде используется имя тома. GlusterFS отделяет каталоги хранилища на каждом сервере. Монтировать нужно не каталог /gluster-storage, а том volume1.

В результате команда будет выглядеть так:

sudo mount -t glusterfs gluster0.droplet.com:/volume1 /storage-pool

Эта команда смонтирует том.

4: Тестирование избыточности данных

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

Добавьте несколько файлов на клиентской машине (gluster2):

sudo touch file{1..20}

Эта команда создаст 20 файлов в хранилище данных.

Проверьте каталог /gluster-storage на каждом хосте. В этих каталогах появятся новые 20 файлов.

# на нодах gluster0.server.com и gluster1.server.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 …

Как видите, данные клиента успешно переданы нодам.

5: Настройка доступа

Теперь нужно заблокировать доступ к пулу хранения данных.

На данный момент любая машина может подключиться к хранилищу без ограничений.

На одной из нод запустите:

sudo gluster volume set volume1 auth.allow gluster_client_IP_addr

Примечание: Вместо gluster_client_IP_addr укажите IP клиента.

Обратите внимание: ограничение доступа для доменного имени не всегда работает корректно. Рекомендуется при настройке доступа использовать IP.

Чтобы удалить ограничения, введите:

sudo gluster volume set volume1 auth.allow *

После этого любая машина снова сможет подключиться к пулу. Это очень опасно, но может понадобиться для устранения неполадок.

Если у вас много клиентов, вы можете указать их IP одновременно, разделив запятыми:

sudo gluster volume set volume1 auth.allow gluster_client1_ip,gluster_client2_ip

6: Команды 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.server.com:/gluster-storage
Brick2: gluster1.server.com:/gluster-storage
Options Reconfigured:
auth.allow: 111.111.1.11

Чтобы узнать о подключениях данной ноды, введите:

sudo gluster peer status
Number of Peers: 1
Hostname: gluster0.server.com
Port: 24007
Uuid: 6f30f38e-b47d-4df1-b106-f33dfd18b265
State: Peer in Cluster (Connected)

Следующая команда позволяет узнать, как работает каждая нода:

sudo gluster volume profile volume_name start

После выполнения этой команды вы можете извлечь собранные данные:

sudo gluster volume profile volume_name info
Brick: gluster1.server.com:/gluster-storage
--------------------------------------------
Cumulative Stats:
%-latency  Avg-latency  Min-Latency   Max-Latency   No. of calls     Fop
---------  -----------  -----------   -----------   ------------    ----
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
Data Read: 0 bytes
Data Written: 0 bytes
. . .

Эта команда предоставит много полезной информации о каждой ноде.

Чтобы получить список компонентов GlusterFS, запущенных на каждой ноде, введите:

sudo gluster volume status
Status of volume: volume1
Gluster process                                         Port    Online  Pid
------------------------------------------------------------------------------
Brick gluster0.server.com:/gluster-storage             49152   Y       2808
Brick gluster1.server.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.server.com                      2049    Y       3211
Self-heal Daemon on gluster0.server.com                N/A     Y       2825
There are no active volume tasks

Если вы хотите управлять томами хранилища GlusterFS, вам может понадобиться консоль GlusterFS.это позволяет взаимодействовать с окружением GlusterFS, не вводя каждый раз команду sudo gluster.

sudo gluster

Эта команда откроет командную строку, с помощью которой можно запускать команды. Чтобы запросить справку, введите:

help

Чтобы закрыть эту командную строку, введите:

exit

Заключение

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

Tags: ,

Добавить комментарий