Развертывание параллельной файловой системы GlusterFS в высокодоступном режиме
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
GlusterFS
При помощи этого руководства вы сможете создать инфраструктуру из трех сегментов, имеющих общую файловую систему GlusterFS. Размещение дисков для хранения данных в трех разных зонах доступности обеспечит высокую доступность и отказоустойчивость файловой системы.
Чтобы настроить высокодоступную файловую систему:
- Подготовьте облако к работе.
- Настройте профиль CLI.
- Подготовьте среду для развертывания ресурсов.
- Разверните ресурсы.
- Установите и настройте GlusterFS.
- Протестируйте доступность и отказоустойчивость решения.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за постоянно работающие ВМ и диски (см. тарифы Yandex Compute Cloud);
- плата за использование публичных IP-адресов и исходящий трафик (см. тарифы Yandex Virtual Private Cloud);
Настройте профиль CLI
-
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите его и авторизуйтесь от имени пользователя.
-
Создайте сервисный аккаунт:
Консоль управленияCLIAPI- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта, например,
sa-glusterfs. - Нажмите кнопку Создать.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Выполните команду для создания сервисного аккаунта, указав имя
sa-glusterfs:yc iam service-account create --name sa-glusterfsГде
name— имя сервисного аккаунта.Результат:
id: ajehr0to1g8b******** folder_id: b1gv87ssvu49******** created_at: "2023-06-20T09:03:11.665153755Z" name: sa-glusterfsЧтобы создать сервисный аккаунт, воспользуйтесь вызовом gRPC API ServiceAccountService/Create или методом create для ресурса
ServiceAccountREST API. - В консоли управления
-
Назначьте сервисному аккаунту роль администратора на каталог:
Консоль управленияCLIAPI- На стартовой странице
консоли управления выберите каталог. - Перейдите на вкладку Права доступа.
- Найдите аккаунт
sa-glusterfsв списке и нажмите значок . - Нажмите кнопку Изменить роли.
- В открывшемся диалоге нажмите кнопку Добавить роль и выберите роль
admin.
Выполните команду:
yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role admin \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
- На стартовой странице
-
Настройте профиль CLI для выполнения операций от имени сервисного аккаунта:
CLI-
Создайте авторизованный ключ для сервисного аккаунта и запишите его в файл:
yc iam key create \ --service-account-id <идентификатор_сервисного_аккаунта> \ --folder-id <id_каталога_с_сервисным_аккаунтом> \ --output key.jsonГде:
service-account-id— идентификатор сервисного аккаунта.folder-id— идентификатор каталога, в котором создан сервисный аккаунт.output— имя файла с авторизованным ключом.
Результат:
id: aje8nn871qo4******** service_account_id: ajehr0to1g8b******** created_at: "2023-06-20T09:16:43.479156798Z" key_algorithm: RSA_2048 -
Создайте профиль CLI для выполнения операций от имени сервисного аккаунта:
yc config profile create sa-glusterfsРезультат:
Profile 'sa-glusterfs' created and activated -
Задайте конфигурацию профиля:
yc config set service-account-key key.json yc config set cloud-id <идентификатор_облака> yc config set folder-id <идентификатор_каталога>Где:
service-account-key— файл с авторизованным ключом сервисного аккаунта.cloud-id— идентификатор облака.folder-id— идентификатор каталога.
-
Добавьте аутентификационные данные в переменные окружения:
export YC_TOKEN=$(yc iam create-token) export YC_CLOUD_ID=$(yc config get cloud-id) export YC_FOLDER_ID=$(yc config get folder-id)
-
Подготовьте среду для развертывания ресурсов
-
Создайте пару ключей SSH:
ssh-keygen -t ed25519Рекомендуем оставить имя файла ключа без изменения.
-
Клонируйте репозиторий
yandex-cloud-examples/yc-distributed-ha-storage-with-glusterfsиз GitHub и перейдите в папкуyc-distributed-ha-storage-with-glusterfs:git clone https://github.com/yandex-cloud-examples/yc-distributed-ha-storage-with-glusterfs.git cd ./yc-distributed-ha-storage-with-glusterfs -
Отредактируйте файл
variables.tf, указав параметры разворачиваемых ресурсов:Важно
Заданные в файле значения приводят к разворачиванию ресурсоемкой инфраструктуры.
Чтобы развернуть ресурсы в рамках имеющихся у вас квот, используйте приведенные ниже значения или измените значения на свое усмотрение.- В секции
disk_sizeзначениеdefaultизмените на30. - В секции
client_cpu_countзначениеdefaultизмените на2. - В секции
storage_cpu_countзначениеdefaultизмените на2. - Если при создании пары ключей SSH вы указали имя, отличное от имени по умолчанию, в секции
local_pubkey_pathзначениеdefaultизмените на<путь_к_публичному_ключу_SSH>.
- В секции
Разверните ресурсы
- Выполните инициализацию Terraform:
terraform init - Проверьте конфигурацию Terraform файлов:
terraform validate - Проверьте список создаваемых облачных ресурсов:
terraform plan - Создайте ресурсы:
terraform apply -auto-approve - Дождитесь появления сообщения о завершении процесса:
Outputs: connect_line = "ssh storage@158.160.108.137" public_ip = "158.160.108.137"
В результате в каталоге будут созданы три ВМ для размещения клиентского кода (client01, client02 и client03) и три привязанные к ним ВМ для распределенного хранения данных (gluster01, gluster02 и gluster03) в трех разных зонах доступности.
Установите и настройте GlusterFS
-
Подключитесь к ВМ
client01, используя команду из выдачи о завершении процесса:ssh storage@158.160.108.137 -
Перейдите в режим работы с правами суперпользователя
root:sudo -i -
Установите ClusterShell
:dnf install epel-release -y dnf install clustershell -y echo 'ssh_options: -oStrictHostKeyChecking=no' >> /etc/clustershell/clush.conf -
Создайте конфигурационные файлы:
cat > /etc/clustershell/groups.conf <<EOF [Main] default: cluster confdir: /etc/clustershell/groups.conf.d $CFGDIR/groups.conf.d autodir: /etc/clustershell/groups.d $CFGDIR/groups.d EOF cat > /etc/clustershell/groups.d/cluster.yaml <<EOF cluster: all: '@clients,@gluster' clients: 'client[01-03]' gluster: 'gluster[01-03]' EOF -
Установите GlusterFS:
clush -w @all hostname # check and auto add fingerprints clush -w @all dnf install centos-release-gluster -y clush -w @all dnf --enablerepo=powertools install glusterfs-server -y clush -w @gluster mkfs.xfs -f -i size=512 /dev/vdb clush -w @gluster mkdir -p /bricks/brick1 clush -w @gluster "echo '/dev/vdb /bricks/brick1 xfs defaults 1 2' >> /etc/fstab" clush -w @gluster "mount -a && mount" -
Перезапустите GlusterFS:
clush -w @gluster systemctl enable glusterd clush -w @gluster systemctl restart glusterd -
Проверьте доступность ВМ
gluster02иgluster03:clush -w gluster01 gluster peer probe gluster02 clush -w gluster01 gluster peer probe gluster03 -
Создайте папки
vol0в ВМ для хранения данных и настройте доступность и отказоустойчивость за счет подключения к папке общего доступаregional-volume:clush -w @gluster mkdir -p /bricks/brick1/vol0 clush -w gluster01 gluster volume create regional-volume disperse 3 redundancy 1 gluster01:/bricks/brick1/vol0 gluster02:/bricks/brick1/vol0 gluster03:/bricks/brick1/vol0 -
Выполните дополнительные настройки производительности:
clush -w gluster01 gluster volume set regional-volume client.event-threads 8 clush -w gluster01 gluster volume set regional-volume server.event-threads 8 clush -w gluster01 gluster volume set regional-volume cluster.shd-max-threads 8 clush -w gluster01 gluster volume set regional-volume performance.read-ahead-page-count 16 clush -w gluster01 gluster volume set regional-volume performance.client-io-threads on clush -w gluster01 gluster volume set regional-volume performance.quick-read off clush -w gluster01 gluster volume set regional-volume performance.parallel-readdir on clush -w gluster01 gluster volume set regional-volume performance.io-thread-count 32 clush -w gluster01 gluster volume set regional-volume performance.cache-size 1GB clush -w gluster01 gluster volume set regional-volume server.allow-insecure on -
Смонтируйте папку общего доступа
regional-volumeна клиентских ВМ:clush -w gluster01 gluster volume start regional-volume clush -w @clients mount -t glusterfs gluster01:/regional-volume /mnt/
Протестируйте доступность и отказоустойчивость решения
-
Проверьте статус папки общего доступа
regional-volume:clush -w gluster01 gluster volume statusРезультат:
gluster01: Status of volume: regional-volume gluster01: Gluster process TCP Port RDMA Port Online Pid gluster01: ------------------------------------------------------------------------------ gluster01: Brick gluster01:/bricks/brick1/vol0 54660 0 Y 1374 gluster01: Brick gluster02:/bricks/brick1/vol0 58127 0 Y 7716 gluster01: Brick gluster03:/bricks/brick1/vol0 53346 0 Y 7733 gluster01: Self-heal Daemon on localhost N/A N/A Y 1396 gluster01: Self-heal Daemon on gluster02 N/A N/A Y 7738 gluster01: Self-heal Daemon on gluster03 N/A N/A Y 7755 gluster01: gluster01: Task Status of Volume regional-volume gluster01: ------------------------------------------------------------------------------ gluster01: There are no active volume tasks gluster01: -
Создайте текстовый файл:
cat > /mnt/test.txt <<EOF Hello, GlusterFS! EOF -
Убедитесь, что файл доступен на всех трех клиентских ВМ:
clush -w @clients sha256sum /mnt/test.txtРезультат:
client01: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt client02: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt client03: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt -
Отключите одну из ВМ для хранения данных, например,
gluster02:Консоль управленияCLIAPI- В консоли управления
выберите каталог, которому принадлежит ВМ. - Выберите сервис Compute Cloud.
- Выберите ВМ
gluster02в списке, нажмите значок и выберите Остановить. - В открывшемся окне нажмите кнопку Остановить.
-
Посмотрите описание команды CLI для остановки ВМ:
yc compute instance stop --help -
Остановите ВМ:
yc compute instance stop gluster02
Воспользуйтесь методом REST API stop для ресурса Instance или вызовом gRPC API InstanceService/Stop.
- В консоли управления
-
Убедитесь, что ВМ отключена:
clush -w gluster01 gluster volume statusРезультат:
gluster01: Status of volume: regional-volume gluster01: Gluster process TCP Port RDMA Port Online Pid gluster01: ------------------------------------------------------------------------------ gluster01: Brick gluster01:/bricks/brick1/vol0 54660 0 Y 1374 gluster01: Brick gluster03:/bricks/brick1/vol0 53346 0 Y 7733 gluster01: Self-heal Daemon on localhost N/A N/A Y 1396 gluster01: Self-heal Daemon on gluster03 N/A N/A Y 7755 gluster01: gluster01: Task Status of Volume regional-volume gluster01: ------------------------------------------------------------------------------ gluster01: There are no active volume tasks gluster01: -
Убедитесь, что файл по-прежнему доступен на всех трех клиентских ВМ:
clush -w @clients sha256sum /mnt/test.txtРезультат:
client01: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt client02: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt client03: 5fd9c031531c39f2568a8af5512803fad053baf3fe9eef2a03ed2a6f0a884c85 /mnt/test.txt
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы, удалите их:
terraform destroy -auto-approve