Всем доброго времени суток. Прошу поделиться практическим опытом и советом в создании отказоустойчивого файлового хранилища. Задача обычная - NAS для хранения и подключения образов виртуальных машин. Что было сделано.
Исходные данные.
- Три десктопных сервера (Core 2 Duo / Core 2 Quard)
- Дисковая подсистема на всех серверах — 4 х 1 TB HDD (SATA 7200) собранных в RAID10 (Intel Matrix HostRaid + mdadm)
- Сеть — 3 гигабитных сетевых карты, 2 сети. Одна сетевуха смотрит в пользовательскую сеть для управления (management), 2 другие собраны в агрегированный канал (LACP bonding 802.3ad) для репликаций и подключения дисков виртуальных машин. После подключения были произведены замеры скорости — копировал большие и много мелких файлов по сети с одной ноды на другую. Максимальная скорость чтения/записи по сети — 150МБ/сек. Понятное дело — диски пустые.
- ОС — CentOS 7.
Создание томов glusterfs.
- На одном из логических разделов созданы lvm тома 100G и 1,7TB c xfs. Выглядит это так.
sda 8:0 0 931,5G 0 disk └─md126 9:126 0 1,8T 0 raid10 ├─md126p1 259:0 0 1G 0 md /boot ├─md126p2 259:1 0 28,9G 0 md │ ├─cl-root 253:0 0 25G 0 lvm / │ └─cl-swap 253:1 0 3,9G 0 lvm [SWAP] └─md126p3 259:2 0 1,8T 0 md ├─gluster-vd0 253:2 0 100G 0 lvm /mnt/vmengn └─gluster-vd1 253:3 0 1,7T 0 lvm /mnt/vmboot sdb 8:16 0 931,5G 0 disk └─md126 9:126 0 1,8T 0 raid10 ├─md126p1 259:0 0 1G 0 md /boot ├─md126p2 259:1 0 28,9G 0 md │ ├─cl-root 253:0 0 25G 0 lvm / │ └─cl-swap 253:1 0 3,9G 0 lvm [SWAP] └─md126p3 259:2 0 1,8T 0 md ├─gluster-vd0 253:2 0 100G 0 lvm /mnt/vmengn └─gluster-vd1 253:3 0 1,7T 0 lvm /mnt/vmboot sdc 8:32 0 931,5G 0 disk └─md126 9:126 0 1,8T 0 raid10 ├─md126p1 259:0 0 1G 0 md /boot ├─md126p2 259:1 0 28,9G 0 md │ ├─cl-root 253:0 0 25G 0 lvm / │ └─cl-swap 253:1 0 3,9G 0 lvm [SWAP] └─md126p3 259:2 0 1,8T 0 md ├─gluster-vd0 253:2 0 100G 0 lvm /mnt/vmengn └─gluster-vd1 253:3 0 1,7T 0 lvm /mnt/vmboot sdd 8:48 0 931,5G 0 disk └─md126 9:126 0 1,8T 0 raid10 ├─md126p1 259:0 0 1G 0 md /boot ├─md126p2 259:1 0 28,9G 0 md │ ├─cl-root 253:0 0 25G 0 lvm / │ └─cl-swap 253:1 0 3,9G 0 lvm [SWAP] └─md126p3 259:2 0 1,8T 0 md ├─gluster-vd0 253:2 0 100G 0 lvm /mnt/vmengn └─gluster-vd1 253:3 0 1,7T 0 lvm /mnt/vmboot
- Средствами gluster, созданы 2 диска vmengn и vmboot replica 3. Вот так:
# gluster volume info all Volume Name: vmboot Type: Replicate Volume ID: 0d9b0b50-fe76-4e8f-bba1-7860e0b04872 Status: Started Number of Bricks: 1 x 3 = 3 Transport-type: tcp Bricks: Brick1: vmboot1.ru:/mnt/vmboot/data Brick2: vmboot2.ru:/mnt/vmboot/data Brick3: vmboot3.ru:/mnt/vmboot/data Options Reconfigured: performance.readdir-ahead: on cluster.quorum-type: auto cluster.server-quorum-type: server diagnostics.latency-measurement: on diagnostics.count-fop-hits: on cluster.server-quorum-ratio: 35% Volume Name: vmengn Type: Replicate Volume ID: 4430f8ed-8108-4391-b30d-ac62205eb5f1 Status: Started Number of Bricks: 1 x 3 = 3 Transport-type: tcp Bricks: Brick1: vmboot1.ru:/mnt/vmengn/data Brick2: vmboot2.ru:/mnt/vmengn/data Brick3: vmboot3.ru:/mnt/vmengn/data Options Reconfigured: performance.readdir-ahead: on cluster.quorum-type: auto cluster.server-quorum-type: server diagnostics.latency-measurement: on diagnostics.count-fop-hits: on cluster.server-quorum-ratio: 35%
- На диске vmeng развернута ВМ ovirt HostedEngine, на vmboot образы различных виртуальных машин, управляемых через ovirt.
ИТОГИ
- Косяк номер раз.
Крайне низкая производительность копирования/записи на glusterfs тома. Замеры скорости показывают в максимуме 10МБ / сек. Виртуалки тормозят со страшной силой. Переодически отваливаются ноды кластера и виртуальные машины ovirt по таймауту недоступности стораджа дата центра. - Мегакосяк номер 2.
После ребута узла glusterfs — сервис glusterd не стратует! В логах ошибки неудовлетворенных зависимостей glusterd. В итоге выяснилось, что проблема в том, что не стратует сервис rpcbind примерно с такими же ошибками — не удовлетворенные зависимости.
# service rpcbind status Redirecting to /bin/systemctl status rpcbind.service ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled) Active: inactive (dead) мар 28 11:55:41 aa76.ru systemd[1]: Dependency failed for RPC bind service. мар 28 11:55:41 aa76.ru systemd[1]: Job rpcbind.service/start failed with result 'dependency'.
Причем при попытке вручную стартануть сервис — результат тот же. Получается только так.
# systemctl enable rpcbind # systemctl start rpcbind # systemctl start glusterd
P.S. Попытки нагуглить похожую проблему, приводят к старым bugreport'ам на «красной пашечке», датированным 2011-2013 годами.
Из более менее свежих, нашел только
вот это, но не помогло.
Прошу совета в какую сторону курить? Изначально строил NAS на базе nas4free из 2-х нод (FreeBSD + CARP + HAST + ZFS + iSCSI Target), но тоже не взлетело — первые же тесты на отказоустойчивость развалили узел из 2-х нод с полной деградацией, к тому же «на горячую» не получится заменить узел nas4free.