Конфигурация
Сервис vhostd построен на основе фреймворка Seastar. Конфигурационные файлы разделены на пять частей:
Настройки реактора Seastar (seastar.conf).
Настройки приложения vhostd (vhost.conf).
Информация о хосте (host.yml).
Список подключенных дисков (attachments.yml).
Списки серверов метаданных SDS (mds_list.yml).
При установке пакета storage-vhostd базовые конфигурационные файлы seastar.conf и vhost.conf размещаются в директории /etc/storage/vhostd/. Сервис читает эти файлы при запуске, но не изменяет их.
Файлы attachments.yml и mds_list.yml могут обновляться сервисом в процессе работы. Файл host.yml создается командой storage host init и является общим для сервисов SDS.
Для сохранения состояния между перезапусками контейнера:
Файлы host.yml, attachments.yml и mds_list.yml должны сохраняться вне контейнера.
При потере host.yml кластер SDS будет считать новый контейнер другим клиентом.
Доступ к дискам может быть ограничен до освобождения предыдущих захватов.
Файл конфигурации seastar.conf
Пример конфигурации /etc/storage/vhostd/seastar.conf:
smp = 4thread-affinity = 0reactor-backend = linux-aiomemory = 4Gabort-on-seastar-bad-alloc = truedefault-log-level = info
где:
smp — количество рабочих потоков (шардов) сервиса vhostd.
thread-affinity — привязка потоков к ядрам CPU.
reactor-backend — seastar может обслуживать запросы IO используя разные подсистемы ядра linux, такие как epoll, linux-aio и в экспериментальном режиме io_uring. Обычно используется linux-aio, в случае нехватки linux-aio хэндлов, можно работать через epoll
memory — общий объем выделяемой памяти для сервиса vhostd. Память разделена на равные части для всех шардов. Например, если smp = 4, memory = 4G, то каждый шард получит 4G/4 памяти (e.g. 1G).
abort-on-seastar-bad-alloc — внутренняя настройка ядра систар, если true, в случае нехватки памяти приложение падает.
default-log-level — уровень логирования внутренних подсистем seastar. Возможные варианты: trace, debug, info, warning, error. В лог попадают сообщения выбранного уровня и ниже (в примере info, warning, error).
В общем случае во время эксплуатации инженер может менять число шардов и общее число памяти, занятое приложением. Не рекомендуется менять другие настройки.
Файл конфигурации vhost.conf
Пример конфигурации /etc/storage/vhostd/vhost.conf:
## Logging configuration.log-to-file = 1log-dir = /var/log/storage/vhostdlog-level = info## Maximum number of virtqueues per VM.max-queues = 8## Volume sockets configuration.## Prefix for path to socket name passed with `storage vhost attach` command#unix-sock-prefix = /var/lib/storage## Permissions for volume sockets.unix-sock-perms = 0666## Configuration files.## Path to SDS membership configuration file.## When multiple membership configuration strings present, vhostd start to## work in multi-cluster mode.#membership = /etc/storage/mds_list.yml## Persistent attachments configuration file.#attachments = /etc/storage/vhostd/attachments.yml## SDS Client options.#open-timeout-sec = 10#mds-client-rpc-timeout-sec = 10#mds-client-refresh-lease-timeout-sec = 3#mds-iodepth-max = 0#cs-rpc-timeout-sec = 60#cs-iodepth-max = 0#cs-rpc-alignment = 128#rpc-keepalive-timeout-sec = 3#rpc-connect-timeout-ms = 100#mds-keepalive-period-sec = 10#mds-lease-timeout-sec = 15#cs-rpc-multipath = false#log-req-threshold-us = 60000000#cs-rdma = false#rdma-max-recv-wr-size = 16384#rdma-max-send-wr-size = 16384#rdma-max-recv-wr = 32#rdma-max-send-wr = 16## Enables per-volume IO metrics gathering#rbd-enable-volume-metrics = 1## vhostd control RPC port.#rpc-port = 60100## Disables support for virtio 0.95#disable-legacy = false## IO Memory limiting.#### Each IO request from VMs requires some temporary RAM memory.## Fair queuing algorithm is used to provide all VMs with fair share of shards'## memory.#### Each shard can't spend more than `io-mem-limit-mb` for all IO requests.#io-mem-limit-mb = 512#### Each shard can't have more than `io-mem-max-req` of allocated requests## at any single time.#io-mem-max-req = 2048#### "Lazy" VMs with low IO rate and thus low IO memory consumption guaranteed to## get at most `io-mem-handicap-kb` of memory before fair pessimization.#io-mem-handicap-kb = 512
Описанные выше настройки:
log-to-file — при значении 1 логи записываются в файлы, каждый шард получает свой файл лога.
log-dir — директория для хранения логов сервиса, если log-to-file равен 1.
log-level — уровень детализации логов сервиса vhostd (trace, debug, info, warn, error). В лог попадают сообщения выбранного уровня и ниже (в примере info, warning, error).
max-queues — максимальное количество очередей virtqueue на виртуальную машину. По умолчанию конфигурация qemu/libvirt виртуальной машины создаёт по одной очереди virtqueue на каждое ядро виртуальной машины. Эта настройка может быть изменена, позволяя запускать виртуальные машины с меньшим числом очередей, чем число ядер. Параметр обычно задают равным максимальному числу ядер флейвора виртуальной машины, который собираются использовать на этом гипервизоре. Параметр оказывает незначительное влияние на уровень потребления сервисом оперативной памяти. Если число большое, место под очереди выделяется, но не используется в виртуальной машине.
unix-sock-prefix — директория для создания unix-domain сокетов для дисков. Сервис libvirtd и процессы qemu должны иметь доступ к этой директории. Необходимо правильно настроить правила AppArmor для ubuntu, также как аналогичные правила для других систем.
unix-sock-perms — unix-domain сокеты в linux подчиняются тем же правилам доступа, что и обычные файлы в файловой системе. Они принадлежат пользователю, запускающему сервис vhostd и его группе. Доступы к ним конфигурируются маской доступа user/group/other. Пользователь, запускающий виртуальную машину, должен иметь read и write права из unix-domain сокета. 0600 — сокетом может пользоваться только пользователь storage, 0660 — пользователи группы storage тоже могут им пользоваться, 0666 — все пользователи, которые могут пользоваться сокетом.
membership — путь к файлу списка MDS-кластера (mds_list.yml). Если указать несколько строк membership с разными mds_list.yml, то vhostd будет работать с несколькими кластерами.
attachments — путь к файлу привязок (attachments.yml).
open-timeout-sec — таймаут открытия диска в секундах. Если диск не удалось открыть за это время, виртуальная машина получит EIO.
mds-client-rpc-timeout-sec — таймаут RPC-запросов к MDS в секундах.
mds-client-refresh-lease-timeout-sec — таймаут обновления lease.
mds-iodepth-max — максимальное количество одновременных запросов к MDS.
cs-rpc-timeout-sec — таймаут RPC-запросов к CS в секундах.
cs-iodepth-max — максимальное количество одновременных запросов к CS.
cs-rpc-alignment — выравнивание RPC-запросов по границе N байт.
rpc-keepalive-timeout-sec — таймаут keepalive-запросов в секундах.
rpc-connect-timeout-ms — таймаут подключения в миллисекундах.
mds-keepalive-period-sec — периодичность отправки keepalive сообщения в MDS.
mds-lease-timeout-sec — таймаут для запрашиваемых на каждый том lease (если vhostd не отправит сообщение об актуальности в течение данного периода времени, происходит lease expiration и том может быть открыт другим сервисом).
cs-rpc-multipath — использование нескольких адресов для соединения с CS (но не более одного одновременно; при потере соединения происходит переключение на следующий).
log-req-threshold-us — задержка пользовательского запроса, при превышении которой информация о нем будет выведена в лог (с уровнем по умолчанию info).
rbd-enable-volume-metrics — включение сбора метрик ввода-вывода для каждого тома.
rpc-port — порт для RPC-подключений от storage vhost.
disable-legacy — отключение поддержки драйверов virtio версии ниже 1.0.
io-mem-limit-mb — лимит памяти в мегабайтах на запросы ввода-вывода для шарда.
io-mem-max-req — максимальное количество запросов ввода-вывода на шард.
io-mem-handicap-kb — гарантированный объем памяти в килобайтах для «ленивых» потребителей.
cs-rdma — использование RDMA для RPC-подключений к CS.
rdma-max-recv-wr-size — максимальный размер блока чтения для RDMA RPC.
rdma-max-send-wr-size — максимальный размер блока записи для RDMA RPC.
rdma-max-send-wr — максимальное количество блоков записи для RDMA RPC.
rdma-max-recv-wr — максимальное количество блоков чтения для RDMA RPC.
Файл описания хоста host.yml
Файл создается командой storage host init в директории /etc/storage и содержит:
id: 12369362308454357025network:public_ip: 192.168.50.100internal_ip: 192.168.50.100location:dc: 0pod: 0rack: 0
Сервис vhostd использует только поле id для идентификации клиента серверами метаданных.
Файл привязок attachments.yml
Сервер vhostd читает файл привязок на старте приложения, затем автоматически обновляется сервисом при получении RPC-команд attach/detach. Для управления списком привязок используйте утилиту storage (см. Управление сервисом с использованием приложения storage). Ручное редактирование файла не рекомендуется.
Вся информация о привязках дисков SDS к unix-сокетам хранится в файле attachments.yml. Есть две версии файла привязок: однокластерная и многокластерная. В таблице 1 приведены данные о поддержке разных типов файлов конфигурации в зависимости от версии сервиса.
Однокластерная |
Многокластерная |
|
---|---|---|
До 1.1.33 |
Пишет/читает |
Не поддерживается |
Начиная с 1.1.33 |
Читает |
Пишет/читает |
Однокластерный файл привязок, созданный в версиях до 1.1.33, будет обновлен до многокластерного в новых версиях после первого запроса на добавление/удаление привязки (attach/detach). Примеры обоих типов файлов привязок приведены ниже.
Однокластерный файл привязки:
attachments:- socket: /var/lib/storage/vm-7.sockvolume: 1188720214885462987lease_type: exclusive- socket: /var/lib/storage/vm-9.sockvolume: 2505640571972518589lease_type: exclusive- socket: /var/lib/storage/vm-5.sockvolume: 2627409228362989075lease_type: exclusive
Многокластерный файл привязки:
version: 1attachments:- socket: /var/lib/storage/vm-7.sockvolume: 1188720214885462987lease_type: exclusivecluster_id: 123- socket: /var/lib/storage/vm-9.sockvolume: 2505640571972518589lease_type: exclusivecluster_id: 4444- socket: /var/lib/storage/vm-5.sockvolume: 2627409228362989075lease_type: exclusivecluster_id: 123
Поле версии (version) равно 1 для многокластерного варианта, для однокластерного поле версии отсутствует.
Файл привязки содержит список описаний привязок (attachments):
socket — полный путь до файла unix-domain сокета.
volume — десятичное представление ID SDS-диска.
lease_type — тип владения привязкой (exclusive, shared-rw, shared-ro).
cluster_id — ID SDS-кластера, к которому относится привязка. (в многокластерном варианте с версии 1.1.33).
Файл списка серверов метаданных кластера mds_list.yml
Начиная с версии 1.1.33 сервис поддерживает работу с несколькими независимыми кластерами. Выбор с какими кластерами может работать сервис определяется указателями на файлы списка серверов метаданных mds_list.yml.
Пример файла mds_list.yml:
cluster_id: 4312cluster_uuid: 422B0181-EF4A-44E1-AF80-08AB05092A54membership_config_version: 17mdses:- id: 1address: 192.168.50.1grpcport: 60002rpcport: 60003
Файл содержит в себе:
cluster_id — ID кластера, заданный при его создании.
cluster_uuid — уникальный UUID, генерируемый автоматически при создании кластера.
membership_config_version — версия файла, обновляется когда происходит обновление состава SDS-кластера.
- mdses — список серверов метаданных:
id — ID сервера метаданных в кластере.
address — IP-адрес сервера.
grpcport — порт gRPC.
rpcport — порт Seastar RPC.
Сервис vhostd автоматически обновляет файл при изменениях в конфигурации кластера.
- Файл конфигурации seastar.conf
- Файл конфигурации vhost.conf
- Файл описания хоста host.yml
- Файл привязок attachments.yml
- Файл списка серверов метаданных кластера mds_list.yml